上一篇:
C#,入门教程(30)——扎好程序的笼子,错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386
Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计。
编译程序的时候会发现,程序可以编译成 bebug 和 release 模式,分别保存于相应的文件夹。
编写工业软件,一定有下面两个必然的需求。
一、程序的调试版本与正式版本
有些代码,仅用于调试(debug)版本,比如一些中间结果、调试信息的输出;
在正式(release )版本中,这些代码不应该被编译。
仅仅出现于 调试版本的代码,可以用户 #if DEBUG #endif 包括起来。
#if DEBUG
Log.Write("DEBUG LINE 001");
#endif
同理,仅仅出现于正式版本的代码:
#if RELEASE
File.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));
}
#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);
}
注意,这里并没有删除就的代码,而是用一个未定义名称的预处理语句包括起来了。
第一个算法的代码,不会被编译。
继续改进:
#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