¿Cuál es la diferencia entre declaración y definición en C++?
¡Hola! Recientemente empecé a estudiar C++ y constantemente me confundo con los términos «declaración» (declaration) y «definición» (definition). Suenan parecido, pero el compilador se queja de cosas diferentes.
Aquí hay un ejemplo que me confundió. Escribí este código:
```cpp
#include
int x; // ¿Esto es declaración o definición?
extern int y; // ¿Y esto?
void foo(); // ¿Y aquí?
int main() {
std::cout << x;
return 0;
}
void foo() {
// alguna implementación
}
```
Si elimino `void foo() { ... }` y dejo solo `void foo();`, el compilador dará un error de enlace. Pero si escribo `int x;` sin `extern`, todo funciona. ¿Por qué? ¿En qué casos `int x;` es una declaración y en cuáles una definición? ¿Y qué es ODR (One Definition Rule)? Explíquenme, por favor, de manera sencilla, con ejemplos, para que ya no me confunda.
<<>>
Diferencia clave: la declaración le dice al compilador «algo existe», mientras que la definición — «así es como se ve»
La diferencia entre declaraci