Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C-sharp language specification.2004.pdf
Скачиваний:
14
Добавлен:
23.08.2013
Размер:
2.55 Mб
Скачать

Annex A Grammar

1

type-parameter-constraints-clauses:

2

type-parameter-constraints-clause

3

type-parameter-constraints-clauses type-parameter-constraints-clause

4

type-parameter-constraints-clause:

5

where type-parameter : type-parameter-constraints

6

type-parameter-constraints:

7

primary-constraint

8

secondary-constraints

9

constructor-constraint

10

primary-constraint , secondary-constraints

11

primary-constraint , constructor-constraint

12

secondary-constraints , constructor-constraint

13

primary-constraint , secondary-constraints , constructor-constraint

14

primary-constraint:

15

class-type

16

class

17struct

18secondary-constraints:

19

interface-type

20

type-parameter

21

secondary-constraints , interface-type

22

secondary-constraints , type-parameter

23 constructor-constraint:

24new ( )

25A.3 Grammar extensions for unsafe code

26embedded-statement:

27

...

28

unsafe-statement

29 unsafe-statement:

30unsafe block

31type:

32

value-type

33

reference-type

34

pointer-type

35

pointer-type:

36

unmanaged-type *

37void *

38unmanaged-type:

39

type

40

primary-no-array-creation-expression:

41

...

42

pointer-member-access

43

pointer-element-access

44

sizeof-expression

45

unary-expression:

46

...

47

pointer-indirection-expression

48

addressof-expression

459

C# LANGUAGE SPECIFICATION

1 pointer-indirection-expression:

2* unary-expression

3pointer-member-access:

4

primary-expression -> identifier type-argument-listopt

5

pointer-element-access:

6

primary-no-array-creation-expression [ expression ]

7 addressof-expression:

8& unary-expression

9sizeof-expression:

10sizeof ( unmanaged-type )

11embedded-statement:

12

...

13

fixed-statement

14

fixed-statement:

15

fixed ( pointer-type fixed-pointer-declarators ) embedded-statement

16

fixed-pointer-declarators:

17

fixed-pointer-declarator

18

fixed-pointer-declarators , fixed-pointer-declarator

19

fixed-pointer-declarator:

20

identifier = fixed-pointer-initializer

21

fixed-pointer-initializer:

22

& variable-reference

23

expression

24

variable-initializer:

25

expression

26

array-initializer

27

stackalloc-initializer

28

stackalloc-initializer:

29

stackalloc unmanaged-type [ expression ]

30

End of informative text.

460

Annex B Portability issues

1Annex B. Portability issues

2This clause is informative.

3This annex collects some information about portability that appears in this International Standard.

4B.1 Undefined behavior

5A program that does not contain any occurrences of the unsafe modifier cannot exhibit any undefined

6behavior.

7The behavior is undefined in the following circumstances:

81. When dereferencing the result of converting one pointer type to another and the resulting pointer is not

9correctly aligned for the pointed-to type. (§25.4)

102. When the unary * operator is applied to a pointer containing an invalid value (§25.5.1).

113. When a pointer is subscripted to access an out-of-bounds element (§25.5.3).

124. Modifying objects of managed type through fixed pointers (§25.6)

135. The initial content of memory allocated by stackalloc (§25.7).

146. Attempting to allocate a negative number of items using stackalloc (§25.7).

15B.2 Implementation-defined behavior

16A conforming implementation is required to document its choice of behavior in each of the areas listed in

17this subclause. The following are implementation-defined:

181. The behavior when an identifier not in Normalization Form C is encountered (§9.4.2).

192. The purpose of a line-indicator with an identifier-or-keyword whose value does not equal default

20(§9.5.7).

213. The interpretation of the input-characters in the pp-pragma-text of a #pragma directive (§9.5.8).

224. The values of any application parameters passed to Main by the host environment prior to application

23startup (§10.1).

245. Whether a System.ArithmeticException (or a subclass thereof) is thrown or the overflow goes

25unreported with the resulting value being that of the left operand, when in an unchecked context and

26the left operand of an integer division is the maximum negative int or long value and the right

27operand is –1. (§14.7.2).

286. The mechanism by which linkage to an external function is achieved (§17.5.7).

297. The impact of thread termination when no matching catch clause is found for an exception and the code

30that initially started that thread is reached. (§23.3)

318. The purpose of attribute target specifiers other than those identified by this standard (§24.2).

329. The mappings between pointers and integers (§25.4).

3310. The effect of applying the unary * operator to a null pointer (§25.5.1).

3411. The behavior when pointer arithmetic overflows the domain of the pointer type (§25.5.5).

3512. The result of the sizeof operator for nonpre-defined value types (§25.5.8).

461

C# LANGUAGE SPECIFICATION

113. The behavior of the fixed statement if the array expression is null or if the array has zero

2elements (§25.6).

314. The behavior of the fixed statement if the string expression is null (§25.6).

415. The value returned when a stack allocation of size zero is made (§25.7).

5B.3 Unspecified behavior

61. The time at which the destructor (if any) for an object is run, once that object has become eligible for

7destruction (§10.9).

82. The value of the result when converting out-of-range values from float or double values to an

9integral type in an unchecked context (§13.2.1).

103. The layout of arrays, except in an unsafe context (§14.5.10.2).

114. Whether there is any way to execute the block of an anonymous method other than through evaluation

12and invocation of the anonymous-method-expression (§14.5.14.2).

135. The invocation list of a delegate produced from an anonymous-method-expression contains a single

14entry. The exact target object and target method of the delegate are unspecified (§14.5.14.4).

156. The exact timing of static field initialization (§17.4.5.1).

167. The attributes of a type declared in multiple parts are determined by combining, in an unspecified

17order, the attributes of each of its parts (§24.2).

188. The order in which members are packed into a struct (§25.5.8).

199. When an enumerator object is in the running state, the result of invoking MoveNext is unspecified

20(§27.2.1).

2110. When an enumerator object is in the before, running, or after states, the result of accessing Current is

22unspecified (§27.2.2).

2311. When an enumerator object is in the running state, the result of invoking Dispose is unspecified

24(§27.2.3).

25B.4 Other Issues

261. The exact results of floating-point expression evaluation can vary from one implementation to another,

27because an implementation is permitted to evaluate such expressions using a greater range and/or

28precision than is required. (§11.1.6)

292. The CLI reserves certain signatures for compatibility with other programming languages. (§17.2.7)

30End of informative text.

462

Соседние файлы в предмете Электротехника