c++使用在定义和标识符中使用双下划线的C代码

C++ using C code using double underscores in defines and identifiers

本文关键字:下划线 代码 标识符 定义 c++      更新时间:2023-10-16

我知道在c++中,标识符中的双下划线是为编译器保留的。我有一些C代码,在相应的头文件中具有类似的特征:

extern "C" {
    #define HELLO__THERE 1
    int hello__out__there( int );
}

我将在c++项目中使用这个头,并计划在c++中做一些事情,如:

if (HELLO__THERE == abc) 
    hello__out__there(foo);

这种行为在c++中是可接受的吗?

在c++ 03标准17.4.3.1.2 Global names中,下划线的使用被定义为保留的:

的每个名称包含的双下划线(_ _)或以下划线后跟上-开头大小写字母(2.11)保留给实现以供任何使用。

被保留意味着它可能在任何符合标准的实现中使用,因此不建议使用它。

应该没问题,除非其中一个定义与编译器的定义有冲突。如果是这种情况,它可能是一个警告或错误(取决于你的编译器的配置),将有一个重复的符号。

希望有帮助。干杯!

方法调用将是好的,但为什么比较HELLO_THERE值abc?如果你要测试一个方法是否存在,我会用#ifdef…#endif,因为如果hello_out_there由于某种原因没有定义,这将是一个编译错误。

标识符中的双下划线为编译器

保留。
首先,我猜是下划线。其次,这样的标识符是保留的。这并不能阻止一个人不使用它。您可以使用它(直到没有命名冲突)。

这种行为在c++中是可接受的吗?

是的。这是可以接受的。然而,可接受的代码和好的代码是有区别的。如果你遵循正确的编码准则,那么你的代码将是好的,并且是可以接受的。恕我直言,你应该参考一些好的编码标准在互联网上;这会对你有很大的帮助。