C语言中{}包裹的多个语句为复合语句。
加上()则变成了表达式语句,就可以进行赋值
举例:
int n = ( { int _n = func(); _n>0?_n:0});
对内存stirng进行scanf,可以使用sscanf(str,format, ...),
但如果有很多数据要从字符串中读取,需要对str 指针进行偏移。
sscannf中format最后加上"%n",参数列表末尾加上接收这 &_n.那么 _n就会保存str读取的字符长度,此时str+_n就会把str移到此次未解析的地方。
#define mem_sscanf(ptr, format, ...) ({int _b=0; int _n = sscanf(ptr, format "%n", __VA_ARGS__, &_b); ptr+=_b;_b>0?_n:0;})