是不是只要用extern "C" 声明,编译器就会以C风格编译?
extern "C"用作C和C++的混合编程
如在C++中调用C的库函数,把C库函数的声明
用extern "C"表示,这些函数就按C的方式编译,
不对函数名进行重整
恩,楼上的很对,同意
同意
就是这样
extern "C" 用作C++中的C标记。
可以指定使用C方式编译,不过更多地用法是指明你要调用的函数是一个C函数;
#ifdef __cplusplus
extern "C" void myfunc( void);
#endif
ty
yes
回复人: aflyinghorse() ( ) 信誉:100 2003-08-23 16:17:00 得分:0
extern "C"用作C和C++的混合编程
如在C++中调用C的库函数,把C库函数的声明
用extern "C"表示,这些函数就按C的方式编译,
不对函数名进行重整
请问什么是“函数名重整”?
extern关键字是为了C++编译器与非C++代码进行连接而起作用的。
不同语言,或者同一语言的不同实现可能在以下几个方面存在差异:
1)使用寄存器保存差数的方式;
2)将参数放入堆栈的顺序;
3)整数或字符串等内部类型的布局;
4)编译器传替给连接器的名字;
5)对连接器所要求的地类型检查的量方面。
extern "c"就是声明函数按照C的连接约定进行连接,并不影响调用函数的语义。仍然要遵守C++的类型检查和参数转换规则,而不是C的教弱的规则;
编译时,编译器会给C函数名前加上一个特定的前缀,和其他的C++函数名进行区别,这就是上面所谓的“函数名重整”
另外,这并不仅仅是适用于调用C库函数,对自定义库函数和其他自定义C函数都是可以得。
暂时说这么多,如果解答的不好请大家见谅。
我同意aflyinghorse
好像是这样的
因为在c里没有函数名重用一说,就是不允许函数名相同的多个函数出现,所以像下面的函数
void Fun(int i)
c里编译成Fun,而c++里编译成Fun_int
可能不太确切,不过大致是这个意思。