【问题标题】:Debugging information in GCC preprocessor outputGCC 预处理器输出中的调试信息
【发布时间】:2013-05-04 12:25:07
【问题描述】:

我正在检查 GCC 生成的预处理输出,我在使用 -save-temps 标志生成的 .i 文件中看到了很多这样的输出:

# 8 "/usr/include/i386-linux-gnu/gnu/stubs.h" 2 3 4

stubs.h的绝对路径前后的数字是什么意思?它似乎是由预处理器插入的某种调试信息,并允许编译器发出引用此信息的错误消息。这些行不影响程序本身,但每个数字具体是做什么用的?

【问题讨论】:

    标签: compilation c gcc compiler-construction


    【解决方案1】:

    基于the documentation 数字之前文件名是行号。文件名后面的数字是标志,含义如下:

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

    【讨论】:

    • 它表示什么行号,因为我看到许多文件包含在相同的行号中......我在这里遗漏了一些明显的东西吗?
    • # 1 "/usr/include/stdio.h" 1 3 4, # 28 "/usr/include/stdio.h" 3 4, # 1 "/usr/include/features.h" 1 3 4, # 324 "/usr/include/features.h" 3 4
    • @ArunKumar 根据您的标志,这只是表明打开了一个新文件
    • @ArunKumar 不,完全一样。 # 1 "/usr/include/stdio.h" 1 3 4 表示 /usr/include/stdio.h 已打开,我们在第 1 行
    • @ArunKumar 取决于上下文,但引用文件的行号,在我的示例中为 /usr/include/stdio.h
    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2011-04-14
    • 2010-11-08
    相关资源
    最近更新 更多