当前位置: 首页 > 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的同步方…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...