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