有人可以给我一些如何在c#中使用#define的例子吗?
#define //preprocessor directive
它的目的是什么?这是微软的例子,我仍然没有得到:
// preprocessor_if.cs
#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
}
}
答案 0 :(得分:6)
“预处理器”表示它生成的结果是在编译器执行的主处理之前完成的。其主要用途之一是在文件编译之前包含或排除代码。
在您看到的示例中,预处理器将首先#define
这两个符号,然后评估不同的#if/#elif
语句,以确定哪些代码实际应该在文件中结束。在这种情况下,两个符号都被定义,因此只输出这样的行,并且只有该代码才会被编译。如果您要对结果进行反编译,那么您只能看到一个 Console.WriteLine()
语句,而没有其他内容。
答案 1 :(得分:5)
#define和#undef行应出现在源的最顶部 文本文件,他们可以调整整个文件的编译选项。
和
在C#语言中,#define字符串被视为预处理 指示。定义的符号有一些无效的语法;您 例如,不能使用数字值作为定义的标识符。
和
#undef指令确保在文件中的文本点之后, 未定义指定的标识符。
在您的示例中,如果定义了DEBUG
(只要定义了它是什么并不重要)并且未定义MYTEST,那么它将显示所显示的消息。
否则,如果未定义DEBUG
但定义了MYTEST,则会显示所显示的消息。
如果两者都已定义,则会显示所显示的信息。
<强>底线:强>
定义的要点是有选择地将编译选项应用于程序,以便为其提供不同的程序流程。它是C和C ++的遗留物。
答案 2 :(得分:1)
#define
是C#中的一个特殊的“before compile”指令(它来自旧的CPP directives),它定义了一个预处理符号。
与#if
结合,根据定义的符号,各种代码将被有效地注释掉。因此,非选定路径中的代码甚至不需要处于可编译状态!
在上面的示例中,符号DEBUG
和MYTEST
在顶部手动定义(使用#define
),因此代码“看起来像”以下内容开始时“正常的“编译阶段:(在C#中,这种预处理是编译器的一部分,而不是首先运行的单独工具。)
// preprocessor_if.cs
//#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
}
}
DEBUG
符号通常是自动设置的,具体取决于是否正在构建项目以进行调试,而其他符号可以设置为项目本身的一部分。
快乐的编码。
答案 3 :(得分:1)
了解预处理器指令。我编写c ++所以我不会以与你完全相同的方式使用它,但基本上这些是你在执行语句之前定义的东西。通常它们可以使用2种方式。 1.)在第一个函数运行之前定义一些东西,即在将pie调用为main函数中的变量之前,可以定义pie的数值。 2.)告诉程序要加载什么才能正确执行程序。
答案 4 :(得分:0)
预处理程序指令将在编译时进行评估。 #define指令用于声明可在编译时计算的变量。
#if (DEBUG && !MYTEST)
Console.WriteLine("DEBUG is defined");
#endif
上面的行不会被编译,因为在文件的开头定义了DEBUG和MYTEST。