宏定义返回值 问题
刚刚找了一下 得到的是 加花括号可以使宏得到返回值
类似
#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);