Namespaces
Variants

Filename and line information

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

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

目次

翻訳内容: - 「Contents」→「目次」 - その他のテキスト(Syntax、Explanation、Notes、Example、References、See also)はC++関連の専門用語として翻訳せず、原文のまま保持しました - HTMLタグ、属性、数値、リンク先はすべて変更せず保持しました

構文

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

説明

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

2) また、現在のプリプロセッサファイル名を filename に変更します。この時点からの __FILE__ マクロの展開は filename を生成します。

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

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

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++23規格 (ISO/IEC 14882:2024):
  • 15.7 行制御 [cpp.line]
  • C++20 標準 (ISO/IEC 14882:2020):
  • 15.7 行制御 [cpp.line]
  • C++17 標準 (ISO/IEC 14882:2017):
  • 19.4 行制御 [cpp.line]
  • C++14 標準 (ISO/IEC 14882:2014):
  • 16.4 行制御 [cpp.line]
  • C++11標準 (ISO/IEC 14882:2011):
  • 16.4 行制御 [cpp.line]
  • C++98標準 (ISO/IEC 14882:1998):
  • 16.4 行制御 [cpp.line]

関連項目

ファイル名、行番号、関数名などのソースコード情報を表すクラス
(クラス)
Cドキュメント for ファイル名と行情報