extern "c"{}
来源:互联网 发布:大麦盒子怎么安装软件 编辑:程序博客网 时间:2024/06/05 02:27
在C++中,有一个extern “c”{} 的用法,主要为了与C兼容。
C++中,编译器为处理同名函数的符号链接问题,一般会自己定义一套符号命名规则,如:
void func(int);
可能在编译后被命名成这样:
_void_func_int
当然,上面只是我自己弄的……,实际的编译器有自己的规则,但是在C语言的链接库中,符号名是已经确定了的,如:
void * memset(void *, int, size_t);
其符号名就是memset,如果使用C++编译器,经实际的符号处理后(每个编译器都不一样,这里是假设有这么一个编译器),可能变成:
_void_memset_void_int_size_t
这样在链接的时候,就无法在C语言的库中找到相应的函数入口地址。
于是extern “c”{} 出来了,它告诉C++编译器,此 {} 中的符号不要经过编译器的符号处理,所以在C语言的头文件中,为了在C++能继续使用这些函数,需要对相应声明函数作如下处理:
extern "c" { void * memset(void *, int, size_t);}
但是还有一个问题,就是C语言不支持extern “c”{} 语法,于是又为了兼顾C与C++,采用了预处理的方法,在C语言中,则不加extern “c” {} ,在C++中,则加上extern “c”{} :
#ifdef __cplusplus//若在C++中extern "c"{#endif void * memset(void *, int, size_t);#ifdef __cplusplus}#endif
先将目前的认识记下来吧。
阅读全文
0 0
- extern &&extern c
- extern, extern "C",__stdcall
- extern与extern "C"
- extern 和extern "C"
- extern与extern “C”
- extern 与 extern "C"
- extern 和 extern“C”
- c/c++:extern,extern "C"
- extern“C” ???
- extern "C"
- C extern
- extern"c"
- extern "C"
- extern "C"
- extern "C" {}
- C extern
- extern "C"
- extern c
- webpack配置文件详解(二)
- C++实现一个复数类
- MFC整型和字符串互相转换
- opencv
- 添加好友(快速幂 金马五校赛-上海大学)
- extern "c"{}
- Ubuntu遇到的错误总结
- Java精选笔记_JSTL(JSP标准标签库)
- 强联通注意点
- deepin激活SCRT
- 存储过程简介
- 字符串进制转换(进制转换 金马五校赛-上海大学)
- BZOJ 3196 二逼平衡树 树套树
- 点击量自动增加