Qual é a diferença entre declaração e definição em C++?
Olá a todos! Acabei de começar a estudar C++ e fiquei confuso com os termos "declaração" (declaration) e "definição" (definition). Parece que ambos estão relacionados à criação de variáveis e funções, mas não entendo qual é a diferença fundamental.
Por exemplo, escrevo o seguinte código:
```cpp
int x; // Isso é declaração ou definição?
extern int y; // E isso?
void foo(); // E isso?
void foo() { } // E isso?
```
Quando escrevo `int x;` dentro de uma função, o compilador cria a variável e aloca memória para ela. Mas quando escrevo `extern int y;`, o programa não compila se eu não adicionar `int y;` em algum outro lugar. Por que isso? Qual é a lógica aqui?
Também ouvi dizer que a declaração pode ser repetida, mas a definição não. No entanto, na prática, recebo um erro "multiple definition" se escrever `int x;` duas vezes no escopo global. Mas se escrever `extern int x;` duas vezes, funciona. Expliquem, por favor, como isso funciona em palavras simples, com exemplos. Desde já, obrigado!