#if
ステートメントの内部で使用しても素晴らしい警告を出力するようにマクロを非難します。#if文でマクロを使用すると非推奨の警告を表示します
This answerは私が望むものとほとんど同じですが、#if
ステートメント内からマクロにアクセスするとエラーが発生します。
#include <stdio.h>
#define DEPRECATED_CONSTANT _Pragma ("GCC warning \"Deprecated constant!\"") 0
#define DEPRECATED_FUNCTION(...) _Pragma ("GCC warning \"Deprecated function!\"") printf(__VA_ARGS__)
int main() {
// Prints a warning (good)
int n = DEPRECATED_CONSTANT;
// Prints a warning (good)
DEPRECATED_FUNCTION("%d\n", n);
// Throws an error (bad)
#if DEPRECATED_CONSTANT
return 1;
#else
return 2;
#endif
}
エラーは次のとおりです。
error: missing binary operator before token "("
ボーナスポイントあなたは私のクロスプラットフォーム互換性の解決策を見つけることができれば!
EDIT
私は優雅に、ライブラリ内の破壊変更を処理しようとしている - 私は、彼らが古いマクロを使用するたびに、ユーザーが素敵な、明確な警告(またはエラー)を持つようにしたいので、それがされます新しいマクロを使用するようにコードを移行する必要があることを明確にしてください。これらのプラグマ・ソリューションは、その定数の値がプリプロセッサ・ディレクティブでアクセスされるのではなく、コードで使用される場合にのみ機能します。
以下の回答によれば、この問題の解決策はないようです(clangを使用している場合を除きます)。みんな、ありがとう。
コンテキストを追加できますか。 '#if DEPRECATED_CONSTANT'と書くことで、何をテストしたいですか?マクロが定義されているかどうかテストしますか? – Stargateur
マクロが何らかの方法で使用されているときはいつでも非推奨警告を表示したいと思います。 –
私はあなたのユースケースが '#ifdef'を使用できないと仮定していますか? – DIMMSum