程序设计Csharp程序设计 (89).pdf

上传人:刘静 文档编号:52850151 上传时间:2022-10-24 格式:PDF 页数:31 大小:1.46MB
返回 下载 相关 举报
程序设计Csharp程序设计 (89).pdf_第1页
第1页 / 共31页
程序设计Csharp程序设计 (89).pdf_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《程序设计Csharp程序设计 (89).pdf》由会员分享,可在线阅读,更多相关《程序设计Csharp程序设计 (89).pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C#程序设计 Programming in C#常用预处理命令 1、预处理命令的基本原则 2、常用预处理命令 C#程序设计程序设计 8.3 常用预处理命令 3 源代码指定了程序的定义,预处理指令指示编译器如何处理源代码。C#中的预处理指令由编译器来处理,预处理指令作为词法分析阶段的一部分处理,并不存在单独的预处理阶段。8.3 常用预处理命令 4 预处理器指令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面。预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。8.3 常用预处理命令 5 在编译软件的基本版本时,使用预处理器指令可以禁止编译器编译

2、与额外功能相关的代码。在编写提供调试信息的代码时,也可以使用预处理器指令。8.3.1 预处理指令的基本规则 6 下面是使用预处理指令时应注意的一些重要语法规则:预处理指令总是占用源代码中的单独一行;预处理指令不需要使用分号作为结尾标志;预处理指令必须以#字符和预处理指令名称开头,在#字符之前和#字符与指令之间可以有空格;8.3.1 预处理指令的基本规则 7 包含#define、#undef、#if、#elif、#else、#endif 或#line 指令的源代码行可以用单行注释结束。预处理指令既不是标记,也不是C#句法文法的组成部分。但是,可以用预处理指令包含或排除标记序列,并且可以以这种方式

3、影响C#程序的含义。8 8.3.1 预处理指令的基本规则 表8-1 预处理指令 指令名称 指令格式 含义 声明指令#define 条件编译符号 使给定的条件编译符号成为已定义的符号(从跟在指令后面的源代码行开始)声明指令#undef 条件编译符号 使给定的条件编译符号成为未定义的符号(从跟在指令后面的源代码行开始)条件编译指令#if 表达式 表达式值为true时,编译下面的片段 条件编译指令#elif 表达式 表达式值为true时,编译下面的片段 条件编译指令#else 如果之前的#if或#elif表达式为false,编译下面的片段 条件编译指令#endif 标记一个#if结构的结束 行指令#

4、line 行标识符 改变编译器在输出(如警告和错误)中报告的行号和源文件名称 9 8.3.1 预处理指令的基本规则 续表8-1 预处理指令 指令名称 指令格式 含义 诊断指令#error 错误消息 显示编译时的错误消息 诊断指令#warning 警告消息 显示编译时的警告消息 区域指令#region 名称 标记一段代码的开始,没有编译效果 区域指令#endregion 名称 标记一段代码的结束,没有编译效果 pragma 指令#pragma 文本信息 指定有关程序上下文的信息 8.3.2 声明指令 10 声明指令用于定义或取消定义条件编译符号。其语法形式如下所示:#define#define

5、条件编译符号条件编译符号/使给定的条件编译符号成为已使给定的条件编译符号成为已定义的符号定义的符号#undef#undef 条件编译符号条件编译符号/使给定的条件编译符号成为未使给定的条件编译符号成为未定义的符号定义的符号 8.3.2 声明指令 11#define 指令使给定的条件编译符号成为已定义的符号;#undef 指令使给定的条件编译符号成为未定义的符号。源文件中的任何#define和#undef指令都必须位于所有“实代码”的前面,否则将发生编译时错误。8.3.2 声明指令 12 例如:#define A#define A /正确,因为正确,因为#define#define 指令位于源文

6、件中第一个标记指令位于源文件中第一个标记(namespace namespace 关键字)的前面。关键字)的前面。namespacenamespace N N#define B#define B/编译错误,因为编译错误,因为#define#define 指令在实代码后面出现指令在实代码后面出现#if B#if B classclass Class1Class1#endif#endif 8.3.2 声明指令 13 例如:#define A#define A /正确,因为正确,因为#define#define 指令位于源文件中第一个标记指令位于源文件中第一个标记(namespace namespa

7、ce 关键字)的前面。关键字)的前面。namespacenamespace N N#define B#define B/编译错误,因为编译错误,因为#define#define 指令在实代码后面出现指令在实代码后面出现#if B#if B classclass Class1Class1#endif#endif 8.3.2 声明指令 14#define 指令可用于重复地定义一个已定义的条件编译符号,而不必对该符号插入任何#undef。例如:#define A#define A#define A#define A 8.3.2 声明指令 15#undef 可以“取消定义”一个本来已经是未定义的条件编

8、译符号。例如:#define A#define A#undef A#undef A#undef A#undef A/该指令没有作用但仍是有效的该指令没有作用但仍是有效的 8.3.2 声明指令 16 声明指令中的条件编译符号只有定义与未定义两种状态,它可以是除了true和false之外的任何标识符,包括C#的关键字以及在C#代码中声明的标识符;声明指令中的条件编译符号没有值,不表示字符串。8.3.3 条件编译指令 17 条件编译指令允许根据某个编译符号是否被定义标注一段代码被编译或被跳过。用以完成条件编译的指令有#if、#else、#elif和#endif,它们通过预处理表达式和条件编译符号来控

9、制条件编译功能。8.3.3 条件编译指令 18 1条件编译符号 条件编译符号为除true或false外的任何标识符或关键字,具有两种可能的状态:已定义(defined)或未定义(undefined)。条件编译符号可以由外部机制(如命令行编译器选项)或由声明指令define进行定义成为已定义状态。该符号的已定义状态一直保持到遇到同一符号的#undef 指令或者到达源文件的结尾。8.3.3 条件编译指令 19 当在预处理表达式中引用时,已定义的条件编译符号具有布尔值true,未定义的条件编译符号具有布尔值false。C#语言不要求在预处理表达式中引用条件编译符号之前显式声明它们,未声明的符号作为未

10、定义的符号处理,具有值false。8.3.3 条件编译指令 20 2预处理表达式 预处理表达式可以出现在#if 和#elif 指令中。在预处理表达式中允许使用!、=、!=、&和|运算符,并且可以使用括号进行分组。当在预处理表达式中引用时,已定义的条件编译符号具有布尔值 true,未定义的条件编译符号具有布尔值false。8.3.3 条件编译指令 21 预处理表达式的计算总是产生一个布尔值。预处理表达式的计算规则与常量表达式相同。例如:DEBUGDEBUG&RETAILRETAIL !A A 8.3.3 条件编译指令 22 3条件编译指令 条件编译指令用于按条件包含或排除源文件中的某些部分。语法

11、形式如下:#if#if 预处理表达式预处理表达式/表达式为表达式为truetrue时,编译下面的片段时,编译下面的片段#elif#elif 预处理表达式预处理表达式/表达式为表达式为truetrue时,编译下面的片时,编译下面的片段段#else#else/if/if或或elifelif表达式为表达式为falsefalse时,编译下面的片段时,编译下面的片段#endif#endif/#if/#if的结束标记的结束标记 8.3.3 条件编译指令 23 条件编译指令必须写成集的形式,集的组成依次为:一个#if 指令,零个、一个或多个#elif 指令,零个、一个或多个#else 指令和一个#endif

12、 指令。指令之间是源代码片段。每节源代码由直接位于它前面的那个指令控制。8.3.3 条件编译指令 24 条件编译指令的执行流程为:按顺序计算#if 和#elif 指令的预处理表达式,直到得出 true 值;如果某个预处理表达式的结果为 true,则选择对应指令紧接着的源代码片段;如果所有预处理表达式的结果都为 false 并且存在#else 指令,则选择#else 指令后紧接着的源代码片段,否则不选择任何源代码片段。8.3.3 条件编译指令 25 条件编译指令中包括的源代码必须符合词法文法。8.3.3 条件编译指令 26#define Debug#define Debug/调试状态调试状态 u

13、singusing SystemSystem;classclass TestTest staticstatic voidvoid MainMain()()String sString s=hello;=hello;#if Debug#if Debug ConsoleConsole.WriteLineWriteLine(This is a debug message!);(This is a debug message!);#else#else ConsoleConsole.WriteLineWriteLine(s s););#endif#endif ConsoleConsole.ReadRea

14、d();();8.3.3 条件编译指令 27#define Debug#define Debug/调试状态调试状态 usingusing SystemSystem;classclass TestTest staticstatic voidvoid MainMain()()String sString s=hello;=hello;#if Debug#if Debug ConsoleConsole.WriteLineWriteLine(This is a debug message!);(This is a debug message!);#else#else ConsoleConsole.Wr

15、iteLineWriteLine(s s););#endif#endif ConsoleConsole.ReadRead();();8.3.3 条件编译指令 28#define Debug#define Debug/调试状态调试状态 usingusing SystemSystem;classclass TestTest staticstatic voidvoid MainMain()()String sString s=hello;=hello;#if Debug#if Debug ConsoleConsole.WriteLineWriteLine(This is a debug messag

16、e!);(This is a debug message!);#else#else ConsoleConsole.WriteLineWriteLine(s s););#endif#endif ConsoleConsole.ReadRead();();8.3.3 条件编译指令 29 当预处理指令出现在多行输入元素的内部时,不作为预处理指令处理。例如:classclass HelloHello staticstatic voidvoid MainMain()()SystemSystem.ConsoleConsole.WriteLineWriteLine(hello,hello,#if Debug#if Debug worldworld#else#else NebraskaNebraska#endif#endif )30 8.3.3 条件编译指令 hello,#if Debug world#else Nebraska#endif 程序运行屏幕 结束

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁