预处理宏
Preprocessing Macro
本文关键字:预处理 更新时间:2023-10-16
如果在我的文件的开头我做
#define dbg_kprintf
if (x_var) kprintf
我使用迟交报表
dbg_kprintf ("blablabla");
我的问题是,只有在其他地方定义了xvar的情况下,才会定义dbg_kprintf吗?如果不是,那么在编译时是否不使用dbg_kprintf语句?
谢谢。
否,这将编译成变量的运行时检查,或者什么都不编译(如果变量实际上是具有错误值的编译时间常数,优化器感觉像是消除了死代码)或始终调用(如果它是具有真值的编译时常数)。所以,现在你知道了。
确保调试代码从非调试构建中排除的典型方法是使用预处理器符号来保护代码。请注意,这可能需要您以不同的方式管理参数。
#if (x_var)
#define dbg_kprintf kprintf
#else
#define dbg_kprintf
#endif
在C/C++中,宏可以接受参数。它将以任何一种方式定义,因为它只是一个预处理指令,但如果没有定义,编译将失败。要将参数传递给宏,请使用以下语法
#define foo(X) ((X))
dbg_kprintf
将在编译时间之前使用。预处理器将替换您定义的内容:if (x_var) kprintf
。然后它将尝试正常编译您的代码。
相关文章:
- 错误:无效的预处理指令 #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 - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- Xmllint未设置,而在路径中找不到XMLLINT;跳过XML预处理
- 如何在预处理时读取文件