C++中声明和定义有什么区别?
大家好!我刚开始学习C++,对“声明”(declaration)和“定义”(definition)这两个术语感到困惑。它们似乎都与变量和函数的创建有关,但我不明白根本区别在哪里。
例如,我写了这样的代码:
```cpp
int x; // 这是声明还是定义?
extern int y; // 这个呢?
void foo(); // 这个呢?
void foo() { } // 这个呢?
```
当我在函数内部写`int x;`时,编译器会创建变量并为其分配内存。而当我写`extern int y;`时,如果不在其他地方添加`int y;`,程序就无法编译。为什么会这样?这里的逻辑是什么?
我还听说声明可以重复,而定义不能。但实际上,如果在全局作用域中两次写`int x;`,我会得到“multiple definition”错误。但如果两次写`extern int x;`,一切正常。请用简单的语言和例子解释一下这是如何工作的。提前谢谢!