Organizar e depurar programas

Cabeçalhos, definições, ligação, CMake, CLion e um procedimento de depuração.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Onde está a definição?

O cabeçalho declara a função. O ficheiro .cpp define-a. A ligação junta os objetos.

// dobro.hpp, com guarda:
double dobro(double valor);

// dobro.cpp:
#include "dobro.hpp"
double dobro(double valor) { return 2.0 * valor; }
  • Cada .cpp com includes é uma unidade. Compila sozinho, liga junto.
  • Sem dobro.cpp, a ligação falha com undefined reference.
  • dobro(int) em vez de dobro(double) cria outra sobrecarga. A esperada continua em falta.
  • Não incluas .cpp. Acrescenta ao alvo.

Como compilo?

g++ -std=c++17 -Wall -Wextra -Wpedantic main.cpp dobro.cpp -o exemplo
./exemplo
add_executable(exemplo main.cpp dobro.cpp)
target_compile_features(exemplo PRIVATE cxx_std_17)

cmake -S . -B build configura. cmake --build build compila. Não edites build.

Que fase falhou?

SintomaFaseVerifica primeiro
Nome desconhecidoCompilaçãoInclude, declaração, assinatura
Referência por definirLigação.cpp no alvo, definição igual
Símbolo repetidoLigaçãoDefinições em cabeçalhos
Valor erradoExecuçãoContrato, entrada, estado
Falha de memóriaExecuçãoLimites, vida, dono

Depurar:

  1. Reduz a entrada com resultado conhecido.
  2. Compila Debug, para antes da divergência.
  3. Compara estado com o contrato.
  4. Corrige, repete, acrescenta teste. Só depois alarga fronteiras.

Com {-1, -2}, erase devolve iterador para -2. Avançar outra vez salta-o por engano.

Compilação separada.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.