我能真正做出像宏一样的功能吗?

时间:2016-10-27 16:24:31

标签: c macros

以下是一个例子:

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

这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以使用逗号运算符。最后一个操作数的值将是整个表达式的值。

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

这个技巧的缺点是你不能在这样的宏中创建临时变量。