Avatar ·

¿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