石家庄建站公司,深信服对单一网站做限速,枫泾网站建设,网站开发 需要用到什么软件extern关键字主要修饰变量或函数#xff0c;表示该函数可以跨文件访问#xff0c;或者表明该变量在其他文件定义#xff0c;在此处引用。
extern修饰变量
#xff08;1#xff09;如果某变量int m在a.c中定义声明#xff0c;则其他b.c文件访问时#xff0c;需要用exte…extern关键字主要修饰变量或函数表示该函数可以跨文件访问或者表明该变量在其他文件定义在此处引用。
extern修饰变量
1如果某变量int m在a.c中定义声明则其他b.c文件访问时需要用extern声明该变量才可以。
注意extern的严格声明如在一个文件中声明char a[] abcd;另一个文件如果访问需声明extern char a[]而不能是extern char *a;
2如果在*.h中声明其他文件使用时则只需要包含头文件即可无需再声明建议只在头文件中声明就好了。
注意extern可以声明无数次但只能定义一次否则会出现链接错误。另外能够被其他模块以extern修饰符引用到的变量通常是全局变量extern int m可以放在b.c中的任何地方,如果放在代码块内则b.c中访问m的区域就只能限于代码块内。
3如果一个变量声明于代码块内部在它前面添加extern表示引用的是全局变量而不是局部变量。
extern修饰函数(不用C修饰)
extern修饰函数和变量没有区别只需extern声明后即可用于该文件中各个位置。对其他模块中函数的引用最常用的方法是包含这些函数声明的头文件在程序中取代include “*.h”来声明函数。
一般调用方式如下首先在头文件extern 修饰声明函数包含该头文件在对应的c文件中实现该函数C语言中其他文件使用时可以直接调用也可用extern声明该函数后使用但C必须声明后才能使用。建议声明后使用。
使用extern和包含头文件来引用函数有什么区别呢
extern的引用方式比包含头文件要简洁得多extern的使用方法是直接了当的想引用哪个函数就用extern声明哪个函数。这样做的一个明显的好处是会加速程序的编译确切的说是预处理的过程节省时间。在大型C程序编译过程中这种差异是非常明显的。
extern用于C\C相互调用
1C调用C C头文件中函数前用extern C修饰声明在对应的cpp文件中实现该函数时需注意函数接口不能使用vector或string等C专有特性否则C中无法使用
一般调用方式如下首先在C头文件extern C修饰声明函数包含该头文件在对应的cpp文件中实现该函数使用时可以和普通extern声明函数一样使用在C语言中只能指定为extern类型C语言中不支持externC声明。
2C调用C
C语言在编译的时候为了解决函数的多态问题会将函数名和参数联合起来生成一个中间的函数名称而C语言则不会因此会造成链接时找不到对应函数的情况此时C函数就需要用extern “C”进行链接指定这告诉编译器请保持我的名称不要生成用于链接的中间函数名。
一般调用格式有两种第一种在c语言头文件中用externC声明
exte.h
#ifdef __cplusplus
extern C {
#endifvoid mytest();#ifdef __cplusplus
}
#endif
exte.c
#include exte.h
#include stdio.h
void mytest(){printf(%s, mytest);
}
main.cpp
#includeiostream
//#include exte.h
extern C void mytest();//和上面的语句二选一即可如果函数太多一般用上面包含头文件的方法
int main(){mytest();system(pause);return 0;
}
第二种是在cpp文件调用时通过externC包含C语言头文件
exte.h
void mytest();
exte.c void mytest(){printf(%s, mytest); }
main.cpp
#includeiostreamextern C{ //和下面的语句二选一即可#include exte.h
}//extern C void mytest();int main(){mytest();system(pause);return 0;
}
其中第二种可以去掉include头文件调用时extern C void mytest();即可。