2015-12-21 16 views
4

這是在C語言的Hello World程序中的GNU cpp的輸出。我想知道這些行是什麼意思? #號Header_File_Location [數字]C預處理文件中的這些不熟悉的行是什麼?

# 1 "hello.c" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "/usr/include/stdc-predef.h" 1 3 4 
# 1 "<command-line>" 2 
# 1 "hello.c" 
# 1 "/usr/include/stdio.h" 1 3 4 
# 27 "/usr/include/stdio.h" 3 4 
# 1 "/usr/include/features.h" 1 3 4 
# 374 "/usr/include/features.h" 3 4 
# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4 
# 385 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4 
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 
# 386 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4 
# 375 "/usr/include/features.h" 2 3 4 
# 398 "/usr/include/features.h" 3 4 
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4 
# 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4 
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4 
# 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4 
# 399 "/usr/include/features.h" 2 3 4 
# 28 "/usr/include/stdio.h" 2 3 4 





# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h" 1 3 4 
# 212 "/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h" 3 4 
typedef long unsigned int size_t; 
# 34 "/usr/include/stdio.h" 2 3 4 

# 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4 
# 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4 
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 
# 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4 


typedef unsigned char __u_char; 
typedef unsigned short int __u_short; 
typedef unsigned int __u_int; 
typedef unsigned long int __u_long; 

這些是某種依賴?如果是的話,那麼在什麼?行號?

回答

3

這些是行號指令,並告知編譯器在translation unit來源的下一部分來源的行和文件。

這就是編譯器在預處理後可以報告包含頭文件中的錯誤的方式。

4

從GCC documentation

源文件名和行號信息由 線的形式

# linenum filename flags 

這些被稱爲linemarkers輸送。它們根據需要插入到輸出中(但從不在字符串或 字符常量中)。它們表示以下行起始於line linenum的文件文件名 。文件名不會包含任何 非打印字符;它們被替換爲八進制跳轉 序列。

文件名出現零或多個標誌後,即'1','2','3', 或'4'。如果有多個標誌,空格會將它們分開。這裏是 標誌的含義:

'1'這表示新文件的開始。

'2'這表示返回到文件(在包含另一個文件後)。

'3'這個 表示以下文本來自系統頭文件,所以 應該禁止某些警告。

'4'這表示 以下文本應視爲包裝在一個隱含的 extern「C」塊中。