映射宏相对于调用它的源文件

时间:2014-05-19 09:51:44

标签: c macros header-files

我正在使用宏(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编程的新手。请向我提供有关如何实现这一点的任何建议?任何帮助将不胜感激。

谢谢,

2 个答案:

答案 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

log.h

#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

process1.c

#define callee process1
#include "log.h"
debug_macro   <<<<<====== this one should call proc1debug_macro

process2.c

#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)