名前空間
変種
操作

ファイル名と行番号情報

提供: cppreference.com

プリプロセッサの現在のファイル名および行番号を変更します。

目次

[編集] 構文

#line lineno (1)
#line lineno "filename" (2)

[編集] 説明

1) 現在のプリプロセッサの行番号を lineno に変更します。 この地点以降、マクロ __LINE__ の出現は、 lineno にその後遭遇した実際のソースコード行数を加えたものに展開されます。
2) さらに現在のプリプロセッサのファイル名も filename に変更します。 この地点以降、マクロ __FILE__ の出現は filename を生成します。

任意のプリプロセッサトークン (マクロ定数または式) は、それらが有効な10進整数およびオプションでそれに続く有効な文字列に展開される限り、 #line への引数として認められます。

lineno は少なくとも1つの10進数字の並びでなければならず (そうでなければプログラムは ill-formed です)、常に (たとえ 0 で始まっていても) 10進数として解釈されます。

lineno が0であるか、32767 (C99未満)2147483647 (C99以上)より大きい場合、動作は未定義です。

[編集] ノート

この指令は他の言語で書かれたファイルから C のソースファイルを生成する何らかの自動コード生成ツールで使用されます。 この場合、 #line 指令は元の (人間が編集するための) ソースファイルのファイル名と行番号を参照するように生成された C ファイル内に挿入されます。

指令 #line __LINE__ の後続の行番号は処理系定義です (この場合 __LINE__ が展開される値には2つの可能性があります。 それまでに遭遇した行末の数か、それまでに遭遇した行末の数プラス #line 指令の終わりの行末です)。

[編集]

#include <assert.h>
#define FNAME "test.c"
int main(void)
{
#line 777 FNAME
        assert(2+2 == 5);
}

出力例:

test: test.c:777: int main(): Assertion `2+2 == 5' failed.

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 6.10.4 Line control (p: 173)
  • C99 standard (ISO/IEC 9899:1999):
  • 6.10.4 Line control (p: 158)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 3.8.4 Line control

[編集] 関連項目

ファイル名と行番号情報C++リファレンス