当前位置: 首页 > news >正文

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

相关文章:

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 行号指令(#li…...

电商几乎每一次的调整,几乎都围绕着AI展开

在那个马云依然还掌舵着阿里这艘大船的年月里,因其天马行空的想法,在很多时候总是被冠以「外星人」的名头。 站在今天来看,所谓的「外星人」,或许更多地和当下风靡的「AI」有很多相似之处吧。 他,能洞察商业的内在规…...

[Linux 进程(三)] 进程优先级,进程间切换,main函数参数,环境变量

文章目录 1、进程优先级1.1 Linux下查看进程优先级1.2 Linux 进程优先级的修改PRI and NItop命令配合操作更改优先级 1.3 竞争 独立 并行 并发 2、进程间切换3、Linux2.6内核进程调度队列3.1 活跃进程3.2 过期进程 4 main函数参数 — 命令行参数4.1 利用main函数的参数实现一个…...

【Java 设计模式】设计原则之单一职责原则

文章目录 1. 定义2. 好处3. 应用4. 示例结语 在软件开发中,设计原则是创建灵活、可维护和可扩展软件的基础。 这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。 ✨单一职责原则(SRP) ✨开放/封闭原则&#xff08…...

实现导航栏吸顶操作

一、使用VueUse插件 // 安装 npm i vueuse/core二、点击搜索useScroll 2.1搜索结果如图 三、使用 // 这是示例代码 import { useScroll } from vueuse/core const el ref<HTMLElement | null>(null) const { x, y, isScrolling, arrivedState, directions } useSc…...

Docker简述与基础部署详解

目录 docker概述 docker的核心思想 docker三大组件 docker优势 容器和虚拟机之间的区别 容器在内核中支持的重要技术 命名空间&#xff08;Namespaces&#xff09; 控制组&#xff08;Control Groups&#xff0c;cgroups&#xff09; 写时复制技术&#xff08;Copy-on…...

(南京观海微电子)——色温介绍

色温是表示光线中包含颜色成分的一个计量单位。从理论上说&#xff0c;黑体温度指绝对黑体从绝对零度&#xff08;&#xff0d;273℃&#xff09;开始加温后所呈现的颜色。黑体在受热后&#xff0c;逐渐由黑变红&#xff0c;转黄&#xff0c;发白&#xff0c;最后发出蓝色光。当…...

入门Linux简单操作

基本命令 scp ✓ scp -r 文件 127.0.0.1&#xff1a;/root/文件 (source->>>>destination) mv cp ✓ cp xxxx ./xxxx date ✓ 修改时间 date -s “yyyy-MM-dd 12:12:59” find ✓ find /home/user -name “*.txt” grep ✓ 管道 软连接 多用户 免密设置 脚…...

操作系统复习 一、二章

操作系统复习 一、二章 文章目录 操作系统复习 一、二章第一章 计算机系统概述处理器中各寄存器的作用指令的执行过程中断存储器层次结构和CacheI/O 通信技术 第二章 操作系统概述大内核微内核大内核微内核 操作系统的定义、目标和功能定义目标和功能 操作系统的发展过程现代操…...

【国内访问github不稳定】可以尝试fastgithub解决这个问题

1、下载 https://github.com/dotnetcore/FastGithub https://github.com/dotnetcore/FastGithub/releases 官网下载即可&#xff0c;比如&#xff0c;我用的是这个&#xff1a;fastgithub_osx-x64.zip&#xff08;点这里下载&#xff09; 2、安装 如下图双击启动即可 3、…...

android:clickable=“false“无效,依然能被点击

android:clickable“false”依然能被点击&#xff0c;该属性意义何在&#xff1f; 在Android中&#xff0c;android:clickable 属性用于指定一个视图&#xff08;View&#xff09;是否可以被点击。当你设置 android:clickable"true" 时&#xff0c;表示该视图可以接…...

Springboot WebFlux项目结合mongodb进行crud

第一步&#xff1a;创建项目 第二步&#xff1a;给mongodb插入数据 第三步&#xff1a;创建实体类 package org.cyl.test02.entity;// Task.java import lombok.Data;Data public class Task {private String id;private String description; }第四步&#xff1a;创建Reposito…...

超维空间M1无人机使用说明书——61、ROS无人机物体识别与精准投放

引言&#xff1a;基于空中物流的项目背景。我们提供了使用基于诗句的物体识别和精准投放、降落。实现原理如下&#xff1a; 1、在ROS下使用机载电脑实现物体识别 2、记载电脑根据反馈的位置发布运动控制指令 3、PX4解析机载电脑发布的命令&#xff0c;作出运动控制 4、设置…...

Flask 小程序菜品搜索

mina/pages/food/index.wxml <!--index.wxml--> <!--1px 750/320 2.34rpx;--> <view class"container"><!--轮播图--><view class"swiper-container"><swiper class"swiper_box" autoplay"{{autoplay}…...

Excel·VBA按指定顺序排序函数

与之前写过的《ExcelVBA数组冒泡排序函数》不同&#xff0c;不是按照数值大小的升序/降序对数组进行排序&#xff0c;而是按照指定数组的顺序&#xff0c;对另一个数组进行排序 以下代码调用了《ExcelVBA数组冒泡排序函数》bubble_sort_arr函数&#xff08;如需使用代码需复制…...

数据结构学习笔记——查找算法中的树形查找(红黑树)

目录 一、红黑树的定义&#xff08;一&#xff09;黑/红结点、叶子节点&#xff08;二&#xff09;黑色完美平衡 二、红黑树的性质&#xff08;一&#xff09;黑高和高度&#xff08;二&#xff09;叶子结点个数 三、红黑树与AVL对比 一、红黑树的定义 红黑树是一棵二叉排序树…...

Debezium发布历史66

原文地址&#xff1a; https://debezium.io/blog/2019/07/25/debezium-0-10-0-beta3-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 0.10.0.Beta3 发布 七月 25, 2019 作者&#xff1a; Jir…...

Redis系列之使用Lua脚本

什么是lua脚本&#xff1f; lua语言是一个轻量级的脚本语言&#xff0c;可以嵌入其他语言中使用&#xff0c;调用宿主语言的功能。lua语法简单&#xff0c;小巧&#xff0c;源码一共才200多K&#xff0c;本身不会有太强的功能&#xff0c;很多的语言也支持lua语言&#xff0c;…...

Wargames与bash知识16

Wargames与bash知识16 Bandit24 关卡提示&#xff1a; 一个守护进程正在端口30002上侦听&#xff0c;如果给定bandit24的密码和一个4位数的密码&#xff0c;它将为您提供bandit25的密码。没有办法检索pincode&#xff0c;除非遍历所有10000个组合&#xff0c;称为暴力强制。您…...

关于运维·关于数据库面试题

目录 一、数据库类型 二、数据库引擎 三、mysql数据库类型 四、mysql的约束添加 五、主从复制原理 六、主从方式有几种 七、mysql主从数据不一致的原因 八、mysql的优化 九、什么是事务的特征 十、数据库读写分离的好处 十一、怎样优化sql语句 十二、mysql的同步方…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...