2016-10-27 15 views
0

のような機能は一例で加えることができます。これで何か(iの値を返す関数のような^^^ get_i()行為上記の場合私は本当にここでマクロ

#define get_i() i 
int i; 
int i2; 

i2 = get_i();

場合)。

#define set_i(value) do{i = (value);}while(0) 
set_i(i2); 

上記の^^^は、返さない関数のように動作します。

私の質問は、マクロを使用して、何かをしたり、何かをしたり、オブジェクトを返すことができる関数型マクロを作成できますか?ここに擬似コードがあります:

#define increse_i2_and_return_i() i2++; return i; 

これは可能ですか?

+2

カンマ演算子を使用します。しかし、より良い、あなたが達成しようとしているもの(とはいかない)を教えてください –

答えて

2

これにカンマ演算子を使用できます。最後のオペランドの値は、式全体の値になります。

#define increse_i2_and_return_i() (i2++, i) 

このトリックの欠点は、マクロ内に一時変数を作成できないことです。

+0

私は引数として変数を渡します。これはまさに私がしていたものです。 – Hairi

関連する問題