C 外部变量声明和定义

C 外部变量声明和定义,c,variables,scope,extern,C,Variables,Scope,Extern,我知道extern变量只是一个声明,它告诉编译器存在一个变量,并且可以在任何地方定义它。我的问题是,声明和定义是否可以出现在同一个文件中 main.c extern int var; int var = 10; 当您包含一个头文件时,该文件实际上被复制到源文件中(在预处理之后)。这意味着,如果extern声明位于源包含的头文件中,则基本上总是这样做。您可以这样做,但没有意义,因为变量的声明具有相同的用途。extern应放入头文件并包含在此.c文件中,以便编译器可以检查您告诉程序其余部分的类型是

我知道extern变量只是一个声明,它告诉编译器存在一个变量,并且可以在任何地方定义它。我的问题是,声明和定义是否可以出现在同一个文件中

main.c

extern int var;
int var = 10;

当您包含一个头文件时,该文件实际上被复制到源文件中(在预处理之后)。这意味着,如果extern声明位于源包含的头文件中,则基本上总是这样做。

您可以这样做,但没有意义,因为变量的声明具有相同的用途。
extern
应放入头文件并包含在此.c文件中,以便编译器可以检查您告诉程序其余部分的类型是否与变量的实际类型匹配。您可以在其他要引用该变量的.c文件中包含头。请注意,声明变量的.c文件不一定要查看
外部
,但最好确保类型一致

我记得有人在代码中声明了一个变量:

char error_ message[1024];
在一个.c文件中,然后执行以下操作:

extern char *error_message;

在另一个.c文件中。这段代码编译并链接得很好,但是在访问变量时崩溃了。如果
extern
在声明中是可见的,编译器会抱怨类型不匹配。

甚至
int-var;int-var;int-var=10在声明/定义全局变量时有效