首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >#定义的意义是什么?

#定义的意义是什么?
EN

Stack Overflow用户
提问于 2014-04-02 06:56:09
回答 3查看 173关注 0票数 1

它们必须放在.cs文件的顶部。您不能在运行时动态地创建这些人,也不能给他们一个值或更改他们的值,因为根本没有值,所以#define关键字的意义是什么?

下面是一个示例:

代码语言:javascript
运行
复制
#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
    }
}

两者都是在顶部定义的,那么为什么要有所有这些if呢?

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

对不起,如果这是重复的,请在评论中告诉我,如果是的话,我将删除这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-02 07:00:18

这一点是条件性的。

比如:

代码语言:javascript
运行
复制
#ifdef x64     
.... 
#else
....
#endif


#ifdef KIOSK
   fullScreen  =true; 
#else
   fullScreen  =false;
#endif 

您为编译时创建了条件,这样您的二进制文件就不会在运行时更改,但它将满足您正在编译for.It的目标环境的确切要求,这可能是您想要的,这取决于您决定您的#define的名称和语义。

编辑

示例:您有一个访问低级别windows的程序,您必须支持x86和x64版本。在这种情况下,您可能希望在32位程序的二进制文件(编译后)中,没有任何64位函数的证据。所以你可以写

代码语言:javascript
运行
复制
#ifdef x64 //conditional compilation symbol defined by YOU 
   DriverInfo GetDriverInfo64(..) {...} //64bit 
#else
   DriverInfo GetDriverInfo(..) {...}   //32bit
#endif
票数 6
EN

Stack Overflow用户

发布于 2014-04-02 07:08:44

您不需要使用#define定义这些符号,您可以在项目设置或每个编译器参数中全局设置它们。但有时,当您可以为单个文件更改符号(set/unset)的值时,为了测试或调试目的,它会派上用场。那么#define将是你的朋友:)

票数 0
EN

Stack Overflow用户

发布于 2014-04-02 07:12:21

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

假设您打开了调试,您的代码将如下所示:

代码语言:javascript
运行
复制
using System;
public class MyClass 
{
    static void Main() 
    {
        Console.WriteLine("DEBUG is defined");
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22803693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档