预处理器指令 - 设计实践






4.40/5 (3投票s)
什么是预处理器指令?预处理器指令是专门为编译器设计的代码片段。这使得程序员
什么是预处理器指令?
预处理器指令是专门为编译器设计的代码片段。这使得程序员可以在编译时专注于特定环境的编译,而不是在运行时。
如何识别预处理器指令?
C#
在 C# 中,预处理器指令可以通过在单词或语句前加上井号 (#) 来标识。 C# 预处理器指令 [仅在本文中涵盖粗体指令]
- #if
- #else
- #elif
- #endif
- #define
- #undef
- #warning
- #error
- #line
- #region
- #endregion
- #pragma
- #pragma warning
- #pragma checksum
VB.NET
在 VB 中,预处理器指令可以通过在单词或语句前加上井号 (#) 来标识。 VB.NET 预处理器指令 [仅在本文中涵盖粗体指令]
使用预处理器指令有什么优势?
根据不同的预处理器指令,使用指令而不是代码中的条件语句有很多优点。
C# - 条件指令
将 #define、#if、#else 和 #endif 条件语句配对,可以设置变量以针对您的测试与生产环境。
VB.NET - 条件指令
将 #Const、#If...Then、#else 和 #End If 条件语句配对,可以设置变量以针对您的测试与生产环境。
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 指令,您可以勾勒出代码的部分,并在描述性代码区域中对其进行逻辑组织。
VB.NET - 组织指令
使用 #Region 和 #End Region 指令,您可以勾勒出代码的部分,并在描述性代码区域中对其进行逻辑组织。
摘要
希望您能看到 #regions(在 VB.NET 中为 #Regions)的实用性。您不仅可以标记代码部分,而且在 Visual Studio IDE 中,这些标签允许您折叠指令中包含的代码,以使您的代码更小,更易于阅读、维护和管理。
摘要
希望在本文的过程中,您已经看到使用预处理器指令的一些好处。请记住:预处理器指令在**编译**时进行评估,消除了代码中条件语句的瓶颈,用于在测试和生产代码之间切换,从而释放了您的实际应用程序的资源。