与DEBUG宏混淆
Confusion with DEBUG macro
本文关键字:DEBUG 更新时间:2023-10-16
test.cpp
#include <iostream>
#include "Class1.h"
#define DEBUG
int main() {
checkAssert();
}
1.h类
#include <cassert>
#ifndef CLASS1_H_
#define CLASS1_H_
#if defined(DEBUG)
void checkAssert(){
int number = 10;
assert(number == 10);
}
#else
void checkAssert(){
std::cout << "opps" << std::endl;
}
#endif /* DEBUG */
#endif /* CLASS1_H_ */
1.我已经在主文件中定义了DEBUG。
2.在Class1.h#if defined(DEBUG(中,用于检查是否定义了DEBUG(根据我的理解(。
我正在尝试这个程序来理解DEBUG宏是如何在c++中工作的,但每次我都会在屏幕上输出opp。有人能帮我了解一下发生了什么吗?
您的test.cpp
在之后设置宏头文件已经包含。太晚了。您必须在之前设置宏,包括头文件:
#define DEBUG
#include <Class1.h>
预处理器执行文本替换。一旦它将class1.h
粘贴到TU的文件中,您就有了(为了简洁起见,我忽略了扩展标准头(
#include <iostream>
#include <cassert>
#ifndef CLASS1_H_
#define CLASS1_H_
#if defined(DEBUG)
void checkAssert(){
int number = 10;
assert(number == 10);
}
#else
void checkAssert(){
std::cout << "opps" << std::endl;
}
#endif /* DEBUG */
#endif /* CLASS1_H_ */
#define DEBUG
int main() {
checkAssert();
}
正如您所看到的,DEBUG
是在检查之后定义的。只需将其移动到相关的#include
之上即可获得您想要的行为。
相关文章:
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 我在主函数的左括号上不断收到错误,消息为obj\Debug\main.o||在函数"ZN11linked_listC1Ev"中:|
- 流行"Debug Assertion Failed"
- 解决与构建"Debug x64"版本的暗网相关的错误
- Visual Studio Debug 只在一个线程中
- 在Visual Studio代码中定义DEBUG和RELEASE符号
- Visual Studio 2017中使用ifstream时,Release和Debug的输出不同
- /usr/bin/ld: build-debug/obj/gpsitem.o: 文件无法识别: 文件被截断
- 如何绕过 << 调用,就好像"#ifndef DEBUG" c++ 中的宏一样?
- 如何在QT中使用DEBUG对齐日志文件中的数据?
- 在 OSX 上从源代码构建 GIMP 2.10 在"gimp-debug-tool-2.0"失败
- 检测到'DEBUG'的 Log4cpp 命名冲突。
- 在Visual Studio中,C++构建配置类型是Debug,Debug3D,DebugDLL4,DebugDLL9,
- 能够使用debug.assert()函数需要什么
- isalpha()?或其他.. Debug断言失败了,CircleMud游戏
- ISALPHA 导致 C++ "Debug Assertion Failed"
- 凯撒密码程序中"Debug Assertion Failed!"问题
- 使用GDBSERVER的Clion debug jni库