【问题标题】:Can I mix C++ and C in a single project in Visual Studio?我可以在 Visual Studio 的单个项目中混合 C++ 和 C 吗?
【发布时间】:2009-10-25 01:05:59
【问题描述】:

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

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

我可以配置 VS2008 项目来做同样的事情吗?

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

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

谢谢。


回答

我将 VS2008 项目设置为编译为 C。我需要将其更改为编译为“默认”。右键单击项目,选择属性,然后...:

谢谢,帕维尔。

【问题讨论】:

  • 我只是从解决方案资源管理器“属性”中选择文件 .c -> 然后编译为 C 代码。及其工作:P

标签: c++ c visual-studio-2008 winapi


【解决方案1】:

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

对于 VS 项目,它的工作方式完全相同,只是您不能覆盖此行为(或者至少我不知道如何)。

【讨论】:

  • 非常有帮助。原来在 VS 中有一个选项来设置“编译为”选项, /Tc , /Tp 或“默认”之一。我将其设置为 /Tc 。我需要将其重置为“默认”。好的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    简而言之:是的。

    GCC 也会这样做,因此您的 makefile 应该是相当可移植的。

    【讨论】:

    • 请注意,如果您使用gcc 编译C++,gcc 可能不会在链接阶段添加必要的库。 C++ 程序的链接步骤必须始终使用g++,而不是gcc
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多