如何在Linux中使用#ifdef _DEBUG?

4

我在Linux C++中遇到了_DEBUG宏的问题。 我尝试使用类似于以下的代码:

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

但是当我在IDE中选择调试时它不能工作。然而在Windows上可以。我在Linux上使用Eclipse IDE进行C++编程。


2
你需要进入项目属性,查看Eclipse在发布和调试变体中设置的预处理器标志。也许你需要自己添加_DEBUG。 - Some programmer dude
你在Windows上使用Eclipse了吗? - L7ColWinters
2
通常的习惯是,在使用<assert.h>和标准的assert宏时,当您不需要调试时定义NDEBUG - Basile Starynkevitch
5
请查看 _DEBUG vs NDEBUG。该文讨论了在C++中使用的两个预处理宏,即_DEBUG和NDEBUG。这些宏可以用于控制代码中的调试信息输出以及运行时的性能优化。_DEBUG主要用于开发和测试阶段,而NDEBUG则用于生产环境中减少调试信息的输出以提高程序的性能。 - LihO
@L7ColWinters,我没有。 - antpetr89
3个回答

6

在Windows系统上,您可能正在使用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,您最好的选择可能是在项目属性中修改路径和符号属性


3

如果您使用 cmake,请将以下内容放入您的顶级 CMakeLists.txt 文件中:

set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_DEBUG "_DEBUG")

来源于CMake邮件列表


0
#define _DEBUG放在此代码片段之北,或在您的项目设置中。

我强烈建议不要将它放在任何C++文件中。项目设置是可以的,但不要放在代码本身中。 - Mooing Duck
@MooingDuck:是的,那是真的。就我个人而言,我不会使用MSVC或STL,因为它们被广泛使用,而是坚持使用常用的NDEBUG。 - Matt Joiner
@user1173593:你想要 #define _DEBUG... 建议阅读一下你的编译器或STL集合的MSVC文档。 - Matt Joiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接