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

履歴 編集

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

このページはC++23に採用された言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

概要

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

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

参照