このようなものを作ることはできますか?
#define N_VALID "is not a valid ID"
...
throw N_valid;
...
catch(char *message){
fprintf(stderr,"%s",message);}
はい。
#define N_VALID "is not a valid ID"
throw N_VALID;
throw "is not a valid ID";
上記の下 2 行は、前処理が完了すると、コンパイラの目には文字通り同一です。
これは合法ですが、不道徳です。クライアントがエラーを個別に処理できるように、1 回のキャッチで巨大な if ステートメントを使用するのではなく、常にオブジェクトをスローする必要があります。
#define ディレクティブは、アプリケーションがコンパイルされる前に、コード内のタグを別のタグに置き換えることによって機能します。したがって、これができる場合:
throw "is not a valid ID";
あなたはこれを行うことができます:
throw N_VALID;
それはうまくいくはずです。プリプロセッサはコンパイラの前に実行され、N_VALID を「有効な ID ではありません」に置き換えます。