变量1 =({statement 1; statement 2;})在C中构造

变量1 =({statement 1; statement 2;})在C中构造,第1张

概述main(){ int a=10,b=30,c=0; if( c =({a+b;b-a;})) { printf("%d",c); }} 为什么构造({;})在C中是合法的,为什么它返回最后一个语句值作为表达式的结果(为什么它与逗号运算符类似)? 它不是合法的标准 C99,但它是一个非常有用的GCC扩展,称为
main(){       int a=10,b=30,c=0;       if( c =({a+b;b-a;}))        {          printf("%d",c);       }}

为什么构造({;})在C中是合法的,为什么它返回最后一个语句值作为表达式的结果(为什么它与逗号运算符类似)?

解决方法 它不是合法的标准 C99,但它是一个非常有用的GCC扩展,称为 statement-exprs(括号括号复合语句以某个表达式结尾).

IIRC,其他一些编译器支持该扩展,例如Clang/LLVM

语句表达式在包含控制流更改和副作用时更有用,例如:

c = 2*({while (a>0) a--,b--; a+b;});

但是,在您的特定情况下,您可以使用comma operator

if (c=(a+b,b-a))

由于b没有任何副作用,我想优化编译器可以处理它

if (c=b-a)

GCC提供其他有用的extensions,特别是local labels使用__label__和label as values使用计算得到的(在threaded interpreters中非常有用……).我不知道为什么他们没有标准化.我希望他们愿意.

总结

以上是内存溢出为你收集整理的变量1 =({statement 1; statement 2;})在C中构造全部内容,希望文章能够帮你解决变量1 =({statement 1; statement 2;})在C中构造所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234945.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存