我想做的事:
我已经使用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)但我不知道如何正确应用它们来解决我的问题.
任何帮助是极大的赞赏!
您似乎在C源代码中包含C++标头.可能通过将其包含在其他头文件中间接(即C源包含您的C++头,C++头包含其他C++头文件).
有两种方法可以解决这个问题:
仅在使用C++编译时,使用预处理器有条件地包含C++标头.这可以这样做
#ifdef __cplusplus
# include some_cpp_header
#endif
Run Code Online (Sandbox Code Playgroud)不要在头文件中包含(直接或间接)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)我推荐第二种方法.