5.3 语句表达式
语句表达式
({表达式;表达式2;})
- 允许在表达式内使用局部变量、循环和跳转
- 语句表达式的值:最后一个表达式的值
- 内核里面大量调用,避免函数调用的开销
例子
#include<stdio.h>
int main(void)
{
int sum = 0;
sum = ({
for(int i=0;i<10;i++)
s=s+i;
s;
});
printf("sum:%d\n",sum);
}
如何避免宏展开的问题
可以利用gcc命令分析
gcc -E
- MAX(2 ,1)
#define MAX(x,y) x>y?x:y
- MAX(1!=1,1!=2)
#define MAX(x,y) (x)>(y)?(x):(y)
- printf("%d",3+MAX(i++,j++)
#define MAX(x,y) ((x)>(y)?(x):(y))
- MAX(i++,j++)
#define MAX(x,y) ({\
int _x=(x);\
int _y=(y);\
_x > _y?_x:_y;
\})
- MAX(i++,j++)支持多种数据类型
#define MAX(type,x,y) ({\
type _x=(x);\
type _y=(y);\
_x > _y?_x:_y;
\})