extern关键字
来源:互联网 发布:for数组去重 编辑:程序博客网 时间:2024/04/30 15:06
对于关键字extern的用法,有如下几种情况:
第一,引入其它文件中定义的全局变量或者函数。
比如在a.c文件里定义了一个全局变量和函数:
/*file:a.c*/
int g_total_number=100;
int func(void)
{
....
}
如果想在b.c文件里引用a.c文件里的全局变量与函数(不能有static修饰),那么就可以在b.c里使用extern来导入:
/*file:b.c*/
extern int g_total_number;
extern int func(void);
这样就可以在b.c文件里继续引用这2个符号了。
第二,如果在.cpp里调用了c库中定义的函数,那么需要将c库中的函数使用extern "C"来防止这些函数被C++中的命名重整(name mangling)修改名字, 造成无法找到对应的c函数。比如:
如果C库中定义和实现了如下函数:
int func1(int x);
int func2(char *str);
那么如果要在.cpp里使用这些函数,必须通过下面的形式导入:
extern "C" int func1(int x);
extern "C" int func2(char *str);
或者:
extern "C"
{
int func1(int x);
int func2(char *str);
}
这样,C++就不会对extern "C"包含的函数进行命名重整了,才能够根据正确的函数名找到对应的函数。
第一,引入其它文件中定义的全局变量或者函数。
比如在a.c文件里定义了一个全局变量和函数:
/*file:a.c*/
int g_total_number=100;
int func(void)
{
....
}
如果想在b.c文件里引用a.c文件里的全局变量与函数(不能有static修饰),那么就可以在b.c里使用extern来导入:
/*file:b.c*/
extern int g_total_number;
extern int func(void);
这样就可以在b.c文件里继续引用这2个符号了。
第二,如果在.cpp里调用了c库中定义的函数,那么需要将c库中的函数使用extern "C"来防止这些函数被C++中的命名重整(name mangling)修改名字, 造成无法找到对应的c函数。比如:
如果C库中定义和实现了如下函数:
int func1(int x);
int func2(char *str);
那么如果要在.cpp里使用这些函数,必须通过下面的形式导入:
extern "C" int func1(int x);
extern "C" int func2(char *str);
或者:
extern "C"
{
int func1(int x);
int func2(char *str);
}
这样,C++就不会对extern "C"包含的函数进行命名重整了,才能够根据正确的函数名找到对应的函数。
0 0
- Extern关键字
- extern 关键字
- extern 关键字
- extern关键字
- extern关键字
- extern关键字
- extern 关键字
- extern关键字
- extern 关键字
- extern关键字
- extern关键字
- extern关键字
- 关键字extern
- extern关键字
- extern关键字
- extern 关键字
- extern关键字
- extern关键字
- hdoj 4553 约会安排 【线段树区间合并】
- 溢出问题
- 华为机试——求一个字符串中的最大回文子串
- DOM的基础操作记忆
- iOS 引入字体库
- extern关键字
- Guava并发(2)——ListenableFuture\FutureCallback\SettableFuture\Futures
- Activity的跳转和传递数据
- Linux下redis的安装
- volatile关键字
- centos搭建samba服务器(新手简易篇)
- Android缓存处理
- Linux自学笔记(一)
- 带边框的文本框TextView