名前空間
変種
操作

ファイル名と行の情報

From cppreference.com

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

目次

[編集] 構文

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

[編集] 説明

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

#line の引数としては、有効な10進整数(オプションで有効な文字列表現が続く)に展開される限り、あらゆるプリプロセッシングトークン(マクロ定数または式)が許可されます。

lineno は、少なくとも1つの10進数字のシーケンス(それ以外の場合、プログラムは不正形式)でなければならず、常に10進数として解釈されます(0 で始まっていても)。

If lineno is 0 or greater than 32767(C99まで)2147483647(C99以降), the behavior is undefined.

[編集] 注意

このディレクティブは、他の言語で書かれたファイルからCソースファイルを生成する一部の自動コード生成ツールによって使用されます。その場合、生成されたCファイルに、元の(人間が編集可能な)ソースファイルの行番号とファイル名を参照する #line ディレクティブが挿入されることがあります。

ディレクティブ #line __LINE__ の後の行番号は未指定です(この場合、__LINE__ が展開される可能性のある値は2つあります。これまでに検出された改行数、またはこれまでに検出された改行数に #line ディレクティブを終える改行を加えた値)。これは DR 464 の結果であり、遡って適用されます。

[編集]

#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.

[編集] 参照

  • C17標準 (ISO/IEC 9899:2018)
  • 6.10.4 行制御 (p: 126)
  • J.1 未指定の動作
  • C11標準 (ISO/IEC 9899:2011)
  • 6.10.4 行制御 (p: 173)
  • C99標準 (ISO/IEC 9899:1999)
  • 6.10.4 行制御 (p: 158)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 3.8.4 行制御

[編集] 関連項目

C++ ドキュメント ファイル名と行情報 について
English 日本語 中文(简体) 中文(繁體)