こんなマクロを使いたい
#define Return(x) {call_my_function(); return (x);}
マクロを括弧なしで使用または宣言する方法はありますか?関数ではなく、実際の戻り呼び出しのように使用できますか? 例えば:
BOOL my_func() {
code....
Return FALSE;
}
こんなマクロを使いたい
#define Return(x) {call_my_function(); return (x);}
マクロを括弧なしで使用または宣言する方法はありますか?関数ではなく、実際の戻り呼び出しのように使用できますか? 例えば:
BOOL my_func() {
code....
Return FALSE;
}
あなたは何か恐ろしいことをすることができます
#define Return for (call_my_function(); ;) return
編集:素敵なスマイリーのためにダニエルのバージョンに変更されました. そして、直接「オーバーロード」するというジムの考えreturn
は有効であり、さらに恐ろしいものです;)
いくつかのトリックを行うことができます (ただし、強くお勧めしません)。
#define Return call_my_function(); return
次に、次のように使用します。
Return false;
これは次のように展開されます
call_my_function; return false;
編集:この質問に関する2つのコメントを例として参照して、この使用を思いとどまらせた理由を理解してください。
検討
#define Return(x) {call_my_function(); return (x);}
if (1) Return (0);
に展開します
if (1) {call_my_function(); return (1);}
そして、一部の人々は、次のように summat を使用できることを提案しています
#define Return call_my_function(); return
今
if (1) Return;
に展開します
if (1) call_my_function();
return;
ちょっと意図が違う。
定義から { と } を削除します。
マクロでは、正確な文字が置換に使用されます (x も置換されます)。