什么是#define?

时间:2014-04-02 06:56:09

标签: c#

必须将它们放在.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
    }
}

两者都是最重要的,所以为什么还有这些ifs?

有人可以告诉我哪些定义有用吗?

对不起,如果这是重复的,请在评论中告诉我,如果有的话,我会删除这个问题。

3 个答案:

答案 0 :(得分:6)

重点是 condiional compialtion

喜欢:

#ifdef x64     
.... 
#else
....
#endif


#ifdef KIOSK
   fullScreen  =true; 
#else
   fullScreen  =false;
#endif 

您为编译时创建条件,因此您的二进制文件不会在运行时更改,但是 将符合您正在编译的目标环境的确切要求。它可以是您想要的任何内容,由您决定#define的名称和语义

修改即可。

示例:您有一个程序可以访问低级别的Windows API,您必须支持 x86和x64版本。在这种情况下,您可能希望在32位的程序的二进制文件(因此在编译之后),没有任何64位函数的证据。所以你可以写

#ifdef x64 //conditional compilation symbol defined by YOU 
   DriverInfo GetDriverInfo64(..) {...} //64bit 
#else
   DriverInfo GetDriverInfo(..) {...}   //32bit
#endif

答案 1 :(得分:0)

您不需要使用#define定义这些符号,您可以在项目设置或编译器参数中全局设置它们。但有时,当您可以为单个文件更改符号(set / unset)的值时,它会派上用场,以进行测试或调试。那么#define将成为你的朋友:)

答案 2 :(得分:0)

您应该删除顶部的两个#define语句。如果使用Visual Studio进行编译,则可以选择是否启用调试。如果启用debug,编译器将知道代码中包含哪些部分以及遗漏哪些部分。

假设您启用了DEBUG,您的代码将如下所示:

using System;
public class MyClass 
{
    static void Main() 
    {
        Console.WriteLine("DEBUG is defined");
    }
}