我正在努力将用C ++编写的功能添加到用C编写的大型程序中。
我曾尝试将C程序中包含的所有代码都用外部“ C”块包围,但是当我使用g ++进行编译时,我仍然遇到编译器试图将C编译为C ++的错误。我已将extern“ C”块添加到所有标题和.c文件中,如下所示:
#ifdef __cplusplus
extern "C"
{
#endif
//C code here
#ifdef __cplusplus
}
#endif
错误看起来像这样:
./ sortcodes / oci.c:在功能‘int GetSpecList(ClientData, Tcl_Interp *,int,Tcl_Obj * const *)’:../ sortcodes / oci.c:188:25:错误: “ init”未命名类型 static init = TRUE;
如果我删除C ++函数调用并仅使用gcc编译C程序,则不会发生这些错误。
如果我删除外部的“ C”块并使用选项进行编译
gcc -std = c ++ 0x -lstdc ++ -std = c ++ 11
我遇到类似下面的错误,其中C ++标志显然被忽略了
./ Event_Reader.cpp:9:20:致命错误:iostream:没有这样的文件或目录 #include
我是否有任何遗漏或误解的选项?任何建议将不胜感激。
答案 0 :(得分:2)
首先,要编译c ++代码,您必须使用g ++或clang ++之类的c ++编译器。然后,您需要使用extern "C"
链接声明所需的c ++函数。此时,您可以从C代码中调用该函数。
有关具体示例,请参见How do I call a C++ function from C。