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

上一篇:

C#,入门教程(30)------扎好程序的笼子,错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386

Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计。

编译程序的时候会发现,程序可以编译成 bebug 和 release 模式,分别保存于相应的文件夹。

编写工业软件,一定有下面两个必然的需求。

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

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

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

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

cs 复制代码
#if DEBUG

    Log.Write("DEBUG LINE 001");

#endif

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

cs 复制代码
#if RELEASE

    File.Write("result.dat", dataBuffer, Encoding.UTF8);

#endif

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

工业软件的每一"段"代码,都属于"千锤百炼",会有多个版本。

保存不同的版本,可以通过版本控制、文件控制等等很多方式。

但其中最有效与直接,程序员乐于接受的却是用"预处理指令"。

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

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

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

cs 复制代码
#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

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);
}

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

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

继续改进:

cs 复制代码
#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);
}
#endif

public 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)------程序运行时的调试技巧与逻辑错误探针技术与源代码https://blog.csdn.net/beijinghorn/article/details/126014885

相关推荐
wflynn13 小时前
GitHub 今日推荐|SCSKiller:游戏着色器预编译消除卡顿
开源·c#·github·nvidia·amd·directx12
疯狂的维修1 天前
关于用C#写电机起保停控制
开发语言·c#
用户788477316341 天前
门店核销闭环:小程序扫码 + .NET 幂等接口 + WPF 看板,一天能跑通
微信小程序·c#
samble1 天前
从零搭建灌装监控系统(十三):报警系统设计,生命周期与通知
c#·wpf·mvvm·modbus·工业控制
miofly2 天前
GitHub 今日推荐|SCSKiller:游戏着色器预编译消除卡顿
开源·c#·github
欣欣之王来了2 天前
5G网络基础:5G的核心特性,eMBB、uRLLC、mMTC的应用场景
网络·学习·计算机网络·安全·教程
周杰伦fans2 天前
8GB显存下模型量化实战指南
人工智能·后端·c#
samble2 天前
从零搭建灌装监控系统(十二):配置系统,原子写入与容错
c#·wpf·mvvm·modbus·工业控制
流形填表2 天前
题库去重实战:基于题干指纹的重复题清理
开发语言·c#
开开心心就好3 天前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频