C中的声明和定义混淆

6 c external public extern

这个答案困惑了我.

如果我们在同一个.c文件中有两行:

extern int c;
int c;
Run Code Online (Sandbox Code Playgroud)
  • 第一行代码如何成为声明,第二行如何定义?
  • 这两个声明都不是吗?
  • 这两行有何不同?

dbu*_*ush 1

关键字extern使第一行成为声明。它说“这个变量存在于某处”。这样的行可以出现在头文件中。

第二行是定义,因为extern关键字不存在。如果您要在头文件中包含此行,则包含该头文件的两个源文件都将定义该变量,并且链接这两个文件将导致变量重新定义错误。