簡體   English   中英

C ++確定是否使用調試符號進行編譯而不定義預處理器符號

[英]C++ determine if compiling with debug symbols without defining a preprocessor symbol

我一直在使用這樣的東西:

int main(int argc, char *argv[])
{

#ifdef DEBUG
    printf("RUNNING DEBUG BUILD");
#else
    printf("Running... this is a release build.");
#endif
...

但是,這需要我使用-DDEBUG進行編譯以進行調試構建。 GCC是否為我提供了一些方法來確定何時使用調試符號(-g標志)進行編譯,例如定義我自己可以檢查的預處理器宏?

答案是否定的。 通常這些宏(DEBUG,NDEBUG,_DEBUG)由IDE / make系統設置,具體取決於您處於活動狀態的配置(調試/發布)。 我認為這些答案可能有所幫助:

用於調試打印的C #define宏

-DNDEBUG通常來自哪里?

_DEBUG與NDEBUG

我認為我所尋找的答案基本上是亞當發布的評論,即:

編譯器的工作不包括預處理,實際上編譯器會阻塞預處理器未處理的任何預處理器開關,這些開關進入代碼。

因此,因為分支代碼的方式必須利用預處理器,這意味着當編譯器獲取任何代碼時它已經是一個或另一個(調試代碼或發布代碼),所以我不可能做我的問題所要求的這個階段(在預處理器之后)。

因此,預處理器被設計為一個單獨的進程來直接提供代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM