相信大家在写代码的时候会发现,有时候我们需要往代码里面添加部分的辅助代码以帮助我们调试,但是在开发完成之后,有一部分的辅助代码将不会被编译到产品代码中。但是又需要将辅助代码和程序代码区分开来。传统情况下,会定义一个宏,在每次添加辅助代码的地方都会判断是否需要编译进去。但是这样子让程序看起来比较繁冗。而使用宏函数则能避免这种情况。
下面是一段示例程序,将帮助你理解:
#define DEBUG
//session 1:如果定义了DEBUG,则可以将函数宏中的代码段实际编译进去。
//否则函数宏中的代码段,并未实际编译进去,只是简单的用空替换
#ifdef DEBUG
#define DebugCode(code_fragement){ code_fragement }
#else
#define DebugCode(code_fragment)
#endif
//session 2:使用传统的每次在使用辅助代码的时候都需
//#ifdef DEBUG_IFEDF…#endif
#define DEBUG_IFDEF
int main(int argc, char* argv[])
{
printf("Hello World!/n");
//session 3:实际的辅助代码会根据宏DEBUG是否定义而
//判断是否会时间的替换成代码段,还是空
DebugCode(
printf("Debug code statement 1/n");
printf("Debug code statement 2/n");
);
//session 4:使用传统的在每次使用辅助代码时候,都判断
//DEBUG_IFEDF是否定义
#ifdef DEBUG_IFDEF
printf("DEBUG code use DEBUG_IFDEF everytime/n");
#endif
//conclusion :如果不愿意在文件中出现多次的使用#ifdef DEBUG…#endif
//则可以使用这种格式
//相对于每次使用#ifdef DEBUG …#endif,这种方法要相对简洁得多
return 0;
}