C extern声明
跳到导航
跳到搜索
外部声明extern用于引用全局变量,该全局变量的主声明在其他地方——在同一模块中,或在另一个编译模块中。它是这样的:
extern basetype decorated-variable;
它的含义是,在当前作用域中,变量名指的是该名称的文件作用域变量——它需要在其他地方以非外部、非静态的方式声明。
例如,如果一个编译模块有这个全局变量声明
int error_count = 0;
然后其他编译模块可以指定它
extern int error_count;
允许引用同一变量。
通常编写外部声明的位置是在源文件的顶层,但是您可以在块中编写外部声明,以便在该块中访问全局或静态文件作用域变量。
由于extern声明不为变量分配空间,因此可以省略数组的大小:
extern int array[];
可以在自动转换为指针的所有上下文中正常使用array。然而,使用它作为sizeof的操作数是错误的,因为它的大小是未知的。
对于相同的变量,即使在相同的作用域中,如果它们给出相同的类型,那么对它们进行多个外部声明也是有效的。他们并不冲突——他们是一致的。对于数组,某些外部声明可以指定大小,而其他外部声明可以省略它,这是合法的。但是,如果两个声明给出不同的大小,则会产生错误。
同样,您可以在文件作用域中使用外部声明(参见文件作用域变量),然后对同一变量进行普通的全局(非静态)声明。它们并不冲突,因为它们对变量的相同含义说了兼容的东西。