坚信科学,分享技术

Monthly Archives: 02月 2008

extern--C/C++语言中表明函数和全局变量作用范围

extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字. 它告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 1。对于extern变量来说,仅仅是一个变量的声明,其并不是在定义分配内存空间。如果该变量定义多次,会有连接错误 2。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。也就是说c文件里面定义,如果该函数或者变量与开放给外面,则在h文件中用extern加以声明。所以外部文件只用include该h文件就可以了。而且编译阶段,外面是找不到该函数的,但是不报错。link阶段会从定义模块生成的目标代码中找到此函数。 3。与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。 后面转载,阅读中。。。。。。。 被extern "C"修饰的变量和函数是按照C语言方式编译和连接的; 未加extern “C”声明时的编译方式   首先看看C++中对类似C的函数是怎样编译的。 作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为: void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。 _foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制

Continue reading

Posted in WEB相关 | Tagged | 6 Comments