次を使用してCプリプロセッサの出力を出力します
gcc -E a.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でこの種の構文を見たことはありません。誰かがこれが何をしているのか説明できますか?
これらの行はデバッグのヒントです(行の次のコードは実際に由来します)
# line-number "source-file" [flags]
フラグの意味(スペース区切り):
これらのlinemarkersはman gcc
ために -P
オプション。
-P
オプションは、明確にするためにこれらの行を取り除くことを特に意図しています。
gcc -E -P source.c
詳細なドキュメント (前に回答済み)を参照してください。
これらは行同期ディレクティブであり、gcc
が#include
dファイルのエラーに対して正しいエラーメッセージを提供できるようにします。他のプリプロセッサ(yacc
/bison
など)は、同じメカニズムを使用して、Cエラーを入力.y
ファイルの正しい行に関連付けます。