Next: , Previous: Basic Statements, Up: Statements


11.7.2 块

块作用域和它们声明的变量,在GENERIC中使用BIND_EXPR代码来表示。这在之前的GCC版本中被主要表示为C语句表达式扩展。

块中的变量按照声明的顺序被搜集到BIND_EXPR_VARS中。任何运行时的初始化被从DECL_INITIAL中移出,并移送到控制块中的一条语句。当从C或者C++进行gimplifying的时候,该初始化用来替换DECL_STMT

可变长度的数组(VLA)使得该处理变得复杂,因为它们的大小经常是一个块中早前被初始化的变量。为了进行处理,我们目前将块在那个点进行拆分,将VLA移送到一个新的,内部的BIND_EXPR。该策略在将来可能会改变。

C++程序通常包含比源代码中语法块更多的BIND_EXPR,因为多个C++构造函数具有隐式的与它们相关联的作用域。另一方面,虽然C++前端使用伪作用域来处理析构函数对对象的清除,这些并不被转换成GIMPLE形式;在相同级别上的多个声明使用相同的BIND_EXPR