extern "C"是什么意思?!

wjc 2001-08-14 11:17:50
...全文
132 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hollysky 2001-08-20
  • 打赏
  • 举报
回复
推荐你看一本书《Thinking in C++》
heavyrain1234 2001-08-15
  • 打赏
  • 举报
回复
那这个程序在标准c里 他不是会出错?
liu_feng_fly 2001-08-15
  • 打赏
  • 举报
回复
c语言并不支持重载呀
WQ 2001-08-15
  • 打赏
  • 举报
回复
主要是命名归范不同
gigix 2001-08-14
  • 打赏
  • 举报
回复
同意wanghu。因为C++有函数重载机制,因此编译器必须对C++的函数名做一些处理,使同名函数成为异名函数。但经过这样的函数名重整之后,别的语言便无法知道这个函数在编译目标文件中实际的名字,也就无法调用。因此在不同语言合作时,必须用extern "C"禁止编译器对函数名进行重整,保证目标文件中的函数名与源代码中的函数名一致。
wanghu 2001-08-14
  • 打赏
  • 举报
回复
extern c 阻止编译程序改变你的程序中的这个函数的名称。
zh9625 2001-08-14
  • 打赏
  • 举报
回复
extern "C"
可把C++程序编译为C接口,用于其他语言调用本模块。

我曾写了个一个win32动态库,就有extern "C",编译后可被VB程序调用
MountLion 2001-08-14
  • 打赏
  • 举报
回复
extern "C"
{
// 表示扩号中的内容是C语言格式的,不是C++

}
liu_feng_fly 2001-08-14
  • 打赏
  • 举报
回复
是的
wjc 2001-08-14
  • 打赏
  • 举报
回复
那是否就是说:用extern "C" 就不支持重载?
tankingau 2001-08-14
  • 打赏
  • 举报
回复
同意gigix.

先看一个例子:
int func(int x, float y);
int func(int x, char * str);
C++编译器采用名字粉碎技术,将上述两个函数的名字解析成类似于(VC、BC各有不同):
i_func_i_f
i_func_i_c
的形式。
有时,为了避免这种名字粉碎技术带来的弊病(比如DLL调用),声明为
extern "c"就阻止编译进行名字粉碎,而按照传统的C标准进行编译。

69,336

社区成员

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

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