在GCC预处理器输出中调试信息

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

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

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

根据文档 ,文件名前面的数字是行号。 文件名后面的数字是一个标志,表示以下内容:

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