在我見過的#如果編譯器指令的所有案例中,他們使用「調試」。我能否以相同的方式使用「RELEASE」來排除在調試模式下編譯時不想運行的代碼?我想用這個塊包圍的代碼發出一堆電子郵件,而且我不想在測試時意外發送這些郵件。#if RELEASE會像#if DEBUG那樣在C#中工作嗎?
回答
不,不會的,除非你做一些工作。
這裏最重要的部分是什麼DEBUG真的是,它是一種定義的編譯器可以對證不變的。
如果你檢查項目屬性,生成標籤下,你會發現三件事情:
- 一個文本框標有「條件編譯符號」
- 複選框標記「定義DEBUG常數」
- 標記複選框「定義TRACE常數」
沒有這樣的複選框,也不恆定/符號預先定義具有名稱RELEASE。
但是,您可以輕鬆地添加名稱文本框標記條件編譯符號,但要確保你設置的項目配置這樣做之前釋放模式,因爲這些設置是每個配置。
所以基本上,除非你添加到文本框中,#if RELEASE
不會將任何配置下產生的任何代碼。
編輯:更正的#ifdef到#IF(感謝丹尼爾)
嘿不是#ifdef C/C++?對於C#,它只是#if – 2009-02-03 16:13:36
RELEASE
沒有定義,但可以使用
#if (!DEBUG)
...
#endif
這不是,但當然你可以使用NOT運算符。當我寫我的答案時沒有想到這一點。 – 2009-02-03 16:03:35
它確實,但使用你的解決方案更清晰,「更正確」,恕我直言。 – 2009-02-03 16:06:10
謝謝你們!我想這個答案就是我會用到的,但我接受了lassevk的答案,因爲它更徹底。 – 2009-02-03 16:10:41
在我安裝VS(VS 2008)#如果版本不工作。但是你可以只使用DEBUG
!例如:
#if !DEBUG
SendTediousEmail()
#endif
都能跟得上。
儘管在調試配置有定義常數a DEBUG
(由Visual Studio自動定義的),而沒有用於釋放模式沒有定義這樣的常數。在構建下檢查您的項目設置。
選擇下的[Define DEBUG constant]項目 - > Build就像在每個文件的開頭包含#define DEBUG一樣。
如果要定義釋放配置的釋放常數,請訪問:
- 項目屬性 - >生成
- 選擇釋放模式
- 在條件編譯符號文本框中輸入:RELEASE
爲什麼不只是
#if RELEASE
#undef DEBUG
#endif
我從來沒有看到過...但我已經看到了:
#if (DEBUG == FALSE)
和
#if (!DEBUG)
,對於雅工作?
「Pop Catalin」說得對。根據構建類型控制定義提供了很大的靈活性。例如,您可以在同一解決方案中擁有「DEBUG」,「DEMO」和「RELEASE」配置。這可以避免使用兩種不同的解決方案重複編程。
所以是的#if RELEASE
或#if (RELEASE)
的作用與RELEASE條件編譯符號定義時的#if DEBUG
相同。
從「流行克特林」拍攝後下: 如果要定義爲釋放配置的釋放常數,請訪問: *項目屬性 - >生成 *選擇釋放模式 *在條件編譯符號 textbox輸入:RELEASE
我知道這是一個老問題,但值得一提的是,您可以在DEBUG和RELEASE之外創建自己的配置,例如TEST或UAT。
如果然後將項目屬性頁面的生成選項卡上,你然後設置「條件編譯符號」,以測試(例如),那麼你可以使用一個結構,如
#if (DEBUG || TEST)
//Code that will not be executed in RELEASE or UAT
#endif
您可以使用此結構出於特定的原因,如不同的客戶端,如果你有需要,甚至整個Web方法。我們以前也使用過這種方式,因爲某些命令在特定硬件上導致問題,所以我們在部署到硬件X時爲應用程序配置。
您可以爲此使用#if(!DEBUG)。
只是一個說明。我非常肯定,當啓用優化版本時,#if DEBUG將從發行版編譯中刪除。
- 1. 如何讓#if DEBUG工作?
- 2. PHP IF語句並不像我想要的那樣工作
- 3. 嵌套的IF語句不能像我期望的那樣工作嗎?
- 4. #if DEBUG指令
- 5. document.getElementsByClassName()不像getElementById那樣工作嗎?
- 6. if(string.Contains(string))。那可能嗎?
- 7. 「#if DEBUG」在ASPX/ASCX頁面
- 8. 使用HttpContext.Current.IsDebuggingEnabled或#if DEBUG更好嗎?
- 9. Vhdl代碼不會像在模擬中那樣工作
- 10. 爲什麼javascript(jquery)if語句不能像php if語句那樣工作?什麼是解決方案?
- 11. #if宏如何在C中工作?
- 12. C char在if..else中不工作
- 13. c#if bool不工作
- 14. Qt 5:Debug \ release和Release \ debug目錄
- 15. #if當外部調試器連接時,DEBUG會執行嗎?
- 16. 將#if __IPHONE_4_0工作在iPad上嗎?
- 17. 如何在Eclipse中使用if(DEBUG)?
- 18. 在Objective-C中,除DEBUG外還有RELEASE定義嗎?
- 19. Flex 4.5:bin-debug可以工作,但bin-release不會
- 20. 當#if DEBUG運行時
- 21. 我應該在#if(DEBUG)中調用Debugger.Log()嗎?
- 22. 斷點不能像DartEditor中那樣工作嗎?
- 23. 如何在asp.net c#中執行代碼(IF,IF,IF,IF)
- 24. WinJS有#DEBUG或#RELEASE指令嗎?
- 25. <! - [if gte IE 8] - >不像我期望的那樣運行
- 26. Golang有沒有像Python那樣的「if x in」構造?
- 27. 'if'陳述不像預期的那樣沒有'else'
- 28. Protovis應該像RaphaelJS那樣在IE 7,8和9上工作嗎?
- 29. Android if if語句不工作inItemClickListener
- 30. 「nawk if else if else」不工作
'#if!DEBUG`與`#if RELEASE`具有相同的功能。或者,如果在模式中運行不同的代碼,則使用`#if DEBUG`然後使用`#else`然後使用`#endif`。 – Nat 2017-01-14 00:07:11