【问题标题】:What are the number directives output by the preprocessor?预处理器输出的数字指令是什么?
【发布时间】:2014-10-23 18:16:55
【问题描述】:

如果我使用带有 -E 标志的 gcc、clang 或 icc 来仅运行预处理器,我会在输出中得到如下所示的行:

# 1 "test1.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 175 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "test1.cpp" 2

这些是什么?它们以# 符号开头,就好像它们是预处理器指令一样,但这是预处理器的输出

【问题讨论】:

    标签: c++ c c-preprocessor


    【解决方案1】:

    这些在gcc manual:

    中有解释

    源文件名和行号信息通过表格的行来传达

    # linenum filename flags
    

    这些被称为线标记。它们根据需要插入到输出中(但从不在字符串或字符常量中)。他们的意思是以下行起源于 linenum 处的文件文件名。文件名永远不会包含任何非打印字符;它们被八进制转义序列替换。

    在文件名之后是零个或多个标志,它们是 1234。如果有多个标志,则用空格分隔它们。以下是标志的含义:

    • 1 这表示新文件的开始。
    • 2 这表示返回到一个文件(在包含另一个文件之后)。
    • 3 这表明以下文本来自系统头文件,因此应禁止显示某些警告。
    • 4 这表明应将以下文本视为包含在隐式 extern "C" 块中。

    【讨论】:

      【解决方案2】:

      它们用于允许编译器生成合理的错误消息。预处理器在行号周围发生变化,但我们希望编译器错误指示来自处理器输入的行号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 2016-11-18
        相关资源
        最近更新 更多