C和C++混合编程中编译器(VS2008)设置

来源:互联网 发布:mysql qps 和 tps 编辑:程序博客网 时间:2024/04/29 20:28

C和C++的公共部分是完全相同的吗?在平台一致的前提下,C++编译器能够编译C的程序吗?好像是可以,但是不一定!

比如内存申请函数calloc中,使用C编译器的时候,你这样做编译通过:

int * pInt= calloc(n,sizeof(int));
但如果编译器是C++的,那么以上语句就通不过编译了,必须这样才行:

int * pInt=( int *) calloc(n,sizeof(int));
是的,C的设计哲学认为程序员知道自己在干什么!但C++的类型检查更为严格。也就是说有些C的工程是不能直接用C++编译器编译,所以对于一个既有C文件又有C++文件的工程,为了保证工程的顺利编译、链接,你可以把所有的C语言翻译成C++语言,这项工作的工作量不是很大,但是对于一个大项目就不好说了,主要是这种行为的level太低,不符合码农的气质。作为码农,我们必须要学会在一个工程下分别编译C和C++文件并链接之。

下面以VS2008作说明:

分别编译很简单:

选择要设置的文件:属性-->C/C++-->高级-->编译为,然后下拉菜单中选择:编译为C代码(/TC) [或者选择编译为C++代码(/TP)]。

这样就对不同语言文件分别编译。下一个工作是设置链接器的内容。不同编译器生成的目标文件中,符号表里面的符号命名准则可能会有不同,所以链接时会遇到“无法解析的外部符号”的错误。解决这个问题,使用 extern “C”,进行链接指示

(1对于我这个工程,我在.cpp中调用.c文件的int A(int **),此时需要这样声明:

extern “C” int  A(int **)

(2当对.C文件中的函数声明在一个.h文件中时,只需在.cpp文件中作如下引入即可:

extern “C”{         #include “hello.h”}
 

原创粉丝点击