使用调试宏而不是简单函数有什么好处?

Eri*_*rik 3 c debugging

似乎for- printfstyle调试的人总是使用预处理器宏.与此类似的解决方案有什么问题吗?

void debug(char *msg) {
#ifdef DEBUG
printf("%s", msg);
#endif
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*pan 10

通常这样他们可以这样做:

#define DEBUG(MSG) printf("[%s:%i] %s\n", __FILE__, __LINE__, (MSG))
Run Code Online (Sandbox Code Playgroud)

由于在日志中拥有调试消息的确切来源非常有用,因此这是一种非常常见的模式.但是如果你使用了一个函数,就像这样:

void DEBUG(const char *MSG) {
    printf("[%s:%i] %s\n", __FILE__, __LINE__, (MSG));
}
Run Code Online (Sandbox Code Playgroud)

然后你只能看到与printf()调用相对应的文件名和行号DEBUG(),而不是那些调用的代码DEBUG().