C++'new'关键字和C.

Flo*_*ian 5 c c++ keyword extern new-operator

可能重复:
在C++中使用关键字class作为变量名

在库的C头文件中,我使用其中一个变量命名为'new'.不幸的是,我在C++项目中使用这个库,并且"new"作为变量名称的出现使编译器变得怪异.我已经在使用extern"C"{#include <...>},但在这方面似乎没有帮助.

我是否需要让库开发人员更改该变量的名称,即使从他的角度来看,作为C开发人员,代码绝对正常,因为"new"不是C关键字?

psm*_*ars 7

在包含头文件之前,使用预处理器重命名new:

#define new mynew
#include <...>
#undef new
Run Code Online (Sandbox Code Playgroud)

这将允许编译继续进行.

你真的需要访问这个变量吗?如果没有 - 那么你就完成了.如果这样做,那么您需要确保编译库的.c文件

-Dnew=mynew
Run Code Online (Sandbox Code Playgroud)


Hea*_*utt 3

标题中是否需要包含该变量的名称?如果您使用名为“new”的全局变量,那么这当然是您需要具有全局可见变量名称的原因。另一方面,如果这类似于名为“new”的函数参数,只需从函数声明中删除该名称即可。如果名称是结构或联合的成员,则在头文件中更改它不会损害 .C 代码,只要 .C 代码看到名称与源代码匹配的“私有”定义。

由于 .C 文件应使用 C 语法进行编译,因此能够处理名为“new”的变量,因此修复头文件应该是一种有效的解决方法。

从长远来看,是的,您应该引起库开发人员的注意。

作为最后一个有点hacky的解决方案,您可以将头文件从“new”更改为某些内容,例如“was_new”。并且在编译库的 C 文件时使用编译器开关来强制执行#define new was_new