Avatar ·

Quelle est la différence entre déclaration et définition en C++?

Bonjour ! J'ai récemment commencé à apprendre le C++ et je confonds constamment les termes « déclaration » (declaration) et « définition » (definition). Cela semble similaire, mais le compilateur se plaint de choses différentes. Voici un exemple qui m'a embrouillé. J'ai écrit ce code : ```cpp #include int x; // Est-ce une déclaration ou une définition ? extern int y; // Et ça ? void foo(); // Et ici ? int main() { std::cout << x; return 0; } void foo() { // une implémentation quelconque } ``` Si j'enlève `void foo() { ... }` et que je laisse seulement `void foo();`, le compilateur génère une erreur de linkage. Mais si j'écris `int x;` sans `extern`, tout fonctionne. Pourquoi ? Dans quels cas `int x;` est-il une déclaration, et dans quels cas une définition ? Et qu'est-ce que l'ODR (One Definition Rule) ? Expliquez-moi, s'il vous plaît, simplement, avec des exemples, pour que je ne me trompe plus.