必须将它们放在.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?
有人可以告诉我哪些定义有用吗?
对不起,如果这是重复的,请在评论中告诉我,如果有的话,我会删除这个问题。
答案 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");
}
}