#if defined的介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#if defined的介绍相关的知识,希望对你有一定的参考价值。

参考技术A

#if defined(symbol) 属于宏定义的一部分

在 C# 的 #if 中使用 #define 预处理器指令是不是有效

【中文标题】在 C# 的 #if 中使用 #define 预处理器指令是不是有效【英文标题】:Is it valid to use the #define preprocessor directive inside an #if in C#在 C# 的 #if 中使用 #define 预处理器指令是否有效 【发布时间】:2016-10-04 21:42:20 【问题描述】:

我可以在 C# 中的 #if#endif 中使用 #define preprocessor directive 吗?

例如

#if !SILVERLIGHT && !__ANDROID__ && !__IOS__ 
#define SupportsMutex
#endif

看起来它有效,但我需要确定。有很多关于这方面的文章,但大多数时候是在 C 而不是 C# 的上下文中 - C# 中的预处理器指令 a 更加有限。

Visual Studio 的突出显示似乎支持它,但根据语言/编译器规范,这真的有效吗?

This MSDN page 给出以下注释:

#define 指令不能像在 C 和 C++ 中那样用于声明常量值。 C# 中的常量最好定义为类或结构的静态成员。如果您有多个此类常量,请考虑创建一个单独的“常量”类来保存它们。

我需要这个,因为多次使用#if !SILVERLIGHT && !__ANDROID__ && !__IOS__ 很难管理。

当然我们也可以将SupportsMutex添加到项目的“条件编译符号”中,但这更难管理,也更不透明。

【问题讨论】:

【参考方案1】:

是的。查看C# specification,此用法的特定示例在2.5.3 声明指令部分中给出并被视为有效:

#define Enterprise
#if Professional || Enterprise  
   #define Advanced
#endif 
namespace Megacorp.Data 

    #if Advanced    
    class PivotTable ...  
    #endif 

【讨论】:

谢谢!很快就找到了!

以上是关于#if defined的介绍的主要内容,如果未能解决你的问题,请参考以下文章

C#-#define条件编译

#if,#endif,!defined的意义和用法

#if 在 #define?

define定义的函数在if条件为假也能继续执行吗?

关于#if(defined(__WIN32__)的问题

C#-C#-#define条件编译