学习c#的第十五天
目录
C# 预处理器指令
C# 预处理器指令列表
#define 预处理器
条件指令
#warning 和 #error
#region 和 #endregion
#line
#pragma
C# 预处理器指令
预处理器指令指导编译器在实际编译开始之前对信息进行预处理。
所有的预处理器指令都是以 # 开始。且在一行上,只有空白字符可以出现在预处理器指令之前。预处理器指令不是语句,所以它们不以分号(;)结束。
C# 编译器没有一个单独的预处理器,但是,指令被处理时就像是有一个单独的预处理器一样。在 C# 中,预处理器指令用于在条件编译中起作用。与 C 和 C++ 不同的是,它们不是用来创建宏。一个预处理器指令必须是该行上的唯一指令。
C# 预处理器指令列表
下表列出了 C# 中可用的预处理器指令:
预处理器指令 | 描述 |
---|---|
#define | 它用于定义一系列成为符号的字符。 |
#undef | 它用于取消定义符号。 |
#if | 它用于测试符号是否为真。 |
#else | 它用于创建复合条件指令,与 #if 一起使用。 |
#elif | 它用于创建复合条件指令。 |
#endif | 指定一个条件指令的结束。 |
#line | 它可以让您修改编译器的行数以及(可选地)输出错误和警告的文件名。 |
#error | 它允许从代码的指定位置生成一个错误。 |
#warning | 它允许从代码的指定位置生成一级警告。 |
#region | 它可以让您在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块。 |
#endregion | 它标识着 #region 块的结束。 |
#define 预处理器
在C#中,#define 是一个预处理器指令,用于定义符号常量。#define 允许您定义一个符号,这样,通过使用符号作为传递给 #if 指令的表达式,表达式将返回 true。它的语法如下:
#define symbol
下面的程序说明了这点:
#define DEBUG
using System;class Program
{static void Main(){
#if (DEBUG)Console.WriteLine("Debug 模式下的输出。");
#elseConsole.WriteLine("其他输出。");
#endifConsole.ReadKey();}
}
当上面的代码被编译和执行时,它会产生下列结果:
Debug 模式下的输出。
条件指令
您可以使用 #if 指令来创建一个条件指令。条件指令用于测试符号是否为真。如果为真,编译器会执行 #if 和下一个指令之间的代码。
条件指令的语法:
#if symbol [operator symbol]...
其中,symbol 是要测试的符号名称。您也可以使用 true 和 false,或在符号前放置否定运算符。
常见运算符有:
- == (等于)
- != (不等于)
- && (与)
- || (或)
您也可以用括号把符号和运算符进行分组。条件指令用于在调试版本或编译指定配置时编译代码。一个以 #if 指令开始的条件指令,必须显示地以一个 #endif 指令终止。
下面的程序演示了条件指令的用法:
#define DEBUG // 定义符号常量DEBUG
#define TEST // 定义符号常量TESTusing System;class Program
{static void Main(){
#if (DEBUG && !TEST) // 如果DEBUG被定义并且TEST未被定义Console.WriteLine("Debug 模式下的输出。");
#elif (!DEBUG && TEST) // 如果DEBUG未被定义并且TEST被定义Console.WriteLine("Test 模式下的输出。");
#elseConsole.WriteLine("其他输出。");
#endifConsole.ReadKey();}
}
当上面的代码被编译和执行时,它会产生下列结果:
其他输出。
#warning 和 #error
#warning指令用于在编译时生成警告消息,并允许编译过程继续进行,而#error指令用于生成编译错误消息,并立即中断编译过程。这两条指令通常与条件编译和预处理指令一起使用,帮助开发人员在编译时检查和处理特定条件。
当需要提醒自己或其他人执行某个操作时,可以使用#warning指令生成警告消息,以便在编译输出中显示相关信息。例如,可以在特定的代码分支或条件下添加#warning指令,以提醒其他人注意相关内容。
当需要禁止特定条件或代码被编译时,可以使用#error指令生成错误消息,导致编译过程立即中断。这有助于确保在不合适的条件下编译不会继续进行,从而防止潜在的问题出现在最终的程序中。
总之,#warning和#error指令是在编译时对特定条件进行警告和错误处理的有效工具。
以下是一个简单的示例:
#define DEBUG_MODEusing System;namespace WarningErrorExample
{class Program{static void Main(string[] args){
#if DEBUG_MODE
#warning Debug 模式已经启用,请谨慎处理
#endif#if RELEASE
#error 不能在发布版本中使用调试代码
#endifConsole.WriteLine("程序执行完成");}}
}
在这个示例中,我们定义了一个名为DEBUG_MODE的符号,并使用条件编译指令#if来根据不同的条件执行相应的操作。
- 当DEBUG_MODE被定义时,#warning指令会生成一条警告消息,提示开发人员谨慎处理。
- 当RELEASE被定义时,#error指令会生成一条错误消息,导致编译过程立即中断。
通过这样的方式,开发人员可以根据不同的条件在编译时产生警告或错误消息,确保代码的正确性和安全性。
当上面的代码被编译和执行时,它会产生下列结果:
程序执行完成
#region 和 #endregion
#region和#endregion是用于代码折叠的预处理指令,它们可以帮助开发人员组织和管理代码的可读性。
#region指令用于定义一个代码块的开始位置,而#endregion指令用于定义该代码块的结束位置。在这两个指令之间的代码可以被折叠或展开,以便在编辑器中更好地组织和浏览代码。
下面是一个示例,展示了如何使用#region和#endregion:
using System;namespace RegionExample
{class Program{static void Main(string[] args){#region 输入处理Console.WriteLine("请输入您的姓名:");string name = Console.ReadLine();Console.WriteLine("您好," + name);#endregion#region 计算逻辑int a = 10;int b = 5;int sum = a + b;Console.WriteLine("两个数的和为:" + sum);#endregion#region 结果展示Console.WriteLine("程序执行完成");#endregion}}
}
在这个示例中,我们使用#region和#endregion将代码分成了三个块:输入处理、计算逻辑和结果展示。每个块都以#region开始,以#endregion结束。这样,在编辑器中就可以通过折叠或展开这些块来方便地浏览代码。
使用#region和#endregion可以提高代码的可读性,特别是对于大型代码文件或复杂的代码逻辑。它们可以帮助我们更好地组织代码,并使其更易于理解和维护。
#line
在C#中,#line指令是用于改变源代码中的行号和文件名信息,而不是编译器生成的错误或警告消息中的行号和文件名信息。
#line指令可以用来模拟源代码中的行号和文件名的更改。它可以与#line default指令一起使用,将行号和文件名还原为默认值。
以下是示例代码:
#line 200 "specialFile"
Console.WriteLine("这行代码实际上位于特定文件的第200行");
#line default
Console.WriteLine("这行代码又恢复了默认的行号和文件名信息");
在上面的示例中,#line指令将当前行号设置为200,并将文件名设置为"specialFile"。后续的代码将按照这个新的行号和文件名进行处理。使用#line default指令可以将行号和文件名还原为默认值。
请注意,#line指令在实际开发中并不常用,通常用于某些特殊需求或代码生成工具。
对于错误和警告消息中的行号和文件名信息,它们由编译器自动确定,无法通过#line指令进行更改。
#pragma
#pragma 是 C/C++、C# 等语言中的一个预处理器指令,用于向编译器发出特定的命令或指示。它通常用于控制编译过程中的一些行为。
在 C# 中,#pragma 指令通常用于警告和错误的处理,以及条件编译。以下是 #pragma 指令的几个常见用法:
1、#pragma warning:用于控制编译器警告的行为。
- #pragma warning disable:禁用指定的警告。
- #pragma warning restore:恢复被禁用的指定警告。
- #pragma warning suppress:抑制指定的警告。
2、#pragma checksum:用于指定文件的检验和信息,这对于一些自动生成代码的工具很有用。
3、#pragma preprocessor:用于控制预处理器行为的指令,例如 #pragma preprocessor region 和 #pragma preprocessor endregion 用于定义和结束一个预处理器区域。
4、#pragma warning:用于启用、禁用或还原指定的编译器警告。
5、#pragma checksum:用于为文件指定校验和。
一个简单的示例是:
#pragma warning disable 169 // 取消编号 169 的警告(字段未使用的警告)
public class MyClass
{int neverUsedField; // 编译整个 MyClass 类时不会发出警告
}
#pragma warning restore 169 // 恢复编号 169 的警告
通过使用 #pragma 指令,可以在一定程度上控制编译过程中的警告和错误信息输出,以及一些特定的预处理器行为。
相关文章:

学习c#的第十五天
目录 C# 预处理器指令 C# 预处理器指令列表 #define 预处理器 条件指令 #warning 和 #error #region 和 #endregion #line #pragma C# 预处理器指令 预处理器指令指导编译器在实际编译开始之前对信息进行预处理。 所有的预处理器指令都是以 # 开始。且在一行上&#…...

TrafficGPT: Viewing, Processing, and Interacting with Traffic Foundation Models
这篇论文的标题是“TrafficGPT: Viewing, Processing, and Interacting with Traffic Foundation Models”,它探讨了将大型语言模型(如ChatGPT)与交通基础模型结合的潜力和应用。主要内容包括: 论文背景:论文指出&…...

SPASS-参数估计与假设检验
参数估计 点估计 点估计用样本统计量的值直接作为总体参数的估计值。如用样本均值直接作为总体均值的估计值,用样本方差直接作为总体方差的估计值等。 常用的点估计法 (1)矩估计法 (2)极大似然估计法 (3)稳健估计法 区间估计 因为点估计直接用样本估计值作为总体参数…...

虚拟博物馆和纪念馆全景漫游
VR全景漫游 今天不写代码,小郭我从网上找了许多虚拟展览的网站,主要分为博物馆和纪念馆,在这里总结分享给大家,大家在家中就能做到全景漫游中国的博物馆和纪念馆啦! 中国国家博物馆数字展厅 中国数字科技馆 博物馆…...

chrome 浏览器个别字体模糊不清
特别是在虚拟机里,有些字体看不清,但是有些就可以,设置办法: chrome://settings/fonts 这里明显可以看到有些字体就是模糊的状态: 把这种模糊的字体换掉即可解决一部分问题。 另外,经过观察,…...

Resolume Arena 7.15.0(VJ音视频软件)
Resolume Arena 7是一款专业的实时视觉效果软件,用于创造引人入胜的视频演出和灯光秀。它提供了丰富多样的功能和工具,可以将音频、视频和图像合成在一起,创造出令人惊叹的视觉效果。 Resolume Arena 7支持多种媒体格式,包括视频文…...

Java设计模式
1.设计模式概述 软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓 的、经过分类编目的、代码设计经验的总结。 1.创建型模式 用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。提供了单例、原型、工厂方法、抽象工…...

平均分(C++)
系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…...

.NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
2023年11月15日,对.net的开发圈是一个重大的日子,.net 8.0正式版发布。 圈内已经预热了有半个月有余,性能不断超越,开发体验越来越完美,早在.net 5.0的时候就各种吹风Aot编译,直到6.0 7.0使用仍然比较麻烦…...

Django之模型层
【1】常见的13中查询方法 例子语法:models.Userinfo.objects.filter().all() 查询方法解释all()查询所有数据first()那queryset中第一条数据last()那最后一条数据filter()带有过滤条件的查询,查询不到结果返回Noneget()带有guolv条件的查询,…...

京东数据挖掘(京东运营数据分析):2023年宠物行业数据分析报告
随着社会经济的发展,人均收入水平逐渐提高,使得宠物成为越来越多家庭的成员,宠物数量不断增长。伴随养宠人群的增多,宠物相关产业的发展也不断升温,宠物经济规模持续增长。 根据鲸参谋平台的数据显示,在宠物…...

五分钟k8s实战-Istio 网关
istio-03.png 在上一期 k8s-服务网格实战-配置 Mesh 中讲解了如何配置集群内的 Mesh 请求,Istio 同样也可以处理集群外部流量,也就是我们常见的网关。 其实和之前讲到的k8s入门到实战-使用Ingress Ingress 作用类似,都是将内部服务暴露出去的…...

vue-admin-template
修改登录接口 1.f12查看请求接口 模仿返回数据写接口 修改方式1 1.在env.devolopment修改 修改方式2 vue.config.js 改成本地接口地址 配置转发 后端创建相应接口,使用map返回相同的数据 修改前端请求路径 修改前端返回状态码 utils里面的request.js...

Go fsnotify简介
fsnotify是一个用Go编写的文件系统通知库。它提供了一种观察文件系统变化的机制,例如文件的创建、修改、删除、重命名和权限修改。它使用特定平台的事件通知API,例如Linux上的inotify,macOS上的FSEvents,以及Windows上的ReadDirec…...

分类预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多特征分类预测
分类预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多特征分类预测 目录 分类预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多特征分类预测分类效果基本描述程序设计参考资料 分类效果…...

【Python】Pandas(学习笔记)
一、Pandas概述 1、Pandas介绍 2008年WesMcKinney开发出的库,专门用于数据挖掘的开源python库 以Numpy为基础,借力Numpy模块在计算方面性能高的优势 基于matplotib,能够简便的画图 独特的数据结构 import pandas as pd2、Pandas优势 便…...

京联易捷科技与劳埃德私募基金管理有限公司达成合作协议签署
京联易捷科技与劳埃德私募基金管理有限公司今日宣布正式签署合作协议,双方在数字化进程、资产管理与投资以及中英金融合作方面将展开全面合作。 劳埃德(中国)私募基金管理有限公司是英国劳埃德私募基金管理有限公司的全资子公司,拥有丰富的跨境投资经验和卓越的募资能力。该集…...

Netty Review - 从BIO到NIO的进化推演
文章目录 BIODEMO 1DEMO 2小结论单线程BIO的缺陷BIO如何处理并发多线程BIO服务器的弊端 NIONIO要解决的问题模拟NIO方案一: (等待连接时和等待数据时不阻塞)方案二(缓存Socket,轮询数据是否准备好)方案二存…...

软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】
软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】 课本里章节里所有蓝色字体的思维导图...

M系列 Mac安装配置Homebrew
目录 首先,验证电脑是否安装了Homebrew 1、打开终端输入以下指令: 2、如图所示,该电脑没有安装Homebrew ,下面我们安装Homebrew 一、官网下载 (不建议) 1、我们打开官网:https://brew.sh/ …...

WebRTC简介及使用
文章目录 前言一、WebRTC 简介1、webrtc 是什么2、webrtc 可以做什么3、数据传输需要些什么4、SDP 协议5、STUN6、TURN7、ICE 二、WebRTC 整体框架三、WebRTC 功能模块1、视频相关①、视频采集---video_capture②、视频编解码---video_coding③、视频加密---video_engine_encry…...

网工内推 | 国企、上市公司售前,CISP/CISSP认证,最高18K*14薪
01 中电福富信息科技有限公司 招聘岗位:售前工程师(安全) 职责描述: 1、对行业、用户需求、竞争对手等方面提出分析报告,为公司市场方向、产品研发和软件开发提供建议; 2、负责项目售前跟踪、技术支持、需…...

阿里云99元VS腾讯云88元,双11云服务器价格战,谁胜谁负?
在2023年的双十一优惠活动中,阿里云推出了一系列令人惊喜的优惠活动,其中包括99元一年的超值云服务器。本文将带您了解这些优惠活动的具体内容,以及与竞争对手腾讯云的价格对比,助您轻松选择最适合的云服务器。 99元一年服务器优…...

1.jvm基本知识
目录 概述jvm虚拟机三问jvm是什么?java 和 jvm 的关系 为什么学jvm怎么学习为什么jvm调优?什么时候jvm调优调优调什么 结束 概述 相关文章在此总结如下: 文章地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址运行时数据区-字符串…...

前端---掌握WebAPI:DOM
文章目录 什么是DOM?使用DOM获取元素事件操作元素获取、修改元素内容获取、修改元素属性获取、修改表单元素属性:input获取、修改样式属性直接修改样式:行内样式通过修改class属性来修改样式 新增节点删除节点 什么是DOM? DOM&am…...

最优化基础(一)
最优化基础(一)1 最优化问题的数学模型 通俗地说,所谓最优化问题,就是求一个多元函数在某个给定集合上的极值. 几乎所有类型的最优化问题都可以用下面的数学模型来描述: m i n f ( x ) s . t . x ∈ Ω min\ f({x})\\ s.t. \ {…...

基于JavaWeb+SpringBoot+Vue医疗器械商城微信小程序系统的设计和实现
基于JavaWebSpringBootVue医疗器械商城微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 摘 要 目前医疗器械行业作为医药行业的一个分支,发展十分迅速。…...

java程序中为什么经常使用tomcat
该疑问的产生场景: 原来接触的ssm项目需要在项目配置中设置tomcat,至于为什么要设置tomcat不清楚,只了解需要配置tomcat后项目才能启动。接触的springboot在项目配置中不需要配置tomcat,原因是springboot框架内置了tomcat…...

大带宽服务器需要选择哪些节点
选择大带宽服务器节点需要考虑以下几个因素: 地理位置:选择距离用户较近的节点,可以降低延迟,提高响应速度。 网络质量:大带宽服务器节点应该有良好的网络质量,稳定可靠,能够提供高速的网络传输…...

CSS 属性学习笔记(入门)
1. 选择器 CSS选择器用于选择要样式化的HTML元素。以下是一些常见的选择器: 元素选择器 p {color: blue; }描述: 选择所有 <p> 元素,并将文本颜色设置为蓝色。 类选择器 .highlight {background-color: yellow; }描述:…...