Avatar ·

C++中声明和定义的区别是什么?

你好!我最近开始学习C++,总是搞混“声明”(declaration)和“定义”(definition)这两个术语。听起来差不多,但编译器会对不同的事情报错。 下面这个例子让我很困惑。我写了这样的代码: ```cpp #include int x; // 这是声明还是定义? extern int y; // 这个呢? void foo(); // 这个呢? int main() { std::cout << x; return 0; } void foo() { // 一些实现 } ``` 如果我删掉 `void foo() { ... }` 只保留 `void foo();`,编译器会报链接错误。但如果我写 `int x;` 不加 `extern`,一切正常。为什么?在什么情况下 `int x;` 是声明,什么情况下是定义?还有什么是ODR(One Definition Rule)?请用通俗的语言和例子解释一下,让我不再混淆。 <<>>

关键区别:声明告诉编译器“某物存在”,而定义告诉“它长什么样”

声明和定义之间的区别