【发布时间】:2014-01-06 08:12:37
【问题描述】:
我们正在尝试修改一些现有的 C 项目,即我们正在尝试从 C 代码进行一些 C++ 函数调用。我们尝试将编译器从 gcc 更改为 g++,但由于不兼容,出现了几个编译错误。我们正在尝试做的是在 C 代码中调用一些 C++ 函数,而不对现有代码进行任何更改。简单地更改编译器似乎并没有解决问题。因此我们尝试了以下操作:
#include <stdio.h>
extern "C"
{
int func(int new ) {
printf("in new func()\n");
}
}
当我使用命令编译它时
g++ -c hello.c -o 你好
我们得到以下错误
hello.c:9: error:expected ‘,’ or ‘...’ before ‘new’.
现在我们知道 new 是 c++ 关键字。如前所述,我们尽量不对现有的 C 代码进行任何修改。有什么建议吗?
这些不是唯一的错误。还有其他与结构声明有关的错误。
attr.c:75: 错误:'.' 标记之前的预期主表达式
在 attr.c,第 75 行是
静态 post_op_attr error_attr = {.attributes_follow = FALSE };
问题是代码中还有其他 C 风格的结构声明和初始化,所以即使我们重命名变量名,我们仍然需要修改 C 程序的其他部分。因此,我们正在寻找一种在不修改现有 C 代码的情况下将 C++ 函数调用添加到 C 代码的方法。
【问题讨论】:
-
如果你不想对C代码做任何修改,为什么不继续编译成C呢?在 C++ 中,您只需要
extern "C"声明您需要调用的函数。 -
为了澄清 Charles 的观点,请注意在
C++程序的声明中,您不需要为参数命名。 -
@BoBTFish 在 C 中也没有必要。
-
致 OP:“使用 g++ 编译 C 代码时出错”——确切地说,这是一个错误。 C 代码只能使用 C 编译器编译,而 g++ 不是,因为它是 C++ 编译器。
-
@H2CO3 是的,但我想指出的是,在您声明它的地方(将在
C++代码中),您不需要给它一个名字。在定义中,名称是必需的,但这没关系,因为它将在C代码中。