我在Linux C++上遇到了_DEBUG宏的問題。 我試圖用這樣的:如何在Linux上使用#ifdef _DEBUG?
#ifdef _DEBUG
cout << "Debug!" << endl;
#endif
但是,當我在IDE中選擇Debug這是行不通的。但它在Windows上工作。 我在Eclipse上使用Eclipse IDE進行C++編碼。
我在Linux C++上遇到了_DEBUG宏的問題。 我試圖用這樣的:如何在Linux上使用#ifdef _DEBUG?
#ifdef _DEBUG
cout << "Debug!" << endl;
#endif
但是,當我在IDE中選擇Debug這是行不通的。但它在Windows上工作。 我在Eclipse上使用Eclipse IDE進行C++編碼。
把#define _DEBUG
放在你有這段代碼的地方以北,或者在你的項目設置中。
我強烈建議不要將它放在任何C++文件中。項目設置很好,但不在代碼本身。 – 2012-01-27 16:01:37
@MooingDuck:是的,這是真的。就個人而言,我只是不會使用MSVC,或STL,如果這是大量使用,並堅持常用的NDEBUG。 – 2012-01-28 03:26:47
我試過#define NDEBUG,但它仍然不起作用。 – antpetr89 2012-01-28 05:24:36
如果您使用的cmake 把
set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_DEBUG "_DEBUG")
發現在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。
您必須進入項目屬性並查看Eclipse在發佈和調試變體中爲預處理器標誌設置的內容。也許自己添加_DEBUG。 – 2012-01-27 14:28:50
你在Windows中使用eclipse嗎? – L7ColWinters 2012-01-27 14:29:13
添加通常習慣,至少使用''和標準的'assert'宏,當*不想調試時定義'NDEBUG' * –
2012-01-27 14:29:47