#define 有什么意义

本文关键字:什么 #define | 更新日期: 2023-09-27 17:56:10

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

两者都在上面定义,那么为什么要拥有所有这些如果呢?

有人可以告诉我定义有用的场景吗?

抱歉,如果这是重复的,请在评论中告诉我,如果是这样,我会删除这个问题。

#define 有什么意义

重点是条件比较

喜欢:

#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
不需要

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

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

假设你打开了 DEBUG,你的代码将如下所示:

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