我可以在Visual Studio中的单个项目中混合使用C ++和C吗?

我在VS2008中有一个Win32 DLL项目,它是用少数几个C模块编写的。
因为我希望能够在VS2008外部构建,而不依赖于VS2008,所以我制作了一个自定义makefile,它可以完成所有构建和链接步骤。 所有这一切都设置得很好。

现在我想为这个DLL添加几个C ++模块。 我修改了自定义makefile以将.cpp模块编译为C ++,将.c模块编译为常规C(/ Tc)。 这一切都有效。 它把所有东西连在一起,没问题。

我可以配置VS2008项目吗?

我可以在同一个VS2008项目中混合使用C ++和C吗?

或者我需要一个自定义构建步骤吗?

谢谢。


回答

我将VS2008项目设置为C编译。我需要将其更改为Compile As“Default”。 右键单击项目,选择Properties,然后选择……:

替代文字http://sofzh.miximages.com/c%2B%2B/qqsd8g.png

谢谢,帕维尔。

首先,如果您自己构建它,您甚至不需要/Tc – cl.exe使用文件扩展名来确定类型,因此.c文件将默认编译为C,以及.cpp和.cxx文件作为C ++。

对于VS项目,它以完全相同的方式工作,除了你不能覆盖这种行为(或者至少我不知道如何)。

在同一个项目中混合C和C ++绝对没有问题。 您只需要在C函数和C数据结构中设计C和C ++模块之间的接口,然后确保在C ++端使用C-linkage说明符extern "C"声明这些接口函数。

他们应该添加好,考虑到Microsoft C编译器将编译两者。 如果将它们添加到项目中,它们将被传递给cl – 我相信cl会根据文件的扩展名选择使用哪种模式。 你正在使用.cpp ,这很好。

简而言之:是的。

GCC也会这样做,因此你的makefile应该是合理的可移植性。