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

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇:

 C#,入门教程(30)——扎好程序的笼子,错误处理 try catchicon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124182386

Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计
编译程序的时候会发现,程序可以编译成 bebug 和 release 模式,分别保存于相应的文件夹。
编写工业软件,一定有下面两个必然的需求。

一、程序的调试版本与正式版本

有些代码,仅用于调试(debug)版本,比如一些中间结果、调试信息的输出;

在正式(release )版本中,这些代码不应该被编译。

仅仅出现于 调试版本的代码,可以用户 #if DEBUG #endif 包括起来。

#if DEBUGLog.Write("DEBUG LINE 001");#endif

同理,仅仅出现于正式版本的代码:

#if RELEASEFile.Write("result.dat", dataBuffer, Encoding.UTF8);#endif

二、不同版本程序的简约管理

工业软件的每一“段”代码,都属于“千锤百炼”,会有多个版本。
保存不同的版本,可以通过版本控制、文件控制等等很多方式。
但其中最有效与直接,程序员乐于接受的却是用“预处理指令”。

计算两点之间的距离,第一个版本:

public int Distance(int ax, int ay, int bx, int by)
{return (int)Math.Sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
}

这个版本,显然有问题,可以改进:

#if _VERSION_01_
public int Distance(int ax, int ay, int bx, int by)
{return (int)Math.Sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
}
#endifpublic int Distance(int ax, int ay, int bx, int by)
{int dx = ax - bx;int dy = ay - by;return (int)Math.Sqrt(dx * dx + dy * dy);
}

注意,这里并没有删除就的代码,而是用一个未定义名称的预处理语句包括起来了。

第一个算法的代码,不会被编译。

继续改进:

#if _VERSION_01_
public int Distance(int ax, int ay, int bx, int by)
{return (int)Math.Sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
}
#endif#if _VERSION_02_
public int Distance(int ax, int ay, int bx, int by)
{int dx = ax - bx;int dy = ay - by;return (int)Math.Sqrt(dx * dx + dy * dy);
}
#endifpublic int Distance(int ax, int ay, int bx, int by)
{int dx = ax - bx;int dy = ay - by;int dd = dx * dx + dy * dy;if(dd == 0) return 0;return (int)Math.Sqrt(dd);
}

--------------------------------------------------------
POWER BY TRUFFER.CN

下一篇:

C#,入门教程(32)——程序运行时的调试技巧与逻辑错误探针技术与源代码icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/126014885

相关文章:

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇: C#,入门教程(30)——扎好程序的笼子,错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386 Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计。 编译程序的时候会发现&am…...

Java SE:面向对象(下)

1. static关键字 静态区的特点:静态区里面的每一样东西都是唯一有且仅有一个的,如此时str1 "abc"即此时静态区里面已经创建了字符串abc并将abc地址赋给str1,后面在进行赋值也不会在静态区开辟一串新的"abc" 1.1 static修…...

搭建开源数据库中间件MyCat2-配置mysql数据库双主双从

mycat2官网:MyCat2 前言:mycat2下载地址无法访问,不知道是不是被DNS污染了,还是需要搭梯子访问,所以我只能找到1.21的版本进行安装。搭建mycat2的前提是搭建数据库主从复制。 架构:双主双从 配置&#xf…...

Oracle 19c rac集群管理 -------- 集群启停操作过程

Oracle rac集群启停操作过程 首先查看数据库的集群的db_unique_name SQL> show parameter nameNAME TYPE VALUE ------------------------------------ ----------- --------------------------- cdb_cluster_name …...

【Java】HttpServlet类中前后端交互三种方式(query string、form表单、JSON字符串)

在前后端的交互中,前端通过以下三种方式来与后端进行交互🌟 ✅query string ✅form表单 ✅JSON字符串 下面我们将书写这三种方式的后端代码并进行讲解 1、Query String QueryString即在url中写入键值对,一般用doGet方法进行交互 代码如下 …...

【深蓝学院】移动机器人运动规划--第2章 基于搜索的路径规划--笔记

0. Outline 1. Graph Search Basis Configuration Space等概念 机器人配置: 指机器人位置和所有点的表示。 DOF: 指用于表示机器人配置所需的最小的实数坐标的数量n。 C-space: 包含机器人n维所有配置的空间。 在C-space中机器人的pose是一个点。 机器人在C-space中被表示为一…...

安装向量数据库milvus可视化工具attu

使用docker安装的命令和简单就一个命令: docker run -p 8000:3000 -e MILVUS_URL{milvus server IP}:19530 zilliz/attu:v2.3.5sunyuhuasunyuhua-HKF-WXX:~/dockercom/milvus$ docker run -p 8000:3000 -e MILVUS_URL127.0.0.1:19530 zilliz/attu:latest yarn run…...

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟,引脚,将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…...

jdk17新特性——文本块(即多行的字符串)增强

目录 一、文本块(即多行的字符串)概述二、文本块(即多行的字符串)示例2.1、jdk17之前 多行字符串处理方式2.2、jdk17及以后版本 多行字符串处理方式2.3、注意事项 三、文本块(即多行的字符串)转义字符示例3.1、jdk17及以后版本 多行字符串的转义字符处理方式示例一3.2、jdk17及…...

阿里云ECS使用docker搭建mysql服务

目录 1.确保正确安装好docker 2.安装mysql镜像 3.创建容器(设置端口映射、目录映射) 1.确保正确安装好docker 安装教程: 阿里云ECS(CentOS镜像)安装docker-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135686614?spm10…...

Windows给docker设置阿里源

windows环境搭建专栏🔗点击跳转 Windows系统的docker设置阿里源 文章目录 Windows系统的docker设置阿里源1.获得镜像加速器2.配置docker 由于我们生活在中国大陆,所以外网的访问总是那么慢又困难,用docker拉取几兆的小镜象还能忍受&#xff…...

安裝火狐和穀歌流覽器插件FoxyProxy管理海外動態IP代理

代理生態系統擁有大量有用的實用程式,使海外代理IP代理設置的使用變得簡單起來。其中一種類型叫做代理管理工具,像FoxyProxy就是該工具集比較受歡迎的。 本文將全面解析FoxyProxy擴展的功能和特性、Foxyproxy怎麼下載、以及如何在穀歌流覽器和火狐流覽器…...

C++重新入门-函数重载

1.函数重载的定义 C函数重载(Function Overloading)是指在同一作用域内,可以定义多个函数,它们具有相同的名称但参数列表不同的特性。通过函数重载,可以使用相同的函数名来实现不同的操作,提高了代码的可读…...

niushop靶场漏洞查找-文件上传漏洞等(超详细)

实战漏洞-niushop 一.端口扫描 http://www.xxx.com/index.php?s/admin/login 这里查询到后面的url有且仅有一个,目测估计是后台 访问url 发现确实是后台 二、找漏洞 Sql注入漏洞1: 点击进去 修改id www.xxx.com/index.php?s/goods/goodslist&…...

Bit Extraction and Bootstrapping for BGV/BFV

参考文献: [GHS12] Gentry C, Halevi S, Smart N P. Better bootstrapping in fully homomorphic encryption[C]//International Workshop on Public Key Cryptography. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 1-16.[AP13] Alperin-Sheriff J, Pe…...

七八分钟快速用k8s部署springboot前后端分离项目

前置依赖 k8s集群,如果没有安装,请先安装 kubectl ,客户端部署需要依赖 应用镜像构建 应用镜像构建不用自己去执行,相关镜像已经推送到docker hub 仓库,如果要了解过程和细节,可以看一下,否…...

中移(苏州)软件技术有限公司面试问题与解答(2)—— Linux内核内存初始化的完整流程1

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(1)—— 可信计算国密标准 本文参考以下文章: 启动期间的内存管理之初始化过程概述----Linux内存管理(九) Linux初始化 特此致谢! 本…...

蓝桥杯、编程考级、NOC、全国青少年信息素养大赛—scratch列表考点

1、小小情报员(202309scratch四级24题) 1.准备工作 (1)选择背景 Colorful City; (2)保留角色小猫,选择角色Ballerina。 2.功能实现 (1)角色小猫初始位置…...

1.23 力扣图论

841. 钥匙和房间 有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。 当你进入一个房间,你可能会在里面找到一套不…...

Vue学习笔记9--vuex(专门在Vue中实现集中式状态(数据)管理的一个Vue插件)

一、vuex是什么? 概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

ESP32读取DHT11温湿度数据

芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...