代码块调试预处理器
Codeblocks debug preprocessor
我正在编写一个带有代码块的C++程序,出于调试目的,我需要知道代码块的构建目标是否设置为"调试"或"发布"。
我已经试过了:
#ifdef DEBUG
printf("Debug-Message");
#endif
而这个
#ifdef _DEBUG
printf("Debug-Message");
#endif
但这些词都没有定义。 我是否必须自己定义 DEBUG 并更改它,每次我更改构建目标时,还是有一个我不知道的词?
我是否必须自己定义 DEBUG 并在每次更改时更改它 建筑目标,还是有我不知道的词?
我不知道是什么,如果代码::块默认设置了什么。但是,如果您定义自己的 #defines
Project->Build options...->[Debug|Release]->#defines
在生成目标(调试或发布)之间切换时,不必更改它们。它允许你定义特定于调试版本的值,以及特定于发布版本的值。
为了避免每次为每个新项目手动输入它,您可以只使用调试/发布 #defines 创建一个小项目,并将其另存为项目模板,然后从该项目模板创建新项目。
通常的方法, 正如 assert(3) 手册页和习惯 (在 C 中使用<assert.h>
或在 C++ 中使用<cassert>
)所建议的,是在命令行定义NDEBUG
(例如,使用gcc -Wall -DNDEBUG
编译)进行非调试编译。在您的Makefile
中,您可以在发布模式下CPPFLAGS += -DNDEBUG
(并在调试模式下使用g++ -Wall -g
进行编译)。
我自己的习惯可能是有类似的东西
#ifndef NDEBUG
#define dbgprintf(Fmt,...) do{fprintf(stderr,"%s:%d:" Fmt "n",
__FILE__, __LINE__,
##__VA_ARGS__);}while(0)
#else
#define dbgprintf(Fmt,...) do{}while(0)
#endif
在公共头文件中,并在代码中的其他位置使用dbgprintf("i=%d", i)
。 请注意,我在Fmt
宏参数上使用常量字符串连接,向其追加常量换行符,并且我的调试输出包含源文件名和行号(如果您愿意,也可以使用__func__
)。在纯C++代码中,我可能会有
#ifndef NDEBUG
#define DBGOUT(Out) do{std::out << __FILE__ << ":" << __LINE__
<< " " << Out << std::endl;}while(0)
#else
#define DBGOUT(Out) do{}while(0)
#endif
并使用DBGOUT("i=" << i)
,其优点是为我的类型使用特定的operator <<
定义。
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- Visual Studio C - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- 所有结构成员的预处理器批处理
- 当头文件被预处理时是否有一个预处理器选项显示?