5

こんなマクロを使いたい

#define  Return(x)   {call_my_function(); return (x);}

マクロを括弧なしで使用または宣言する方法はありますか?関数ではなく、実際の戻り呼び出しのように使用できますか? 例えば:

BOOL my_func() {
    code....
    Return FALSE;
}
4

4 に答える 4

7

あなたは何か恐ろしいことをすることができます

#define  Return for (call_my_function(); ;) return

編集:素敵なスマイリーのためにダニエルのバージョンに変更されました. そして、直接「オーバーロード」するというジムの考えreturnは有効であり、さらに恐ろしいものです;)

于 2012-08-08T13:04:14.497 に答える
2

いくつかのトリックを行うことができます (ただし、強くお勧めしません)。

#define Return call_my_function(); return

次に、次のように使用します。

Return false;

これは次のように展開されます

call_my_function; return false;

編集:この質問に関する2つのコメントを例として参照して、この使用を思いとどまらせた理由を理解してください。

于 2012-08-08T12:52:41.963 に答える
1

検討

#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;

ちょっと意図が違う。

于 2012-08-08T13:11:03.347 に答える
0

定義から { と } を削除します。

マクロでは、正確な文字が置換に使用されます (x も置換されます)。

于 2012-08-08T12:52:56.470 に答える