请问大侠:是不是只要用extern "C" 声明,编译器就会以C风格编译?

himachao 2003-08-23 03:03:42
是不是只要用extern "C" 声明,编译器就会以C风格编译?
...全文
21 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
金笛子 2003-08-24
  • 打赏
  • 举报
回复
我同意aflyinghorse
aflyinghorse 2003-08-24
  • 打赏
  • 举报
回复
关于函数名的重整(name mangling)
可以参考More Effective C++ Item 34
有比较详细的论述
loyyer 2003-08-24
  • 打赏
  • 举报
回复
就是这样
ttlb 2003-08-24
  • 打赏
  • 举报
回复
多谢
violetblue 2003-08-24
  • 打赏
  • 举报
回复
好像是这样的
因为在c里没有函数名重用一说,就是不允许函数名相同的多个函数出现,所以像下面的函数
void Fun(int i)
c里编译成Fun(),而c++里编译成Fun_int()
可能不太确切,不过大致是这个意思。
grail0922 2003-08-23
  • 打赏
  • 举报
回复
extern关键字是为了C++编译器与非C++代码进行连接而起作用的。
不同语言,或者同一语言的不同实现可能在以下几个方面存在差异:
1)使用寄存器保存差数的方式;
2)将参数放入堆栈的顺序;
3)整数或字符串等内部类型的布局;
4)编译器传替给连接器的名字;
5)对连接器所要求的地类型检查的量方面。
extern "c"就是声明函数按照C的连接约定进行连接,并不影响调用函数的语义。仍然要遵守C++的类型检查和参数转换规则,而不是C的教弱的规则;
编译时,编译器会给C函数名前加上一个特定的前缀,和其他的C++函数名进行区别,这就是上面所谓的“函数名重整”(此说法的正确信我没有进行考察)

另外,这并不仅仅是适用于调用C库函数,对自定义库函数和其他自定义C函数都是可以得。

暂时说这么多,如果解答的不好请大家见谅。
ttlb 2003-08-23
  • 打赏
  • 举报
回复
回复人: aflyinghorse() ( ) 信誉:100 2003-08-23 16:17:00 得分:0
extern "C"用作C和C++的混合编程
如在C++中调用C的库函数,把C库函数的声明
用extern "C"表示,这些函数就按C的方式编译,
不对函数名进行重整

请问什么是“函数名重整”?
Meyer 2003-08-23
  • 打赏
  • 举报
回复
yes
new1mm 2003-08-23
  • 打赏
  • 举报
回复
ty
njtu 2003-08-23
  • 打赏
  • 举报
回复
extern "C" 用作C++中的C标记。

可以指定使用C方式编译,不过更多地用法是指明你要调用的函数是一个C函数;

#ifdef __cplusplus
extern "C" void myfunc( void);
#endif
davidwoo 2003-08-23
  • 打赏
  • 举报
回复
就是这样
zxszx 2003-08-23
  • 打赏
  • 举报
回复
同意
ehhl 2003-08-23
  • 打赏
  • 举报
回复
恩,楼上的很对,同意
aflyinghorse 2003-08-23
  • 打赏
  • 举报
回复
extern "C"用作C和C++的混合编程
如在C++中调用C的库函数,把C库函数的声明
用extern "C"表示,这些函数就按C的方式编译,
不对函数名进行重整

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧