相关疑难解决方法(0)

做{...}而(0) - 有什么好处?

可能重复:
为什么在C/C++宏中有时会出现无意义的do/while和if/else语句?

我已经看了十多年了.我一直在努力思考它有什么好处.因为我主要在#defines中看到它,所以我认为它对内部范围变量声明和使用中断(而不是gotos)有好处.

对其他事情有好处吗?你用它吗?

c loops

315
推荐指数
4
解决办法
14万
查看次数

#define宏用于C中的调试打印?

尝试创建一个宏,可以在定义DEBUG时用于打印调试消息,如下面的伪代码:

#define DEBUG 1
#define debug_print(args ...) if (DEBUG) fprintf(stderr, args)
Run Code Online (Sandbox Code Playgroud)

如何用宏实现这一目标?

c c-preprocessor

196
推荐指数
7
解决办法
18万
查看次数

如何在C++中实现no-op宏(或模板)?

如何在C++中实现no-op宏?

#include <iostream>   

#ifdef NOOP       
    #define conditional_noop(x) what goes here?   
#else       
    #define conditional_noop(x) std::cout << (x)   
#endif   
int main() {       
    conditional_noop(123);   
}
Run Code Online (Sandbox Code Playgroud)

我希望在定义NOOP时不执行任何操作,并且在未定义NOOP时打印"123".

c c++ macros templates

25
推荐指数
6
解决办法
2万
查看次数

C调试宏(具有不同的调试"源")

我打算让自己得到一个整洁的C调试宏,不确定我真正想要的是什么(并且在涉及宏时无能为力)我转向谷歌.一段时间后,我现在认为我知道我想要什么,但不知道它是如何工作的.我没有太多运气获得有关宏和调试技术的正确信息.

我过去一直在使用的是这样的:

#ifdef DEBUG
 #define DBG(x) printf x
#else
 #define DBG(x) /* nothing */
#endif
Run Code Online (Sandbox Code Playgroud)

问题是它可能变得非常混乱,最终你最终会评论出旧的调试消息,尽管你以后可能会需要它们.

我找到的最好的例子来自高级c课程的一些幻灯片,可以在这里找到:http: //www.mpi-inf.mpg.de/departments/rg1/teaching/advancedc-ws08/script/lecture07.pdf (相关部分是幻灯片19-23,但大部分都包含在下面)

作为演讲幻灯片,他们不幸需要一些解释.但是他们提到的东西看起来非常有用:

DBG((MOD_PARSER , "z = %d\n", z));
Run Code Online (Sandbox Code Playgroud)

其中MOD_PARSER是调试模块/类别,其余参数是给printf的.

而DBG的实现:

#ifdef PRGDEBUG
 #define DBG(x) dbg_printer x
#else
 #define DBG(x) /* nothing */
#endif
void dbg_printer(int module , const char *fmt, ...);
Run Code Online (Sandbox Code Playgroud)

问题#1是编写dbg_printer函数,我不知道如何将可变数量的参数传递给printf语句.

幻灯片继续讨论如何优雅地添加新模块,我相当确定我根本不理解这一点,但无论如何......

*How to add new modules elegantly
*Add a file debug_modules.def 
ADD_MOD(0, PARSER) 
ADD_MOD(1, SOLVER) 
ADD_MOD(2, PRINTER)
Run Code Online (Sandbox Code Playgroud)

...

*“Generate” an enum with debug modules: debug.h
...
#define ADD_MOD(num, …
Run Code Online (Sandbox Code Playgroud)

c debugging macros

4
推荐指数
1
解决办法
6485
查看次数

标签 统计

c ×4

macros ×2

c++ ×1

c-preprocessor ×1

debugging ×1

loops ×1

templates ×1