语 句 2.014

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

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

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

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

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

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

1 作用域(scope)语句

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

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

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; // 非法
[color=red]cast(void)(x + x); // 正确[/color]


6 声明语句

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

声明语句:
单个声明

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


。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值