我知道C中的全局变量有时有extern关键字。什么是extern变量?申报是什么样的?它的范围是什么?
这与跨源文件共享变量有关,但这究竟是如何工作的呢?我在哪里使用extern?
我知道C中的全局变量有时有extern关键字。什么是extern变量?申报是什么样的?它的范围是什么?
这与跨源文件共享变量有关,但这究竟是如何工作的呢?我在哪里使用extern?
当前回答
首先,extern关键字不用于定义变量;相反,它用于声明变量。我可以说extern是一个存储类,而不是数据类型。
extern用于让其他C文件或外部组件知道这个变量已经在某处定义。例如:如果你正在构建一个库,不需要在库本身的某个地方强制定义全局变量。库将直接编译,但在链接文件时,它将检查定义。
其他回答
我喜欢把extern变量看作是你对编译器做出的承诺。
当遇到一个extern时,编译器只能找出它的类型,而不能找出它“居住”的位置,因此它不能解析引用。
你告诉它:“相信我。在链接时,这个引用将是可解析的。”
Extern告诉编译器信任你,这个变量的内存在其他地方声明了,所以它不会尝试分配/检查内存。
因此,您可以编译一个引用extern的文件,但是如果没有在某个地方声明该内存,则不能进行链接。
对于全局变量和库很有用,但是危险,因为链接器不进行类型检查。
首先,extern关键字不用于定义变量;相反,它用于声明变量。我可以说extern是一个存储类,而不是数据类型。
extern用于让其他C文件或外部组件知道这个变量已经在某处定义。例如:如果你正在构建一个库,不需要在库本身的某个地方强制定义全局变量。库将直接编译,但在链接文件时,它将检查定义。
Extern关键字与变量一起使用,以将其标识为全局变量。
它还表示可以使用使用extern声明的变量 关键字在任何文件中,尽管它在其他文件中声明/定义。
走读生 允许程序的一个模块访问程序的另一个模块中声明的全局变量或函数。 通常在头文件中声明extern变量。
如果你不想让一个程序访问你的变量或函数,你可以使用static,它告诉编译器这个变量或函数不能在这个模块之外使用。