C# 语言规范--2.5.3 声明指令(转)
声明指令用于定义或取消定义条件编译符号。 pp-declaration:(pp 声明:) whitespaceopt # whitespaceopt define whitespace conditional-symbol pp-new-line(空白可选 # 空白可选 define 空白 条件符号 pp 新行)whitespaceopt # whitespaceopt undef whitespace conditional-symbol pp-new-line(空白可选 # 空白可选 undef 空白 条件符号 pp 新行) pp-new-line:(pp 新行:) whitespaceopt single-line-commentopt new-line(空白可选 单行注释可选 新行)对 #define 指令
C# 语言规范--2.5.2 预处理表达式(转)
预处理表达式可以出现在 #if 和 #elif 指令中。在预处理表达式中允许使用 !、==、!=、&& 和 || 运算符,并且可以使用括号进行分组。 pp-expression:(pp 表达式:) whitespaceopt pp-or-expression whitespaceopt(空白可选 pp 或表达式 空白可选) pp-or-expression:(pp 或表达式:) pp-and-expression(pp 与表达式)pp-or-expression whitespaceopt || whitespaceopt pp-and-expression(pp 或表达式 空白可选 || 空白可选 pp 与表达式) pp-and-expression:(pp 与表达式:) pp-equality-expres
C# 语言规范--2.5.1 条件编译符号(转)
#if、#elif、#else 和 #endif 指令提供的条件编译功能是通过预处理表达式(第 2.5.1 节)和条件编译符号来控制的。 conditional-symbol:(条件符号:) 除 true 和 false 外的任何标识符或关键字条件编译符号有两种可能的状态:已定义的或未定义的。在源文件词法处理开始时,条件编译符号除非已由外部机制(如命令行编译器选项)显式定义,否则是未定义的。当处理 #define 指令时,在指令中指定的条件编译符号在那个源文件中成为已定义的。此后,该符号就一直保持已定义的状态,直到处理一条关于同一符号的 #undef 指令,或者到达源文件的
C# 语言规范--2.4.5 运算符和标点符号(转)
有若干种运算符和标点符号。运算符在表达式中用于描述涉及一个或多个操作数的运算。例如,表达式 a + b 使用 + 运算符添加两个操作数 a 和 b。标点符号用于分组和分隔。 operator-or-punctuator(运算符或标点符号):下列之一 { } [ ] ( ) . , : ; + - * / % & | ^ ! ~ = < > ? ++ -- && || << >> == != <= >= += -= *=
C# 语言规范--2.5 预处理指令(转)
预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致。在 C# 中没有单独的预处理步骤;预处理指令按词法分析阶段的一部分处理。 pp-directive:(pp 指令:) pp-declaration(pp 声明)pp-conditional(pp 条件)pp-line(pp 行)pp-diagnostic(pp 诊断)pp-region(pp 区域)下面是可用的预处理指令: #define 和 #undef,分别用于定义和取消定义条件编译符号(第 2.5.3 节)。 #if、#elif、#else 和 #endif,用于按条件跳过源代码
C# 语言规范--2.4.4.6 空文本(转)
null-literal:(空文本:) null“空文本”的类型为 null 类型。[@more@]
C# 语言规范--2.4.4.5 字符串(转)
C# 支持两种形式的字符串:规则字符串和逐字字符串。规则字符串由包含在双引号中的零个或多个字符组成(如 "hello"),并且可以包含简单转义序列(如表示制表符的 )、十六进制转义序列和 Unicode 转义序列。逐字字符串由 @ 字符后跟开始的双引号字符、零个或多个字符以及结束的双引号字符组成。一个简单的示例就是 @"hello"。在逐字字符串中,分隔符之间的字符逐字解释,唯一的例外是“引号转义序列”。具体说来,在逐字字符串中不处理简单转义序列以及十六进制和 Unicode 转义序列。逐字字符串可以跨多行。 string
C# 语言规范--2.4.4.3 实数(转)
实数用于编写类型 float、double 和 decimal 的值。 real-literal:(实数:) decimal-digits . decimal-digits exponent-partopt real-type-suffixopt(十进制数字 . 十进制数字 指数部分可选 实数类型后缀可选). decimal-digits exponent-partopt real-type-suffixopt(. 十进制数字 指数部分可选 实数类型后缀可选)decimal-digits exponent-part real-type-suffixopt(十进制数字 指数部分 实数类型后缀可选)decimal-digits real-type-suffix(十进制数字 实数类型后缀) exponent-part:(
C# 语言规范--2.4.4.2 整数(转)
整数用于编写类型 int、uint、long 和 ulong 的值。整数具有两种可能的形式:十进制和十六进制。 integer-literal:(整数:) decimal-integer-literal(十进制整数)hexadecimal-integer-literal(十六进制整数) decimal-integer-literal:(十进制整数:) decimal-digits integer-type-suffixopt(十进制数字 整数类型后缀可选) decimal-digits:(十进制数字:) decimal-digit(十进制数字)decimal-digits decimal-digit(十进制数字 十进制数字) decimal-digit: one of(十进制数字:下列之一) 0 1 2 3 4 5 6 7 8 9 inte
C# 语言规范--2.4.4.1 布尔值(转)
有两种布尔值:true 和 false。 boolean-literal:(布尔值:) truefalse布尔值的类型为 bool。[@more@]
C# 语言规范--2.4.3 关键字(转)
关键字是类似标识符的保留的字符序列,不能用作标识符(以 @ 字符开头时除外)。 keyword: one of(关键字:下列之一) 在文法中的某些位置,特定的标识符有特殊的含义,但不是关键字。例如,在属性声明中,“get”和“set”标识符有特殊的含义(第 10.6.2 节)。在这些位置决不允许使用 get 或 set 以外的标识符,因此这种用法不会与将这些字用作标识符冲突。[@more@]
C# 语言规范--2.4.4 文本(转)
文本是值的源代码表示形式。 literal:(文本:) boolean-literal(布尔值)integer-literal(整数)real-literal(实数)character-literal(字符)string-literal(字符串)null-literal(空值)[@more@]
C# 语言规范--2.4.2 标识符(转)
本节给出的标识符规则完全符合 Unicode 标准附件 15 推荐的规则,但以下情况除外:允许将下划线用作初始字符(这是 C 编程语言的传统),允许在标识符中使用 Unicode 转义序列,以及允许“@”字符作为前缀以使关键字能够用作标识符。 identifier:(标识符:) available-identifier(可用的标识符)@ identifier-or-keyword(@ 标识符或关键字) available-identifier:(可用的标识符:) 不是“关键字”的“标识符或关键字” identifier-or-keyword:(标识符或关键字:) identifier-start-character identifier-part-charactersop
C# 语言规范--2.4 标记(转)
有若干种标记:标识符、关键字、文本、运算符和标点符号。空白和注释不是标记,但它们可充当标记的分隔符。 token:(标记:) identifier(标识符)keyword(关键字)integer-literal(整数)real-literal(实数)character-literal(字符)string-literal(字符串)operator-or-punctuator(运算符或标点)[@more@]
C# 语言规范--2.4.1 Unicode 字符转义序列(转)
Unicode 字符转义序列表示一个 Unicode 字符。Unicode 字符转义序列在标识符(第 2.4.2 节)、字符(第 2.4.4.4 节)和规则字符串(第 2.4.4.5 节)中处理。不在其他任何位置处理 Unicode 字符转义(例如,在构成运算符、标点符号或关键字时)。 unicode-escape-sequence:(unicode 转义序列:) u hex-digit hex-digit hex-digit hex-digit(u 十六进制数字 十六进制数字 十六进制数字 十六进制数字)U hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit(U 十六进制
C# 语言规范--2.3.3 注释(转)
支持两种形式的注释:单行注释和带分隔符的注释。单行注释以字符 // 开头并延续到源行的结尾。带分隔符的注释以字符 /* 开头,以字符 */ 结束。带分隔符的注释可以跨多行。 comment:(注释:) single-line-comment(单行注释)delimited-comment(带分隔符的注释) single-line-comment:(单行注释:) // input-charactersopt(// 输入字符可选) input-characters:(输入字符:) input-character(输入字符)input-characters input-character(输入字符 输入字符) input-character:(输入字符:) 除换行符外的任何 Unicode
C# 语言规范--2.3.1 行结束符(转)
行结束符将 C# 源文件的字符划分为行。 new-line:(新行:) 回车符 (U+000D)换行符 (U+000A)回车符 (U+000D) 后跟换行符 (U+000A)行分隔符 (U+2028)段落分隔符 (U+2029)为了与添加文件尾标记的源代码编辑工具兼容,并能够以正确结束的行序列的形式查看源文件,下列转换按顺序应用到 C# 程序中的每个源文件: 如果源文件的最后一个字符为 Control-Z 字符 (U+001A),则删除此字符。 如果源文件非空并且源文件的最后一个字符不是回车符 (U+000D)、换行符 (U+000A)、行分隔符 (U+2028) 或段落分隔符 (U+2029),则将在源文件的结尾添加一个回车
C# 语言规范--2.3.2 空白(转)
空白被定义为任何含 Unicode 类 Zs 的字符(包括空白字符)以及水平制表符、垂直制表符和换页符。 whitespace:(空白:)任何含 Unicode 类 Zs 的字符水平制表符 (U+0009) 垂直制表符 (U+000B) 换页符 (U+000C)[@more@]
C# 语言规范--2.2.2 词法文法(转)
第 2.3 节、第 2.4 节和第 2.5 节介绍 C# 的词法文法。词法文法的结束符号为 Unicode 字符集的字符,并且词法文法指定如何组合字符以构成标记(第 2.4 节)、空白(第 2.3.2 节)、注释(第 2.3.3 节)和预处理指令(第 2.5 节)。C# 程序中的每个源文件都必须符合词法文法的输入产生式(第 2.3 节)。[@more@]C# 语言规范--2.2.2 词法文法
C# 语言规范--2.2.3 句法文法(转)
本章后面的章节和附录介绍 C# 的句法文法。句法文法的结束符号是由词法文法定义的标记,句法文法指定如何组合这些标记以构成 C# 程序。C# 程序中的每个源文件都必须符合句法文法的编译单元产生式(第 9.1 节)。[@more@]