使用g ++编译变量名为new的C代码时出错

Rah*_*eel 0 c c++ gcc g++

我们正在尝试修改一些现有的C项目,即我们正在尝试从C代码中进行一些C++函数调用.我们尝试将编译器从gcc更改为g ++,但由于不兼容性,存在多个编译错误.我们要做的是在C代码中调用一些C++函数,而不对现有代码进行任何更改.简单地改变编译器似乎没有做到这一点.因此,我们试过以下:

#include <stdio.h>

extern "C"
{
    int func(int new ) {
        printf("in new func()\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用命令编译它

g ++ -c hello.c -o hello

我们得到以下错误

hello.c:9: error:expected ‘,’ or ‘...’ before ‘new’.
Run Code Online (Sandbox Code Playgroud)

现在我们知道new是c ++关键字.如前所述,我们试图不对现有的C代码进行任何修改.有什么建议 ?

这些不是唯一的错误.还有与结构声明相关的其他错误.

attr.c:75:错误:在'.'之前预期的primary-expression 代币

在attr.c,第75行是

static post_op_attr error_attr = {.attributes_follow = FALSE};

问题是在代码中还有其他C样式的结构声明和初始化,所以即使我们重命名变量名,我们仍然需要修改C程序的其他部分.因此,我们正在寻找一种方法来在不修改现有C代码的情况下向C代码添加C++函数调用.

shu*_*e87 7

new是一个关键字,因此您无法调用变量new.但即使你可以,我也不确定你为什么会这么做,因为它难以理解.

即使你正在使用extern "C"你仍然在编译g++c ++编译器,它会抱怨这个.

基本上C代码不能总是在c ++中保持不变,因为c ++引入了一些关键字.这是其中一个时间,你别无选择,只能更改一些现有的代码C代码,使其编译为c ++代码.

  • @ user3114360:那是因为C是一种与C++不同的语言.如果要将C转换为C++,那么现在是修复变量名称的时候了. (3认同)