【发布时间】:2014-03-20 14:50:35
【问题描述】:
我知道 extern 变量只是声明以通知编译器存在变量并且可以在任何地方定义它。我的问题是声明和定义可以同时出现在同一个文件中吗?
main.c
extern int var;
int var = 10;
【问题讨论】:
-
即使
int var; int var; int var = 10;在声明/定义全局变量时也有效
我知道 extern 变量只是声明以通知编译器存在变量并且可以在任何地方定义它。我的问题是声明和定义可以同时出现在同一个文件中吗?
main.c
extern int var;
int var = 10;
【问题讨论】:
int var; int var; int var = 10;在声明/定义全局变量时也有效
当您包含标头时,该文件实际上被复制到您的源文件中(在预处理之后)。这意味着如果 extern 声明位于源包含的头文件中,则基本上总是这样做。
【讨论】:
您可以这样做,但没有意义,因为变量的声明具有相同的目的。 extern 应该放在头文件中并包含在这个 .c 文件中,以便编译器可以检查您告诉程序其余部分的类型是否与变量的实际类型匹配。您可以在要引用该变量的其他 .c 文件中包含标头。请注意,声明变量的 .c 文件不一定非要查看 extern,但最佳做法是确保类型一致。
我记得有人声明变量的一些代码:
char error_ message[1024];
在一个 .c 文件中,然后执行:
extern char *error_message;
在另一个 .c 文件中。这编译和链接得很好,但是在访问变量时崩溃了。如果 extern 在声明中可见,编译器会抱怨类型不匹配。
【讨论】: