C言語#line
での意味は何ですか. どこで使用されますか?
6 に答える
次の行が実際にどこから来たのかをコンパイラに伝えます。通常、これらを追加するのは C プリプロセッサだけです。たとえば、ファイルをインクルードする場合、別のファイルを見ていることをコンパイラ (基本的には 1 つのデータ ストリームのみを見ている) に伝えます。
これは奇妙に聞こえるかもしれませんが、プリプロセッサはインクルードを指定した場所にヘッダー ファイルを挿入するだけで、コンパイラは全体 (ソース コードと一緒に連結されたすべてのヘッダー ファイル) で動作します。とgcc gcc -E myfile.c
。そこには#line
、ファイルをインクルードするたびにディレクティブが追加され、コンパイラに供給されるテキストの量が減るたびにディレクティブが追加されることがわかります (大量のコメントが単一の#line
ディレクティブに削減され、先にスキップされる場合など)。
これは、bison/yacc などの他のプログラムでも使用され、問題 (コンパイルに問題がある場合) が特定の行の rules-file に関連していることを通知します。 bison/yacc は c ファイルを生成します。
これをプリプロセッサ行制御指令と呼びます。
ディレクティブを使用すると、__FILE__
との両方の展開__LINE__
が変更されます。#line
これにより、コンパイラは次のソース行の行番号を指定された番号として表示します。
その主な用途は、コンパイラがより意味のあるエラー メッセージを提供するようにすることです。
詳細な説明と使用例については、IBM のドキュメントを参照してください。
これはプラグマキーワードです。
" #lineを使用すると、コンパイラの行番号と (オプションで) エラーと警告のファイル名出力を変更できます。この例では、行番号に関連付けられた 2 つの警告を報告する方法を示します。#line 200 ディレクティブは、行番号を強制的に 200 にします (ただし、デフォルトは #7 です) そして、次の #line ディレクティブまで、ファイル名は "Special" として報告されます. #line デフォルト ディレクティブは、行番号をデフォルトの番号に戻し、前のディレクティブによって再番号付けされた行をカウントします. "
ファイルの見かけの行番号を変更できます。
私が考えることができる唯一の用途は、長い一連の複数行マクロの後に行番号を正気にすることです。
使用法は次のとおりです。
#line 42
これは主に、Cファイル(ヘッダーまたは実装)が作成されたソースファイルのファイル名と行番号を提供するために使用されます。その場合、コンパイラは、生成されたファイルではなく、ソースファイルを示唆する診断を発行します。
プリプロセッサはこれを使用して、これらが展開された前処理済みファイルに含まれているヘッダーを示唆します。
# は、プロセッサ c および c++ への文字列挿入シンボルです。