最終更新日時(UTC):
が更新

履歴 編集

#warningのサポートを追加(C++23)

概要

C++23では、プリプロセッサ命令として、特定のコードに到達した際に警告メッセージを出力する #warning をサポートする。

#warning The code is deprecated.

#warning命令は#error命令とちがい、コンパイルが停止しない。

仕様

プリプロセッサ命令の構文として、#errorと同様の構文で#warningが定義される:

#error pp-tokens(opt) new-line
#warning pp-tokens(opt) new-line

#errorは到達時にプログラムが不適格になると規定されるが、#warningでは不適格にならない。

警告メッセージの扱いは実装定義

#include <iostream>

#warning The code is deprecated.

int main()
{
    std::cout << "Hello" << std::endl;
}

出力例

prog.cc:3:2: warning: #warning The code is deprecated. [-Wcpp]
    3 | #warning The code is deprecated.
      |  ^~~~~~~
Hello

この機能が必要になった背景・経緯

#warningはほぼ全ての主要なコンパイラがサポートしており、致命的でない問題をプログラマに知らせたい状況で便利だった。

例として、ライブラリ作者が、自身のライブラリがマルチスレッドをまだサポートしておらずパフォーマンス劣化の懸念があるが、安全に使用することはできる、というようなことをユーザーに知らせたい、という状況で本機能が重宝される。

参照