2012-01-27 77 views
2

我在Linux C++上遇到了_DEBUG宏的問題。 我試圖用這樣的:如何在Linux上使用#ifdef _DEBUG?

#ifdef _DEBUG 
cout << "Debug!" << endl; 
#endif 

但是,當我在IDE中選擇Debug這是行不通的。但它在Windows上工作。 我在Eclipse上使用Eclipse IDE進行C++編碼。

+1

您必須進入項目屬性並查看Eclipse在發佈和調試變體中爲預處理器標誌設置的內容。也許自己添加_DEBUG。 – 2012-01-27 14:28:50

+0

你在Windows中使用eclipse嗎? – L7ColWinters 2012-01-27 14:29:13

+2

添加通常習慣,至少使用''和標準的'assert'宏,當*不想調試時定義'NDEBUG' * – 2012-01-27 14:29:47

回答

1

#define _DEBUG放在你有這段代碼的地方以北,或者在你的項目設置中。

+0

我強烈建議不要將它放在任何C++文件中。項目設置很好,但不在代碼本身。 – 2012-01-27 16:01:37

+0

@MooingDuck:是的,這是真的。就個人而言,我只是不會使用MSVC,或STL,如果這是大量使用,並堅持常用的NDEBUG。 – 2012-01-28 03:26:47

+0

我試過#define NDEBUG,但它仍然不起作用。 – antpetr89 2012-01-28 05:24:36

1

發現在Windows上的頂層的CMakeLists.txt文件下面你很可能使用Visual Studio,它可以自動在Debug模式下構建解決方案時定義了符號_DEBUG。通常在調用編譯器時定義符號,然後在預處理器階段使用它們。

例如,如果您使用的是通過命令行GCC,你想,因爲你正在處理一個已建立的代碼庫重新使用_DEBUG符號,你可以通過命令行使用-D參數來定義它。

#include <iostream> 
int main() { 
    std::cout << "Hello world!\n"; 
#ifdef _DEBUG 
    std::cout << "But also Hello Stack Overflow!\n"; 
#endif 
    return 0; 
} 

使用下面的命令行

g++ -D _DEBUG define.cpp 

編譯這會給以下結果

Hello world! 
But also Hello Stack Overflow! 

您的Eclipse CDT的最好的選擇,但可能是在項目屬性modify the paths and symbols properties