please define #define

本文关键字:#define define please | 更新日期: 2023-09-27 18:05:12

有人能给我一些例子如何使用#define在c#?

#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
    }
}

please define #define

"Preprocessor"意味着它生成的结果在编译器进行主处理之前完成。它的主要用途之一是在编译文件之前包含或排除文件中的代码。

在您看到的示例中,预处理器将首先#define这两个符号,然后计算不同的#if/#elif语句,以确定哪些代码实际上应该在文件中结束。在本例中,这两个符号都被定义了,因此只输出表示这样的那一行,并且只编译那一行代码。如果要对结果进行反编译,则只会看到一条 Console.WriteLine()语句,而不会看到其他语句。

Quote:

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

在c#语言中,#define行被认为是预处理指令。对于已定义的符号有一些无效的语法;你不能使用数字值作为定义的标识符,例如。

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

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

否则,如果没有定义DEBUG,但定义了MYTEST,那么它将显示所示的消息。

如果两者都定义了,那么它将显示所显示的消息。

底线:

定义的要点是有选择地对程序应用编译选项,以给它一个不同的程序流。

阅读预处理器指令。我写c++,所以我用的方式和你不完全一样,但基本上这些是你在执行语句之前定义的东西。通常它们有两种用法。1)。在第一个函数运行之前定义一些东西,例如,你可以在主函数中将pie作为变量调用之前定义pie的数值。2)。

告诉程序加载什么才能正确执行程序。

#define是c#中一个特殊的"before compile"指令(它派生自旧的CPP指令),它定义了一个预处理器符号。

#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符号通常是自动设置的,这取决于是否为调试而构建项目,其他符号可以设置为项目本身的一部分。

快乐编码。

预处理器指令将在编译时计算。#define指令是用来声明一个可以在编译时求值的变量。

   #if (DEBUG && !MYTEST)
       Console.WriteLine("DEBUG is defined");
   #endif
上面的

行不会被编译,因为DEBUG和MYTEST是在文件开头定义的。