#line のディレクティブ (C/C++)
#line のプリプロセッサ ディレクティブはを指定した行番号とファイル名にコンパイラの内部に格納された行番号とファイル名を変更します。
#line digit-sequence ["filename"]
解説
コンパイラはコンパイル時に検出したエラーを示すために行番号と省略可能なファイル名を使用します。行番号は通常現在の行を入力しファイル名は現在の入力ファイルを示します。行番号は各行が処理された後にインクリメントします。
数値シーケンスの 値は整数定数です。マクロはプリプロセスのトークンに置換実行できます。結果は正しい構文に評価される必要があります。 ファイル名は 文字の組み合わせで二重引用符 (「「) で囲む必要があります。 ファイル名 を省略すると前のファイル名は変更されません。
#line のディレクティブを記述してソースの行番号とファイル名を指定できます。変換は定義済みマクロ __FILE__ と __LINE__ の値を確認するには行番号とファイル名を使用します。プログラム テキストに自己記述的なエラー メッセージを挿入するためにこれらのマクロを使用します。これらの定義済みマクロの詳細については定義済みマクロ を参照してください。
__FILE__ マクロはコンテンツがファイル名を指定 「「二重引用符 () で囲んだ文字列に展開されます。
行番号とファイル名を変更するとコンパイラは前の値は無視され新しい値に処理されます。#line のディレクティブが実行されジェネレーターは通常エラー メッセージが出力されたプログラムではなく元のソース ファイルを示します使用されます。
次の例では #line と __LINE__ と __FILE__ マクロについて説明します。
このステートメントでは内部的に格納された行番号は 151 に設定されファイル名は copy.c に変更されます。
#line 151 "copy.c"
この例ではマクロ ASSERT は特定の 「 Assertion 」が true であるソース ファイルに関するエラー メッセージを出力するには定義済みマクロ __LINE__ と __FILE__ を使用します。
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}