GNU C之圆括号套花括号(表达式中的复合语句)

GNU C对ANSI C做了很多扩展,除比较知名的0长度数组、typeof关键字之类的以外,还有一个比较有意思的,那就是圆括号里面套花括号的复合语句。举例如下:

在Linux Kernel代码中,有一个著名的宏:container_of,代码如下

image.png

这个宏使用了({s1;s2;})这样的语法,这是GNU C的一个扩展,具体可参考GCC手册,如下:

http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement-Exprs

简单点说,圆括号里面可以嵌套花括号,并且整体的值等于最后一个语句的值,比如int i =({int a =3; a;});这个语句执行后,i 就等于3了。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动开发面面观

Python中的正则表达式

1105
来自专栏小灰灰

SpringMVC之请求参数的获取方式

一般最常见的请求为GET和POST,get请求的参数在url上可以获取,post请求参数除了url上还有可能在表单中,文件上传时,获取方式又和一般的参数获取不一...

2985
来自专栏爱撒谎的男孩

Springmvc之RequestMapping

3348
来自专栏于晓飞的专栏

Android Proguard(混淆)

最近项目中遇到一些混淆相关的问题,由于之前对proguard了解不多,所以每次都是面向Stackoverflow的编程。copy别人的答案内心还可以接受,但是c...

1403
来自专栏大内老A

ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上

ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效。如果我们能...

2008
来自专栏祝威廉

如何在命令行中指定StreamingPro的写入路径

其中dbtable 是按天建立的,也就是我每天见一个表,表后缀是时间譬如 20121111 这种。在StreamingPro中的处理方式很简单,只要是Sourc...

613
来自专栏javathings

@ComponentScan 注解使用指南

@ComponentScan 注解类,使得 Spring 去扫描指定包路径下面的类,找到标注有@Component,@Controller,@Service,@...

1373
来自专栏架构之路

深入探讨 Java 类加载器

看到一篇写得非常好的加载器文章,转过来与大家分享一下(https://www.ibm.com/developerworks/cn/java/j-lo-class...

3224
来自专栏Java帮帮-微信公众号-技术文章全总结

stuts2返回json数据简单实现

stuts2返回json数据简单实现 整理了下struts2的简单demo,完成JSON数据的展示。基本流程是在Action定义一个对象属性,例如map类型的一...

3657
来自专栏Samego开发资源

oracle常用基础命令创建表多字段组合主键约束查看表的主键名称 注意大写禁用开启主键约束删除约束等效上面

2435

扫码关注云+社区