65.9K
CodeProject 正在变化。 阅读更多。
Home

预处理器指令 - 设计实践

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.40/5 (3投票s)

2008年12月19日

CPOL

4分钟阅读

viewsIcon

19295

什么是预处理器指令?预处理器指令是专门为编译器设计的代码片段。这使得程序员

什么是预处理器指令?

预处理器指令是专门为编译器设计的代码片段。这使得程序员可以在编译时专注于特定环境的编译,而不是在运行时。

如何识别预处理器指令?

C#

在 C# 中,预处理器指令可以通过在单词或语句前加上井号 (#) 来标识。 C# 预处理器指令 [仅在本文中涵盖粗体指令]

VB.NET

在 VB 中,预处理器指令可以通过在单词或语句前加上井号 (#) 来标识。 VB.NET 预处理器指令 [仅在本文中涵盖粗体指令]

使用预处理器指令有什么优势?

根据不同的预处理器指令,使用指令而不是代码中的条件语句有很多优点。

C# - 条件指令

将 #define、#if、#else 和 #endif 条件语句配对,可以设置变量以针对您的测试与生产环境。

 Figure 1 [C#]

VB.NET - 条件指令

将 #Const、#If...Then、#else 和 #End If 条件语句配对,可以设置变量以针对您的测试与生产环境。

Figure 1 [VB]

1.a

这是声明预处理器指令的方式。我定义了一个 TEST 变量,以便能够在我的测试环境和生产环境之间切换。

1.b

使用条件指令,我检查是否定义了 TEST,看到它目前已被定义,常数 _toEmail 被设置为 'test@company.com'。但是,如果我注释掉 #define TEST,那么 _toEmail 常数将被设置为 'user@ClientCompany.com'

1.c

您还可以使用非 (!) 比较运算符来声明仅在未定义 TEST 时运行代码。您会看到,我将预处理器指令包裹在我的 try catch 块周围,通过这种方式,我将能够了解将抛出哪些类型的错误,而没有 try catch。这将允许我捕获适当的异常,如 1.e 所示

1.d

此场景只是为了表明成员变量也可以通过预处理器条件进行更改。如果将条件与您在 outlook 中设置的用于测试电子邮件过滤的规则相匹配,这将非常方便。

1.e

现在我已经运行了一些测试并看到了我的程序抛出的异常,我现在可以捕获适当的异常并处理它们。一旦您对需要处理的异常有了很好的了解,就可以删除预处理器条件,并且可以测试 try catch 块以显示适当的对用户友好的消息。

摘要

希望现在您已经看到了一个例子,您可以理解使用预处理器指令的一些优点。如果您在 1.b 中编写了代码内切换,您将不得不声明一个额外的布尔值,并且条件语句将占用宝贵的运行时处理时间,以及(不必要的)变量的内存。在使用 Visual Studio 中的预处理指令时,您会注意到有一个视觉提示,表明当前哪个变量处于活动状态。这使得您的应用程序更具可读性,对于您和将来处理您代码的开发人员而言,以及节省您无数次阅读代码以了解哪个版本的代码正在运行。

C# - 组织指令

使用 #region 和 #endregion 指令,您可以勾勒出代码的部分,并在描述性代码区域中对其进行逻辑组织。

Figure 2 [C#]

VB.NET - 组织指令

使用 #Region 和 #End Region 指令,您可以勾勒出代码的部分,并在描述性代码区域中对其进行逻辑组织。

Figure 2 [VB.NET]

摘要

希望您能看到 #regions(在 VB.NET 中为 #Regions)的实用性。您不仅可以标记代码部分,而且在 Visual Studio IDE 中,这些标签允许您折叠指令中包含的代码,以使您的代码更小,更易于阅读、维护和管理。

摘要

希望在本文的过程中,您已经看到使用预处理器指令的一些好处。请记住:预处理器指令在**编译**时进行评估,消除了代码中条件语句的瓶颈,用于在测试和生产代码之间切换,从而释放了您的实际应用程序的资源。

© . All rights reserved.