名前空間
変種
操作

ファイル名と行番号情報

提供: cppreference.com
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (C++20未満)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
 

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

目次

[編集] 構文

#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 (C++11未満)2147483647 (C++11以上)より大き場合、動作は未定義です。

[編集] ノート

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

[編集]

#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言語リファレンス