宏定义中包含语句时的赋值方式。
使用({...})方式执行语句快。 最后sum;可以作为语句块的返回值使用。
#define get_value(value, Nbr) \
({ \
int i, sum; \
for(i = 0; i < Nbr; i++) \
sum += i; \
sum += i; \
sum; \
})
int main()
{
int value = 1, Nbr = 10;
int sum;
sum = get_value(value, Nbr);
if (get_value(value, Nbr) > 10)
printf(" > 10\n");
return 0;
}
需要注意的情况
#define get_value(value, Nbr) \
({ \
int i, sum; \
for(i = 0; i < Nbr; i++) \
sum += i; \
sum += value;
sum; \
})
int main()
{
int i = 1, Nbr = 10;
int sum;
sum = get_value(i, Nbr);
if (get_value(i, Nbr) > 10)
printf(" > 10\n");
return 0;
}
上述情况虽然使用了宏定义传值,但是传入的变量i,将语句块中的value替换成i,语句块中本来就有i变量,那么value的值就无法传入,会被语句块中的i取代。