Namespaces
Variants

Filename and line information

From cppreference.net

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

目次

翻訳のポイント: - 「Contents」を「目次」に翻訳 - HTMLタグ、属性、クラス名は一切変更せず保持 - ` `内のテキストはC++関連用語として翻訳せず保持 - 数値、リンク、構造は完全に維持 - フォーマットとインデントを元のまま保持

構文

#line 行番号 (1)
#line 行番号 " ファイル名 " (2)

説明

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

任意の前処理トークン(マクロ定数または式)は、有効な10進整数(オプションとして有効な文字列が続く場合もある)に展開される限り、 #line の引数として許可されます。

lineno は少なくとも1つの10進数字の列でなければなりません(そうでない場合、プログラムは不適格です)。また、常に10進数として解釈されます(たとえ 0 で始まる場合でも)。

lineno 0 または 32767 (C99まで) 2147483647 (C99以降) より大きい場合、動作は未定義です。

注記

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

ディレクティブに続く行番号 #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++ documentation for ファイル名と行情報