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)?请用通俗的语言和例子解释一下,让我不再混淆。
<<>>
关键区别:声明告诉编译器“某物存在”,而定义告诉“它长什么样”
声明和定义之间的区别