c语言全局变量extern怎么用?
在C语言中,extern关键字用于声明一个全局变量,表示该变量在其他文件中定义,当前文件中只是引用该变量。使用extern关键字的语法格式如下:
extern 数据类型 变量名;
其中,数据类型表示变量的类型,变量名表示变量的名称。使用extern关键字声明的变量可以在当前文件中使用,但是其定义必须在其他文件中进行。例如,在文件A中声明一个全局变量:
extern int global_var;
在文件B中定义该全局变量:
int global_var = 10;
在文件A中就可以使用该全局变量了,例如:
#include <stdio.h> extern int global_var; int main() { printf("global_var = %d ", global_var); return 0; }
需要注意的是,extern关键字只是声明一个全局变量,而不是定义它。因此,在使用extern关键字声明全局变量时,必须在其他文件中定义该变量,否则会导致链接错误
C语言的extern关键字用来声明一个变量是在其他地方定义的,这样在当前作用域中使用该变量时,就不会将其分配内存。
具体用法是在使用该变量之前先声明其为extern类型,同时需要在其他文件中定义该变量。
这样可以避免在多文件程序中重复定义变量而导致编译器的错误。
需要注意extern变量的作用域只能在一个文件内,而不能在整个程序中生效。
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。
如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:
extern int f(); 和int f();
当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,比较习惯在所有的函数声明前添加extern修饰。
C编译器编译后的函数,为什么要加extern“C”声明?
函数经过编译系统的翻译成汇编,函数名对应着汇编标号。因为C编译函数名与得到的汇编代号基本一样,如:fun()=>_fun, main=>_main但是C++中函数名与得到的汇编代号有比较大的差别。如:由于函数重载,函数名一样,但汇编代号绝对不能一样。为了区分,编译器会把函数名和参数类型合在一起作为汇编代号,这样就解决了重载问题。具体如何把函数名和参数类型合在一起,要看编译器的帮助说明了。这样一来,如果C++调用C,如fun(),则调用名就不是C的翻译结果_fun,而是带有参数信息的一个名字,因此就不能调用到fun(),为了解决这个问题,加上extern "C"表示该函数的调用规则是C的规则,则调用时就不使用C++规则的带有参数信息的名字,而是_fun,从而达到调用C函数的目的。在make方式加入lib的方法,直接看编译器的命令行参数的帮助说明。在集成开发环境中链接一个lib的方法有两个:
1。在菜单project->add to project->files...中加入对应的lib文件即可。
2。在project->setting中link的object/library modules中加入对应lib文件方法1较2好,因为2必须在debug,release等中分别设置。

