C++辅导:C++之externC
参见代码中的这段代码:
# ifdef _ _ cplusplus
extern " C " {
# endif
//一段代码
# ifdef _ _ cplusplus
}
# endif
这个代码到底是什么意思?首先,__cplusplus是cpp中的自定义宏。如果定义了这个宏,就意味着它是一段cpp代码。换句话说,上面这段代码的意思是:如果是一段cpp代码,那么加入extern“C”{ and }来处理代码。
为了理解为什么使用extern“C ”,我们必须从cpp中的函数重载开始。在c++中,为了支持重载机制,在编译后的汇编代码中,要对函数的名字进行处理,比如函数的返回类型等。然而在C中,它只是一个简单的函数名,不会添加任何其他信息。也就是说,C++和C对生成的函数名的处理是不同的。
比如下面这个简单的函数,我们来看看添加或者不添加extern“C”产生的汇编代码的变化:
int f(void)
{
return 1;
}
添加extern "C "时生成的汇编代码是:
。文件“test . cxx”
。文本
。对齐2
。globl _f
。def _ f;。SCL 2;。32型;。endef
_ f:
pushl % ebp
movl % esp,%ebp
movl ,%eax
popl %ebp
ret
0条评论