X hits on this document

912 views

0 shares

0 downloads

0 comments

177 / 396

C# LANGUAGE SPECIFICATION

void F() { Console.WriteLine("reachable"); goto Label; Console.WriteLine("unreachable"); Label: Console.WriteLine("reachable"); }

the second invocation of Console.WriteLine is unreachable because there is no possibility that the statement will be executed.

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.

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 (§‎7.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 non-constant 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.

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.

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.

The end point of the first Console.WriteLine expression statement is reachable because that statement is reachable.

The if statement is reachable because the end point of the first Console.WriteLine expression statement is reachable.

The second Console.WriteLine expression statement is reachable because the boolean expression of the if statement does not have the constant value false.

164Copyright Microsoft Corporation 1999-2003. All Rights Reserved.

Document info
Document views912
Page views912
Page last viewedWed Dec 07 00:35:06 UTC 2016
Pages396
Paragraphs9401
Words133190

Comments