【问题标题】:Standard macros naming conventions标准宏命名约定
【发布时间】:2019-02-12 21:48:16
【问题描述】:

为什么尽管所有其他标准 C++ 宏都以双下划线为前缀和后缀,但 __cplusplus 却没有效仿?

我找遍了所有我能想到的地方,但都没有成功。

【问题讨论】:

  • 我不明白为什么这被投票关闭 - 对我来说似乎是一个非常好的问题。我一直想知道。
  • FWIW cppreference 列出了一堆小写定义的宏

标签: c++


【解决方案1】:

根据this,cfront(最初的C++编译器)使用c_plusplus而不是__cplusplus

使用c_plusplus 的决定似乎是任意的(并且它忽略了“保留标识符”约定,如果它当时存在的话)。

我假设__cplusplus 后来被选为保留标识符,同时最小化与原始宏名称的差异。 .


所有其他标准 C++ 宏都全部大写,并以双下划线为前缀和后缀

如 cmets 中所述,并非所有这些都是。近年来,委员会似乎更喜欢小写名称(当添加 __has_include__cpp_* 功能测试宏时)。

【讨论】:

    【解决方案2】:

    这与您无关。任何以__(双下划线)开头的名称都保留用于实现,所以__cplusplus 是可以的。

    此外,假设 C++ 中所有预定义的宏都是大写的也是错误的。例如,__unix__ 是小写字母,以及此处列出的其他标准宏:https://en.cppreference.com/w/cpp/preprocessor/replace

    【讨论】:

    • __unix__ 是非标准的,所以我认为它不重要。
    • __unix__ 是标准宏吗?它在哪里说呢?另外,好奇心也没有错。
    • @thb 讨厌的人会讨厌。我也完全熟悉 SO downvotes 的连锁反应 - 2-3 downvotes 并且每个问题的访问者都会感到有义务投反对票。我的答案超出了我的范围,它实际上是正确的,我认为它没有任何问题。
    • 它没有回答我的问题。没有确凿的证据支持你所说的。同样以“这与您无关”开始您的回答并不是回答某人问题的最佳方式。我问这个问题的唯一原因是因为它是我关心的问题。
    • @SergeyA s/beyond/behind/ 而你的“答案”并没有回答这个问题——这真的是一个不知情的猜测。这就是它被否决的原因。与“仇恨者”无关。
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多