//#define DEBUG
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 控制台
{
    class Program
    {
        static void Main(string[] args)
        {
            #if DEBUG
            Console.Write("debug");
            #endif
            Console.ReadKey();
        }
    }
}我把#define DEBUG注释掉了,为什么还是输出了呢?不是没有定义吗?

解决方案 »

  1.   

    你在项目->属性->生成中会发现配置为Debug,因此自动识别DEBUG,你试试使用#define Dbg 就知道了。
      

  2.   

    查看项目文件中的 DefineConstants 除了用代码设置,也可以在项目文件中设置的。像你问的 DEBUG,在Debug模式默认就会在项目文件中设置项目文件上右键 Properties -> Build -> 勾选 Define DEBUG constant 
      

  3.   

    看了楼上2位朋友的回复,才知道还有默认的 DEBUG模式
    编译器为什么要搞个 DEBUG啊,不就是一个符号吗?自己想怎么写这个符号就怎么写吧
    搞得就像 DEBUG是一个关键字一样
      

  4.   

    这就是编程的Rule了,得遵循,就跟交流的语言一样,总得有语言的风俗习惯吧。
      

  5.   


    在Visual Studio里你是可以选择是Debug模式还是Release模式的。
    如果你选的是Release模式,DEBUG就没有被定义了。
      

  6.   

    这个是vs200x从VC继承下来的特性,从VC开始程序就分调试版本和发布版本,这个做法满足绝大部分开发的要求,所以系统会在调试版本自动定义DEBUG这个符号,都成为一个标准了,DEBUG其实是一个习惯性的标准,用起来也方便,vs帮你定义好了你自己就不用定义了,
      

  7.   

    #define 的用途很广,一般的初级程序员很少用它,但诸如调试、版本管理等都会常用,比如使用
    #if AdvanceVersion
     
    #else #endif
     可以分别定义两个版本的不同内容,并保留相同内容,以免相同部分代码变化后变更两个版本的代码。在调试时临时使用的东西可以在发布时去掉#define,就不会影响正式代码,很方便吧.
      

  8.   

    大家的意思是不是说:
    DEBUG是VS预定义的符号那RESEASE呢?这个符号是不是VS预定义的?经常看到这个符号
      

  9.   


    大家的意思不是说这个是VS预定义的。
    这个是可以配置的。
    上面已经有人说过 “你在项目->属性->生成中会发现配置为Debug”。
    你有没有打开看看。那里边是没有Release的配置的。另外,你以前是不是写C语言的。VS是个高级的IDE。
    集成了很多东西。建议你多鼓捣鼓捣。然后再提问。
      

  10.   

    Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
    上面这段话,简直不懂,DEBUG和Release不就是两个符号吗?说那么一通,有这么复杂吗
      

  11.   

    的确不仅仅只是定义两个符号。
    Debug的版本生成的程序里边包含着调试的信息,所以同样的程序,如果你比较两个版本,你会发现Debug版本要比Release的版本大。另外Release版本生成的程序要对代码进行优化,而Debug版本不进行优化。
    举个简单的例子:string message = "hello";
    Console.WriteLine(message);在Release版本中会优化为
    Console.WriteLine("hello");
      

  12.   

    Release版本、Debug版本选择?
    如何选择,是在VS的设置里吗?
    Release也是VS的预定义符号吗?
      

  13.   

    这个问题是这样的。编译器在编译代码的时候,有很多很多设定是可以选择的,比如说定义的符号,比如说优化选项,链接选项。有很多很多。那么“debug”和“release”是2个Visual Studio内置的编译设定方案,每个方案对应一组参数的组合。通常的说法是,“Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。”。这个有点类似什么呢?不知道你有没有用过Windows的桌面主题功能。Windows的桌面颜色、按钮颜色、边框、鼠标设置、桌面背景、字体、声音等等都是可以定义的。但是一样一样自己设定很麻烦,于是有了桌面主题这个概念,一个桌面主题就是一组预先设定好的设置组合,比如说我选了“危险动物”这个主题,那么相当于我设定了一个豹子的桌面,灰色的按钮、绿色的标题栏、昆虫的鼠标指针。如果我选择了“60年代的美国”,那么又是另一种样式。你还可以自己设定各种属性,并且保存为自己的桌面主题。其实“debug”和“release”也是如此,其实它们不过是两组内置的设定而已,而且这些设定归Visual Studio管理,VS根据它们在编译的时候以不同的方式调用编译器,产生不同的代码。为什么使用debug就会让代码中#if debug生效呢?因为debug配置下定义了debug符号,相反的,release没有。当然你可以定义一个nodebug,或者release的符号,但是很显然没有必要。要想理解这些配置方案,你得详细理解编译器参数、配置等等的知识,不是几句话能说清楚的,你可以看MSDN。要想切换编译配置,最简单的就是在工具栏上找到一个下拉框,里面列举了可用的编译配置方案。
      

  14.   


    之所以输出是因为,DEBUG 是编译器默认变量...
    并不需要你自己 声明  
    你只要选择 编译模式就可以了
      

  15.   


    你看下我下面的说得对不?接到一个项目,在编写代码的时候,一般是选择Debug版本(项目----属性----生成----配置----活动(Debug))
    在编写完后,要发布了,就改成Release模式,这样,代码会自动优化。(项目----属性----生成----配置----Release)
    代码中实际有没有Debug和Release符号都无所谓,是这样的吗?
      

  16.   

    你把 DEBUG注释掉了 意思就是无论在debug  还是 release 中都要输出