它们必须放在.cs文件的顶部。您不能在运行时动态地创建这些人,也不能给他们一个值或更改他们的值,因为根本没有值,所以#define关键字的意义是什么?
下面是一个示例:
#define DEBUG
#define MYTEST
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !MYTEST)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
        Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
        Console.WriteLine("DEBUG and MYTEST are defined");
#else
        Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
    }
}两者都是在顶部定义的,那么为什么要有所有这些if呢?
有人能告诉我定义有用的场景吗?
对不起,如果这是重复的,请在评论中告诉我,如果是的话,我将删除这个问题。
发布于 2014-04-02 07:00:18
这一点是条件性的。
比如:
#ifdef x64     
.... 
#else
....
#endif
#ifdef KIOSK
   fullScreen  =true; 
#else
   fullScreen  =false;
#endif 您为编译时创建了条件,这样您的二进制文件就不会在运行时更改,但它将满足您正在编译for.It的目标环境的确切要求,这可能是您想要的,这取决于您决定您的#define的名称和语义。
编辑。
示例:您有一个访问低级别windows的程序,您必须支持x86和x64版本。在这种情况下,您可能希望在32位程序的二进制文件(编译后)中,没有任何64位函数的证据。所以你可以写
#ifdef x64 //conditional compilation symbol defined by YOU 
   DriverInfo GetDriverInfo64(..) {...} //64bit 
#else
   DriverInfo GetDriverInfo(..) {...}   //32bit
#endif发布于 2014-04-02 07:08:44
您不需要使用#define定义这些符号,您可以在项目设置或每个编译器参数中全局设置它们。但有时,当您可以为单个文件更改符号(set/unset)的值时,为了测试或调试目的,它会派上用场。那么#define将是你的朋友:)
发布于 2014-04-02 07:12:21
您应该删除顶部的两个#define语句。如果使用Visual进行编译,则可以选择打开或不打开调试。如果打开调试,编译器将知道代码中包含哪些部分,以及省略了哪些部分。
假设您打开了调试,您的代码将如下所示:
using System;
public class MyClass 
{
    static void Main() 
    {
        Console.WriteLine("DEBUG is defined");
    }
}https://stackoverflow.com/questions/22803693
复制相似问题