以下是一个例子:
#define get_i() i
int i;
int i2;
i2 = get_i();
在上面的情况中^^^ get_i()
就像一个返回某些东西的函数(在这种情况下是i
的值)。
#define set_i(value) do{i = (value);}while(0)
set_i(i2);
上面这个^^^就像一个不返回的函数。
我的问题是,我可以使用宏来创建一个类似函数的宏,它可以同时执行某些操作并返回一个对象吗?这是一个伪代码:
#define increse_i2_and_return_i() i2++; return i;
这可能吗?
答案 0 :(得分:2)
您可以使用逗号运算符。最后一个操作数的值将是整个表达式的值。
#define increse_i2_and_return_i() (i2++, i)
这个技巧的缺点是你不能在这样的宏中创建临时变量。