C语句的作用是什么?
i=!({ printf("%d\n",r); });
Run Code Online (Sandbox Code Playgroud)
我和r是整数.
我正在尝试使用pycparser解析它,它无法识别它并引发错误:
pycparser.plyparser.ParseError :: 7:6:before:{
谢谢
看起来它正在使用GNU C扩展,它允许编写一个需要表达式的块语句.块语句的值是块的最后一个表达式的值.
例如:
int x = ({ int a = 1; a+2; });
Run Code Online (Sandbox Code Playgroud)
将初始化x用3.
在您的特定情况下,扩展名看起来不太有用,因为:
i=!({ printf("%d\n",r); });
Run Code Online (Sandbox Code Playgroud)
与以下内容相同:
i=!printf("%d\n",r);
Run Code Online (Sandbox Code Playgroud)
我猜你的原始代码可能是由一些黑魔法宏生成的.
顺便说一句,这段代码没有多大意义.看起来它想要检查printf写入文本是否失败或成功.但是根据规范,printf如果成功则返回写入的字节数,如果错误则返回负值.因此,只有当它写入0个字符时它才会返回0,并且最终不会发生这种情况\n,并且i总是最终存在0,无论有无错误.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |