名前空間
変種
操作

ファイル名と行の情報

From cppreference.com
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 

プリプロセッサにおけるソースコードの行番号、およびオプションで現在のファイル名を変更します。

目次

[編集] 構文

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

[編集] 解説

1) 現在のプリプロセッサの行番号を lineno に変更します。これ以降のマクロ __LINE__ の展開は、lineno に、それ以降に出現した実際のソースコードの行数を加えたものに展開されます。

2) 現在のプリプロセッサのファイル名も filename に変更します。これ以降のマクロ __FILE__ の展開は filename を生成します。

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

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

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

[編集] 注釈

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

[編集]

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

実行結果の例

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

[編集] 参照

  • C++23標準 (ISO/IEC 14882:2024)
  • 15.7 行制御 [cpp.line]
  • C++20 standard (ISO/IEC 14882:2020)
  • 15.7 行制御 [cpp.line]
  • C++17 standard (ISO/IEC 14882:2017)
  • 19.4 行制御 [cpp.line]
  • C++14 standard (ISO/IEC 14882:2014)
  • 16.4 行制御 [cpp.line]
  • C++11 standard (ISO/IEC 14882:2011)
  • 16.4 行制御 [cpp.line]
  • C++98 標準 (ISO/IEC 14882:1998)
  • 16.4 行制御 [cpp.line]

[編集] 関連項目

ファイル名、行番号、関数名などのソースコードに関する情報を表すクラス
(クラス) [編集]
ファイル名と行の情報に関するCドキュメント
English 日本語 中文(简体) 中文(繁體)