2011-03-20 159 views
55

我用gcc預處理器輸出中以「#1」a.c「'開頭的行是什麼意思?

gcc -E a.c 

輸出打印出C預處理器的輸出包含多線條狀

# 1 "a.c" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "a.c" 
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 1 3 
# 19 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 3 
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 1 3 
# 31 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3 

# 32 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3 
# 20 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 2 3 

我從來沒有見過這種語法的C.有人能解釋這是在幹什麼?

+4

如何擺脫他們:http://stackoverflow.com/questions/2946898/how-to-remove-lines-added-by-default-by-the-c-preprocessor-to-the-top-的最出 – 2016-01-17 11:55:59

回答

70

這些線調試提示(如下面的代碼行的代碼實際上是來自於)標誌的

# line-number "source-file" [flags] 

含義(空格隔開):

  • 1 - 一個新的文件
  • 開始
  • 2 - 返回上一個文件
  • 3 - 以下文本來自系統頭文件(#include <> vs #include「」)
  • 4 - 下面的文本應該被視爲包裹在一個隱含的extern「C」塊中。
+18

正式文件是在這裏:http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html – 2012-01-30 16:16:16

1

這些是行同步指令,它們允許gcc#include d文件中的錯誤提供正確的錯誤消息。其他的預處理器(如yacc/bison)使用相同的機制爲涉及Ç錯誤輸入.y文件的正確的線。

+0

沒有,其它的C代碼生成像'bison'應該發出'#line'預處理指令。 ... – 2015-07-19 09:11:45

44

這些線標記man gcc中提到了-P選項。

-P選項是特地意味着清晰擺脫這些行:

gcc -E -P source.c 

detailed documentation(前回答)。