【问题标题】:why # followed by a number seems do nothing in C plus plus为什么#后跟一个数字似乎在C plus plus中什么都不做
【发布时间】:2013-05-07 07:22:29
【问题描述】:

复制步骤:

将以下行插入 C++ 源代码的任意行。

#1234

任何行,包括第一行、最后一行。甚至你可以像这样在函数头和函数体之间输入。

int foo()
#1234
{
return 0;
}

数字可以很长,我测试了170多个字符。 如果添加任何非数字字符,则会出现编译错误。

我的问题是:为什么 # 后跟一个数字不会破坏编译,而 # 后跟一个非数字字符会。

感谢大家的宝贵时间。

【问题讨论】:

    标签: c++ comments


    【解决方案1】:

    这是一个行指令。大多数预处理器输出这些以告诉编译器它实际上在原始源文件中的哪些行。

    由于预处理器可以向它提供给编译器的源代码添加许多(有时数百甚至数千行)行,因此编译器需要跟踪原始源文件的行号。这是通过诸如这样的特殊指令来完成的。

    【讨论】:

    • 来源?我知道#line 是用于线路但不是#numbers。这可能是实现定义的行为。
    • @Rapptz 最常见的似乎只是# <line number> "source file" 或类似的,没有任何特殊关键字。
    • 据我所知,它的标准版本是#line
    【解决方案2】:

    当我使用 GCC 编译它时,我收到以下警告:

    warning: style of line directive is a GCC extension [enabled by default]
    

    换句话说,这不是标准 C++,而是特定的编译器扩展(在这种情况下是预处理器扩展,特别是 line 指令)。

    因此,您应该参考编译器的文档来检查哪些是允许的,哪些是不允许的。例如,see this

    【讨论】:

    • 感谢您的快速回复,安迪
    • @ZhiyongWu: 很高兴 :)
    猜你喜欢
    • 2013-05-31
    • 2022-01-14
    • 2015-10-29
    • 2012-09-12
    • 2011-03-17
    • 2017-09-11
    • 2021-05-30
    • 2022-01-15
    • 2016-09-22
    相关资源
    最近更新 更多