代码之家  ›  专栏  ›  技术社区  ›  Brian Sullivan

if RELEASE会像if DEBUG在C中那样工作吗?

  •  245
  • Brian Sullivan  · 技术社区  · 17 年前

    10 回复  |  直到 7 年前
        1
  •  412
  •   CharlesB Craig McQueen    14 年前

    RELEASE 未定义,但您可以使用

    #if (!DEBUG)
      ...
    #endif
    
        2
  •  296
  •   Ronan Boiteau    7 年前

    不,不会的,除非你做些工作。

    这里最重要的部分是什么是调试,它是一种定义的常量,编译器可以根据它进行检查。

    • 标有“定义调试常量”的复选框

    但是,您可以轻松地将该名称添加到标有条件编译符号的文本框中,但请确保在执行此操作之前将项目配置设置为释放模式,因为这些设置是针对每个配置的。

    #if RELEASE 在任何配置下都不会生成任何代码。

        3
  •  45
  •   Pop Catalin    15 年前

    不。

    DEBUG 定义的常量(由Visual Studio自动定义),但没有为发布模式定义此类常量。检查“生成”下的项目设置。

    在下选择[定义调试常量] 项目->建筑 就像在每个文件的开头包含#define DEBUG。

    如果要为发布配置定义发布常量,请转到:

    • 选择释放模式
    • 条件编译符号 文本框输入:释放
        4
  •  33
  •   Ronan Boiteau    7 年前

    #if RELEASE 不起作用。但是你可以用 #if !DEBUG

    例子:

    #if !DEBUG
    SendTediousEmail()
    #endif
    
        5
  •  10
  •   om252345    17 年前

    我以前从未见过……但我见过:

    #if (DEBUG == FALSE)
    

    #if (!DEBUG)
    

        6
  •  9
  •   Ronan Boiteau    7 年前

    你可以用 #if(!DEBUG) 为此目的。

        7
  •  4
  •   Steve L Steve L    17 年前

    “流行加泰林”说得对。基于构建类型控制定义提供了很大的灵活性。例如,您可以在同一个解决方案中拥有“调试”、“演示”和“发布”配置。这就避免了使用两种不同的解决方案进行重复编程的需要。

    #if RELEASE #if (RELEASE) 工作原理与 #if DEBUG

    以下内容摘自“Pop Catalin”帖子: 如果要为发布配置定义发布常量,请转到: *选择释放模式 条件编译符号 文本框输入:释放

        8
  •  2
  •   Fetchez la vache    9 年前

    我知道这是一个老问题,但值得一提的是,您可以在调试和发布之外创建自己的配置,例如测试或UAT。

    如果在“项目属性”页面的“生成”选项卡上,将“条件编译符号”设置为“测试”(例如),则可以使用以下构造:

    #if (DEBUG || TEST )
        //Code that will not be executed in RELEASE or UAT
    #endif
    

    您可以出于特定的原因使用此构造,例如,如果需要,可以使用不同的客户端,甚至可以使用整个Web方法。我们在过去也使用过这种方法,其中一些命令会导致特定硬件出现问题,因此我们在部署到硬件X时有一个应用程序的配置。

        9
  •  0
  •   King Coffee    7 年前

    您可以创建自己的条件编译时符号(任意名称)。 菜单选项:项目->[projectname]属性。。。

    #define RELEASE
    // or
    #undef RELEASE
    

    您可以在#if语句中使用符号:

    #if RELEASE
    // code ...
    #elif …
    // code ...
    #endif
    
    // or
    
    #if !RELEASE
    // code ...
    #endif
    
        10
  •  0
  •   JohnLBevan    5 年前

    同时 M4N's answer #if (!DEBUG) )最有意义的是,另一种选择是使用预处理器修改其他标志的值;例如

    bool isRelease = true;
    #if DEBUG
        isRelease = false;
    #endif
    

    或者更好的做法是,使用定义预期行为并基于模式设置它们的标志,而不是指我们处于发布模式还是调试模式:

    bool sendEmails = true;
    #if DEBUG
        sendEmails = false;
    #endif
    

    if (sendEmails) {/* send mails */} 每次调用该代码,而不是发布中存在但调试中不存在的代码,但这可能是有利的;e、 在你的测试中,你可能想打电话给你的 SendEmails()

        11
  •  0
  •   Leigh    5 年前

    另一种选择:

    #If CONFIG = "Release" Then
    
    ....
    
    #End If
    
        12
  •  -8
  •   Matt Davison    17 年前

    #if RELEASE
    #undef DEBUG
    #endif
    
    推荐文章