我正在使用宏(debug_macro)来记录log.h文件中定义的调试信息。我需要将此debug_macro映射到特定的调试宏。我在下面的例子中解释了我的期望。
log.h
=======
#if callee==process1
#define debug_macro proc1_debug_macro
#if callee==process2
#define debug_macro proc2_debug_macro
process1.c
===========
#include log.h
debug_macro <<<<<====== this one should call proc1debug_macro
process2.c
===========
#include log.h
debug_macro <<<<==== this one should call proc2_debug_macro
我是C编程的新手。请向我提供有关如何实现这一点的任何建议?任何帮助将不胜感激。
谢谢,
答案 0 :(得分:0)
在一个文件中定义通用宏,并为本地文件制作更简单的宏。
<强> log.h 强>
#define complex_macro(a, b, c) ...
<强> process1.c 强>
#include "log.h"
#define simple_local_macro(a) complex_macro(a, 2, 3)
答案 1 :(得分:0)
从表面上看,你缺少一些定义,你需要在包含标题之前定义callee
:
#define process1 10
#define process2 20
#if callee==process1
#define debug_macro proc1_debug_macro
#elif callee==process2
#define debug_macro proc2_debug_macro
#else
#error callee not defined
#endif
#define callee process1
#include "log.h"
debug_macro <<<<<====== this one should call proc1debug_macro
#define callee process2
#include "log.h"
debug_macro <<<<==== this one should call proc2_debug_macro
我不相信这是最好的方法,但它与你的要求密切相关。
我可能直接使用不同的调试功能(宏),因此很明显不同的代码在不同的进程中实现调试。或者,更有可能的是,我会在两个进程中使用相同的调试代码。但是,我的要求不一定与你的要求相同。
请注意,宏名称通常都是大写的。此外,通常,类似函数的宏优先于类似对象的宏。也就是说,最好有:
#define debug_macro(a, b c) proc1_debug_macro(a, b, c)