王朝网络
分享
 
 
 

15.1 End points and reachability

王朝other·作者佚名  2006-05-04
宽屏版  字体: |||超大  

Every statement has an end point. In intuitive terms, the end point of a

statement is the location that

immediately follows the statement. The execution rules for composite

statements (statements that contain

embedded statements) specify the action that is taken when control reaches

the end point of an embedded

statement. [Example: For example, when control reaches the end point of a

statement in a block, control is

transferred to the next statement in the block. end example]

If a statement can possibly be reached by execution, the statement is said

to be reachable. Conversely, if

there is no possibility that a statement will be executed, the statement is

said to be unreachable.

[Example: In the example

void F() {

Console.WriteLine("reachable");

goto Label;

Console.WriteLine("unreachable");

Label:

Console.WriteLine("reachable");

}

C# LANGUAGE SPECIFICATION

178

the second invocation of Console.WriteLine is unreachable because there is

no possibility that the

statement will be executed. end example]

A warning is reported if the compiler determines that a statement is

unreachable. It is specifically not an

error for a statement to be unreachable.

[Note: To determine whether a particular statement or end point is

reachable, the compiler performs flow

analysis according to the reachability rules defined for each statement.

The flow analysis takes into account

the values of constant expressions (§14.15) that control the behavior of

statements, but the possible values of

non-constant expressions are not considered. In other words, for purposes

of control flow analysis, a nonconstant

expression of a given type is considered to have any possible value of that

type.

In the example

void F() {

const int i = 1;

if (i == 2) Console.WriteLine("unreachable");

}

the boolean expression of the if statement is a constant expression because

both operands of the

== operator are constants. As the constant expression is evaluated at

compile-time, producing the value

false, the Console.WriteLine invocation is considered unreachable. However,

if i is changed to be a

local variable

void F() {

int i = 1;

if (i == 2) Console.WriteLine("reachable");

}

the Console.WriteLine invocation is considered reachable, even though, in

reality, it will never be

executed. end note]

The block of a function member is always considered reachable. By

successively evaluating the reachability

rules of each statement in a block, the reachability of any given statement

can be determined.

[Example: In the example

void F(int x) {

Console.WriteLine("start");

if (x < 0) Console.WriteLine("negative");

}

the reachability of the second Console.WriteLine is determined as follows:

? The first Console.WriteLine expression statement is reachable because the

block of the F method is

reachable (§15.2).

? The end point of the first Console.WriteLine expression statement is

reachable15.2 because that

statement is reachable (§15.6 and §15.2).

? The if statement is reachable because the end point of the first

Console.WriteLine expression

statement is reachable (§15.6 and §15.2).

? The second Console.WriteLine expression statement is reachable because

the boolean expression of

the if statement does not have the constant value false.

end example]

There are two situations in which it is a compile-time error for the end

point of a statement to be reachable:

? Because the switch statement does not permit a switch section to ?fall

through? to the next switch

section, it is a compile-time error for the end point of the statement list

of a switch section to be

reachable. If this error occurs, it is typically an indication that a break

statement is missing.

? It is a compile-time error for the end point of the block of a function

member that computes a value to be

reachable. If this error occurs, it typically is an indication that a

return statement is missing.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有