C# 图解教程 第5版 —— 第24章 预处理指令

文章目录

    • 24.1 什么是预处理指令
    • 24.2 基本规则
    • 24.3 符号指令(#define、#undef )
    • 24.4 条件编译(#if、#else、#elif、#endif)
    • 24.5 条件编译结构
    • 24.6 诊断指令(#warning、#error)
    • 24.7 行号指令(#line)
    • 24.8 区域指令(#region、#endregion)
    • 24.9 警告开关指令(#pragma warning)

24.1 什么是预处理指令

​ C# 中没有实际的预处理程序,“预处理”指令由编译器处理,但这个术语被保留了下来。

24.2 基本规则

  1. 预处理指令必须和 C# 代码在不同的行。
  2. 预处理指令不需要以分号结尾。
  3. 包含预处理指令的每一行必须以“#”字符开始。
    • “#”字符前可以有空格。
    • 在“#”字符和指令之间可以有空格。
  4. 允许行尾注释。
  5. 预处理指令所在的行不允许有分隔符注释。
image-20240113141417324

​ 表 24.1 列出了预处理指令。

表24.1 预处理指令
image-20240113141604387

24.3 符号指令(#define、#undef )

​ 编译符号是只有两种可能状态的标识符,要么被定义,要么未被定义。其具有如下特性:

  1. 可以是任何标识符(除 true 和 false 外),包括关键字,以及在 C# 代码中声明的标识符。
  2. 它没有值,不表示字符串。
  3. #define 声明一个编译符号。
  4. #undef 取消定义一个编译符号。
image-20240113142105747

​ #define 和 #undef 只能用在源文件的第一行,即任何 C# 代码之前。

image-20240113142140680

​ 重复定义已存在的编译符号是被允许的。

image-20240113142208788

​ 定义一个标识符相当于将其值设置为 true,取消定义一个标识符相当于设置其值为 false。

24.4 条件编译(#if、#else、#elif、#endif)

​ 条件编译允许根据某个编译符号是否被定义,来标注一段代码是否被编译或跳过。

  • #if
  • #else
  • #elif
  • #endif
表24.2 在 #if 和 #elif 指令中使用的条件
image-20240113142403792 image-20240113142521466

24.5 条件编译结构

​ #if 和 #endif 需要配对使用,有 #if 指令,则必须有配对的 #endif 指令。

#if 和 #if … #else 结构

image-20240113142712207
图24.1 #if(左)和 #else(右)结构

#if … #elif 和 #if … #elif … #else

image-20240113143026314
图24.2 #if ... #elif(左)和 #if ... #elif ... #else(右)结构

24.6 诊断指令(#warning、#error)

​ 诊断指令产生用户自定义的编译时警告及错误消息,其语法如下。需要注意,Message 是字符串,但不需要被引号包围。

image-20240113143205468

​ 当编译器遇到诊断指令时,会输出相关消息。诊断指令的消息会和编译器产生的警告和错误消息列在一起。

image-20240113143412844
  • #error 指令在 #if 结构中,只有满足 #if 条件时才会生成错误消息:“构建失败”。
  • #warning 用于提醒程序会回头来清理一段代码。

24.7 行号指令(#line)

​ 行号指令可以做如下事情:

  1. 改变编译器警告和错误消息报告的出现行数;
  2. 改变被编译源文件的文件名。
  3. 对交互式调试器隐藏一些行。
image-20240113143906518

​ 例如:

image-20240113144002272

24.8 区域指令(#region、#endregion)

​ 区域指令允许标注和有选择性地命名一段代码。区域由一个 #region 指令和其下方某处的一个 #endregion 指令构成。区域功能能够更轻松地浏览和组织代码。

​ 例如,下面的代码定义了区域 Constructors,包含 2 个构造函数 MyClass。如果不想查看其中的代码,可以在 Rider 中将其折叠为一行。

image-20240113144258104

24.9 警告开关指令(#pragma warning)

​ 使用 #pragma warning 指令可以关闭或重新开启警告消息。

  • disable:关闭警告消息。
  • restore:开启警告消息。

关闭/开启特定警告消息

​ 例如,下面的代码关闭 2 个警告消息 618 和 414,之后又开启了 618 警告消息。

image-20240113144642776

关闭/开启所有警告消息

​ 若不带任何数字列表,则命令会应用于所有警告。

image-20240113144718103

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/409979.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕业设计:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

部署本地GPT

在现实生活中,很多公司或个人的资料是不愿意公布在互联网上的,但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢?于是我们构建自己或公司的本地专属GPT变得非常重要。 先看效果: 查资料不用愁 家教不…

linux安装minio

目录 1、服务器创建minio文件 2、进入minio下的bin下 3、授予服务端和客户端文件可执行权限 4、设置用户名和密码 5、启动minio服务 6、查看minio版本 ​7、访问minio控制台 1、服务器创建minio文件 # 创建minio应用程序目录 mkdir -p /opt/minio/bin # 创建minio数据目…

IP定位技术在网络安全行业的探索

随着互联网的普及和深入生活,网络安全问题日益受到人们的关注。作为网络安全领域的重要技术,IP定位技术正逐渐成为行业研究的热点。本文将深入探讨IP定位技术在网络安全行业的应用和探索。 一、IP定位技术的概述 IP定位技术是通过IP地址来确定设备地理位…

josef约瑟 电流继电器 DL-13/2 0.5 -1A 1NC, 1NO柜内安装,带附件

系列型号 DL-11电流继电器; DL-12电流继电器; DL-13电流继电器; 一、应用范围 DL-13/2电流继电器 板前接线为电磁式瞬动过电流继电器,它广泛用于电力系统二次回路继电保护装置线路中,作为过电流启动元件。 二、主要技术参数据 动作时间…

c语言[]优先级大于*优先级

本博文源于笔者正在学习的c语言[]优先级大于*优先级.在定义二维数组时&#xff0c;a1与[]号结合后&#xff0c;谁的优先级更高&#xff0c;是本博文探讨的话题 博文来源 想要看看*与[]谁的优先级更高 博文代码 #include<stdio.h> #include<stdlib.h> int main(…

九、Qt C++ 数据库开发

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时&#xff0c;几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …

ROS第 6 课 编写简单的订阅器 Subscriber

文章目录 第 6 课 编写简单的订阅器 Subscriber1. 编写订阅者节点2. 测试发布者和订阅者 第 6 课 编写简单的订阅器 Subscriber 订阅器是基于编辑了发布器的基础上创建的&#xff0c;只有发布了消息&#xff0c;才有可能订阅。若未编辑发布器&#xff0c;可前往"ROS第5课 …

「解析」Jetson配置 git服务

这两天感冒了在家休养&#xff0c;想着把之前买的 Jetson 开发板用起来&#xff0c;买Jetson的初衷就是用来学习Linux系统&#xff0c;顺道可以部署算法&#xff0c;以及一些其他需求&#xff0c;相比树莓派而言&#xff0c;Jetson开发相对更贵&#xff0c;但是其配备了英伟达的…

【深度学习目标检测】十六、基于深度学习的麦穗头系统-含GUI和源码(python,yolov8)

全球麦穗检测是植物表型分析领域的一个挑战&#xff0c;主要目标是检测图像中的小麦麦穗。这种检测在农业领域具有重要意义&#xff0c;可以帮助农民评估作物的健康状况和成熟度。然而&#xff0c;由于小麦麦穗在视觉上具有挑战性&#xff0c;准确检测它们是一项艰巨的任务。 全…

leetcode238:除自身以外数组的乘积

文章目录 1.使用除法&#xff08;违背题意&#xff09;2.左右乘积列表3.空间复杂度为O(1)的方法 在leetcode上刷到了这一题&#xff0c;一开始并没有想到好的解题思路&#xff0c;写篇博客再来梳理一下吧。 题目要求&#xff1a; 不使用除法在O(n)时间复杂度内 1.使用除法&am…

解决哈希冲突的几种方法

什么是hash冲突 哈希函数是一个映像&#xff0c;把任意长度的输入&#xff0c;通过Hash算法变换成固定长度的输出&#xff0c;这个输出就是Hash值&#xff1b; 当两个不同的输入&#xff0c;产生了同一个输出值即为哈希冲突 解决方式 开放定址法 开放寻址法的核心思想是&am…