请定义#define

时间:2011-08-10 15:06:26

标签: c#

有人可以给我一些如何在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
    }
}

5 个答案:

答案 0 :(得分:6)

“预处理器”表示它生成的结果是在编译器执行的主处理之前完成的。其主要用途之一是在文件编译之前包含或排除代码。

在您看到的示例中,预处理器将首先#define这两个符号,然后评估不同的#if/#elif语句,以确定哪些代码实际应该在文件中结束。在这种情况下,两个符号都被定义,因此只输出这样的行,并且只有该代码才会被编译。如果您要对结果进行反编译,那么您只能看到一个 Console.WriteLine()语句,而没有其他内容。

答案 1 :(得分:5)

Quote

  

#define和#undef行应出现在源的最顶部   文本文件,他们可以调整整个文件的编译选项。

  

在C#语言中,#define字符串被视为预处理   指示。定义的符号有一些无效的语法;您   例如,不能使用数字值作为定义的标识符。

  

#undef指令确保在文件中的文本点之后,   未定义指定的标识符。

在您的示例中,如果定义了DEBUG(只要定义了它是什么并不重要)并且未定义MYTEST,那么它将显示所显示的消息。

否则,如果未定义DEBUG但定义了MYTEST,则会显示所显示的消息。

如果两者都已定义,则会显示所显示的信息。

<强>底线:

定义的要点是有选择地将编译选项应用于程序,以便为其提供不同的程序流程。它是C和C ++的遗留物。

答案 2 :(得分:1)

#define是C#中的一个特殊的“before compile”指令(它来自旧的CPP directives),它定义了一个预处理符号。

#if结合,根据定义的符号,各种代码将被有效地注释掉。因此,非选定路径中的代码甚至不需要处于可编译状态!

在上面的示例中,符号DEBUGMYTEST在顶部手动定义(使用#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。