语 句 2.014

C 和 C++ 程序员会发现 D 中的语句很熟悉,另外还有一些有趣的扩充。
语句:
;
非空语句
作用域语句块

无作用域非空语句:
非空语句
块语句

无作用域语句:
;
非空语句
块语句

非空或无作用域语句块:
非空语句
作用域语句块

非空语句:
标号语句
表达式语句
声明语句

If语句
条件语句
While语句
Do语句
For语句
Foreach语句
Switch语句
Case语句
Default语句
Continue语句
Break语句
Return语句
Goto语句
With语句
Synchronized语句
Try语句
ScopeGuard语句
Throw语句
   Volatile语句  (2.014中没有)
Asm语句
Pragma语句
Mixin语句
   ForeachRangeStatement  (2.014)

1 作用域(scope)语句

作用域语句:
非空语句
块语句

对于 非空语句 或 块语句 会引入新的 用于 局部符号 的作用域。
即使会引入一个新的作用域,局部符号 的声明也不能掩盖(隐藏)在同一函数里的 其它的局
部符号声明。

void func1(int x)
{ int x; // 非法,x 掩盖了参数 x
int y;
{ int y; } // 非法,y 掩盖了封闭域里的 y

void delegate() dg;
dg = { int y; }; // 正确,这个 y 不在同一个函数里

struct S
{
int y; // 正确,这个 y 是个成员,不是个局部变量
}
{ int z; }
{ int z; } // 正确,这个 y 没有掩盖其它的 z
{ int t; }
{ t++; } // 非法,t 未定义
}

此思想用于避免在复杂函数里,由于限定域里的声明无意识情况,隐藏了前面的声明而引起的错漏。在一个函数里的那些 局部变量名 应该全部唯一。


2 作用域块语句

作用域块语句:
块语句
作用域块语句会为 块语句 引入新的作用域。


3 标号语句

语句可以有标号。标号是一种标志符,其后跟随一条语句。

标号语句:
标识符 ':'无Scope语句

包括空语句在内的任何语句都可以有标号,因此都可以作为 goto 语句的目标。标号语句也
可以用作 break 或者 continue 语句的目标。

标号位于独立的名字空间中,不与声明、变量、类型等位于同一名字空间。就算如此,标号
也不能同局部声明 重名。标号的名字空间是它们所在的函数体。标号的名字空间 不嵌套,也
就是说,一个语句块中的标号 可以在语句块外访问。


4 块语句

块语句:
{ }
{ 语句列表 }

语句列表:
语句
语句 语句列表

语句块是由{ }包括起来的语句序列。其中的语句按照 词法顺序执行。


5 表达式语句

表达式 ;
表达式会被计算。

没有作用的表达式,如 (x + x),在表达式语句中是非法的。如果需要这个表达式,那么
将它的类型转换为 void 就可以让它合法。
int x;
x++; // 正确
x; // 非法
1+1; // 非法
cast(void)(x + x); // 正确


6 声明语句

声明语句声明并初始化变量。

声明语句:
单个声明

一些声明语句:
int a; // 把 a 声明成类型 int,并把它初始化为 0
struct S { } // 声明结构 S
alias int myint;


。。。

你可能感兴趣的:(C++,c,C#)