在C语言中,extern
关键字用于声明一个变量或函数是在程序的其他地方定义的。当你写extern myGlobalVar;
时,你实际上是在告诉编译器:“嘿,编译器,我知道这个myGlobalVar
变量在程序的其他地方(可能是另一个源文件)已经被定义了,并且我想在这里使用它。”
然而,需要注意的是,这种写法(extern myGlobalVar;
)省略了变量的类型。在C90标准中,这种省略类型的写法是不合法的,因为编译器需要知道变量的类型以便正确地处理它。但在C99标准中,如果之前已经通过某种方式(比如通过包含定义了该变量的头文件)让编译器知道了变量的类型,那么这种省略类型的extern
声明是被允许的,但它依赖于之前的类型声明。
但在实际编程中,为了清晰和避免潜在的错误,通常建议总是显式地指定变量的类型,即使编译器可能允许省略类型。因此,更标准的写法是:
extern int myGlobalVar; |
这样,编译器就明确地知道了myGlobalVar
是一个int
类型的变量。
如果你直接写extern myGlobalVar;
并且它工作了,那么很可能是因为:
- 你之前已经通过包含头文件等方式让编译器知道了
myGlobalVar
的类型。 - 你正在使用一个支持这种省略类型的编译器扩展(尽管这不是C标准的一部分)。
- 你的代码可能依赖于未定义的行为或特定的编译器行为,这可能会导致在不同的编译器或不同的编译设置下出现错误。
因此,为了编写可移植和健壮的代码,建议始终在extern
声明中显式地指定变量的类型。