用于阻止代码处理的宏
Macro to prevent code processing
所以我有一段代码,如果它处于调试模式,它将访问 DLL 命名空间函数,如果它处于发布模式,我想注释掉它。
#ifdef DEBUG
#define (DEBUG_CODE) abcd::
#else
#define (DEBUG_CODE) <Condition to skip processing>
if (some condition)
(DEBUG_CODE) func_name();
虽然我希望#else
定义注释,但我想你不能这样做,因为它们在执行任何代码处理或预处理之前被编译器跳过。
如果这是正确的,那么请告诉我一种跳过(DEBUG_CODE) func_name();
处理的方法。有很多地方使用它,我不想到处添加if(DEBUG)
。
编辑
命名空间 DLL 具有不返回任何内容的函数,以及预期返回值且可能分配给enum
的函数。
即
abcd::func_name();
and
int rs = abcd::func_name_2();
and
enum XYZ{ var1 = 0; var2};
XYZ PQR = abcd::func_name3(); //This Enum will prevent me from defining some kind
// 0; as a `#define`
所以。。多种场景..
感谢您的帮助。
如果您将DEBUG_CODE
更改为
#ifdef DEBUG
# define DEBUG_CODE(code) abcd::code;
#else
# define DEBUG_CODE(code) ;
#endif
然后你会这样称呼它:
if(some_condition) DEBUG_CODE(func_name())
在调试模式下,这将调用您的函数,在发布模式下不会生成任何代码。
如果您希望能够将这些函数的返回值分配给变量或从它们返回(尽管我认为这不是一个好主意,正如我在评论中解释的那样),我会让宏采用在调试模式下调用的内容以及在发布模式下使用的内容。
#ifdef DEBUG
# define IF_DEBUG_ELSE(debug_code, release_code) abcd::debug_code
#else
# define IF_DEBUG_ELSE(debug_code, release_code) release_code
#endif
这至少在你调用宏时很清楚发生了什么。
这可以像这样使用:
return IF_DEBUG_ELSE(check_result(), 0);//0 for success
if(IF_DEBUG_ELSE(check_condition(), true)){}
XYZ xyz = IF_DEBUG_ELSE(get_xyz(), First_XYZ);
等等。
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 错误处理.将系统错误代码映射到泛型
- 如何在 C++14 中处理此特定代码
- 为什么需要与 WCHAR 相关的代码处理
- 处理代码重新定义int类型(uint16_t,int16_t等),并不喜欢它
- 在C++中重用异常处理代码
- 文件处理:代码停止运行
- 使用 gcc 或 cpp 预处理 C 代码,而无需解析宏
- 了解图像处理代码
- 如何优雅地处理C++代码中的C回调
- 当我在VS2015中处理代码时,我得到了不同的输出.有什么解释吗
- 我应该如何重组此事件处理代码
- 在 c++ 中处理代码的命令行参数,用于随机输入和用户输入
- 以下哪个异常处理代码段有效,原因
- 如何在用sed或awk预处理C/C++代码时可靠地定位函数
- 如何处理代码
- c++中的文件处理代码有什么问题
- 如何处理c++代码中可能出现的整数溢出?
- 如何在Windows XP下从dev -c++中获得预处理代码
- PostMessage()成功,但我的消息处理代码从未接收到消息