extern "C" 用法
来源:互联网 发布:xmindpro7 mac 破解版 编辑:程序博客网 时间:2024/05/16 09:46
C++中extern "C"的设立动机是实现C++与C及其它语言的混合编程。 C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为:
void foo(int x, int y);
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。
该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。
C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。
C++中 extern "C" 的两种用法
1. 如果要在C++程序中调用C语言写的函数, 在C++程序里边用 extern "C" 修饰要被调用的这个C程序,告诉C++编译器此函数是C语言写的,是C语言编译器生成的,调用他的时候请按照C语言习惯传递参数等。如:
//在C++程序里边声明该函数
extern "C" int strcmp(const char *s1, const char *s2);
2. 用C++语言写的一个函数,如果想让这个函数可以被其他C语言程序所用,则用extern "C" 来告诉C++编译器,请用C语言习惯来编译此函数。如:
extern "C" int strcmp(const char *s1, const char *s2)
{
while (*s1 && *s1++ == *s2++) {
}
return *s1 - *s2;
}
大工程下我们会碰到很多源文件。
文件a.c
static int i; //只在a文件中用
int j; //在工程里用
static void init() //只在a文件中用
{
}
void callme() //在工程中用
{
static int sum;
}
文件b.c
extern int j; //调用a文件里的
extern void callme(); //调用a文件里的
int main()
{
...
}
文件A.cpp调用a.c里面的变量i和函数callme()
extern "C" //在c++文件里调用c文件中的变量
{
int j;
void callme();
}
int main()
{
callme();
}
A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
- extern及extern “C”用法
- extern及extern “C”用法
- extern "C"的用法
- extern "C" 用法 (转贴)
- c中的extern用法
- "extern" C的用法
- extern "C"用法解析
- extern "C"用法
- Extern “C” 用法小结
- extern C的用法
- extern "C"的用法...
- extern “C”用法
- extern c 的用法
- extern "C"的用法
- extern "c"用法
- extern "C"的用法
- extern “c”的用法
- extern c用法
- C++学习之拷贝构造函数篇
- 编译第三方库debug和release不同文件形式的编译
- sql server 清空表后 释放空间语句
- 在eclipse开发工具中使用JUnit4进行单元测试详解(二)提高篇
- echarts动态加载data
- extern "C" 用法
- jsoncpp 构造空数组
- 关于发展职业之外的爱好
- PHP解析带CDATA的XML方法
- 重拾编程之路--String to Integer (atoi)
- 在openstack上安装centos 出现的问题scheduler. 虚机内嵌套
- Qt webview 使用
- 超快的Android模拟器Genymotion安装配置及使用教程
- Amazon AWS