读书人

宏定义返回值 有关问题

发布时间: 2012-04-19 14:36:43 作者: rapoo

宏定义返回值 问题
刚刚找了一下 得到的是 加花括号可以使宏得到返回值
类似

#define even(x)\
({\
int y = x;\
(2*(y/2) == y ? y:y+1);\
})

会返回最后一条语句的赋值结果
想问的是 int y在这里就像函数中的临时变量吗 用完就被清除 ? 这是C的通用特性吗 如果我用在单片机里 不是通用特性的话估计C编译器就不认了 有人这用过吗 谢谢了

[解决办法]
返回值可以有的,下面一个方法仅供参考

C/C++ code
#include <stdio.h>#define even(x, ret)\{\        int y = x;\        ret = (2*(y/2) == y ? y:y+1);\}int main(void){    int ret;    int num = 10;        even(num, ret);    printf("num = %d\n", ret);        num++;    even(num, ret);    printf("num = %d\n", ret);    return 0;}
[解决办法]
这个是gcc的特有语法,int y是临时变量(不过或能被编译器优化掉),
这种宏的返回值是最后一个表达式的值。
即: (2*(y/2) == y ? y:y+1);

读书人网 >C语言

热点推荐