这年头啊,面向对象简直漫天飞,连C语言都有面向对象版--C++。当然啦,这也不能怪谁,面向对象的思想还是比较接近自然思维习惯的,随着编程规模及逻辑思维要求不断提高的今天,还真是需要面向对象的想法。
可问题来了,不少我们这样的工程师(还是有点实力的),习惯了C,对C++呢,也有那么一点感冒,所以啊,有时还真是需要将已有的C语言代码模块与C++语言代码模块相互链接,最快的办法就是将C语言代码当做C++语言来编译。但在许多情况下还是不得不使用C语言和C++语言进行编程。由于C语言和C++语言在函数的命名和调用方式均有不同,如果想在C++源码中调用C语言模块的函数,那就需要做一些特殊的声明了,如下:
extern "C" int func(); //声明fun为外部的C函数
经过的声明处理,编译器就知道这个函数必须按照C语言的方式调用,从而为其生成相应的目标代码。当然啦,如果有很多,就丢到一起去声明吧:
extern "C" {
int func();
void func2(int ,int);
}
如果你编程时间足够长,换句话说,就是经验足够丰富(嘿嘿,我还凑合吧),你就应该知道模块函数的接口通常都是放到头文件中去声明,这样就可以保证供多个源文件引用。那新的问题又来了,如果一个头文件既被C++源文件引用又被C源文件引用,则上述声明就出现了问题,因为C编译器不认识extern后的字符串 C。解决这个问题的方法就是在头文件加入如下代码,使之对C和C++编译器通用:
#ifdef __cplusplus
extern "C" { //C编译器看不到这一行
#endif
int func1();
void func2(int ,int);
#ifdef __cplusplus
} //C编译器看不到这一行
#endif