将C++代码添加到C项目

few*_*ewu 5 c c++

我想做的事:

我已经使用Matlab Simulink生成了自动生成的C代码,并希望使用C++编写的更多功能来增强它.确切地说,C代码调用内部使用C++的C风格API.整个过程都在VS 2008 C++项目中.

问题:

它编译,只要我告诉VS将其编译为C并省略我的C++代码.一旦我编译它就会出现C++问题.

首先,我无法将其编译为C++,因为math.h会因为对重载函数(fabs())的模糊调用而产生错误C2668.

如果我现在另外添加一些C++,例如包括iostream,我会得到数百个编译器错误,抱怨在cstdlib中缺少花括号和错位的冒号.

我的问题:

如何以有效的方式混合两种语言?我读到了关于预处理器定义(http://www.parashift.com/c++-faq-lite/overview-mixing-langs.html)但我不知道如何正确应用它们来解决我的问题.

任何帮助是极大的赞赏!

Som*_*ude 5

您似乎在C源代码中包含C++标头.可能通过将其包含在其他头文件中间接(即C源包含您的C++头,C++头包含其他C++头文件).

有两种方法可以解决这个问题:

  1. 仅在使用C++编译时,使用预处理器有条件地包含C++标头.这可以这样做

    #ifdef __cplusplus
    # include some_cpp_header
    #endif
    
    Run Code Online (Sandbox Code Playgroud)
  2. 不要在头文件中包含(直接或间接)C++标头.或者更好的是,创建一个单独的头文件,其唯一目的是包含在C源代码中,并且只包含extern "C"API 的函数原型(当编译为C++时).头文件的主体可能如下所示

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    void function1(int);
    int function2(const char*);
    /* More function prototypes */
    
    #ifdef __cplusplus
    }
    #endif
    
    Run Code Online (Sandbox Code Playgroud)

我推荐第二种方法.