【发布时间】:2019-02-12 21:48:16
【问题描述】:
为什么尽管所有其他标准 C++ 宏都以双下划线为前缀和后缀,但 __cplusplus 却没有效仿?
我找遍了所有我能想到的地方,但都没有成功。
【问题讨论】:
-
我不明白为什么这被投票关闭 - 对我来说似乎是一个非常好的问题。我一直想知道。
-
FWIW cppreference 列出了一堆小写定义的宏
标签: c++
为什么尽管所有其他标准 C++ 宏都以双下划线为前缀和后缀,但 __cplusplus 却没有效仿?
我找遍了所有我能想到的地方,但都没有成功。
【问题讨论】:
标签: c++
根据this,cfront(最初的C++编译器)使用c_plusplus而不是__cplusplus。
使用c_plusplus 的决定似乎是任意的(并且它忽略了“保留标识符”约定,如果它当时存在的话)。
我假设__cplusplus 后来被选为保留标识符,同时最小化与原始宏名称的差异。
.
所有其他标准 C++ 宏都全部大写,并以双下划线为前缀和后缀
如 cmets 中所述,并非所有这些都是。近年来,委员会似乎更喜欢小写名称(当添加 __has_include 和 __cpp_* 功能测试宏时)。
【讨论】:
这与您无关。任何以__(双下划线)开头的名称都保留用于实现,所以__cplusplus 是可以的。
此外,假设 C++ 中所有预定义的宏都是大写的也是错误的。例如,__unix__ 是小写字母,以及此处列出的其他标准宏:https://en.cppreference.com/w/cpp/preprocessor/replace
【讨论】:
__unix__ 是非标准的,所以我认为它不重要。
__unix__ 是标准宏吗?它在哪里说呢?另外,好奇心也没有错。