【发布时间】:2021-11-20 05:17:03
【问题描述】:
现在我在 myfile.h 文件中有一个调试函数 printPassport。它是这样声明的:
#ifdef DEBUG
void printPassport(passport_t *passport);
#endif
这似乎是做事的正确方法,虽然我已经有一段时间没有使用 C,所以如果我错了,请纠正我。
我应该在 myfile.c 中的函数名周围加上保护吗?即我应该这样做
void printPassport(passport_t *passport) {
...
}
或
#ifdef DEBUG
void printPassport(passport_t *passport) {
...
}
#endif
在 myfile.c 中?
【问题讨论】:
-
这一切都很好,但是你对函数的调用做了什么?通常,您需要
#define printPassport(x),当DEBUG未定义时,它将转换为空调用。 -
我发现我喜欢我的调试函数(我经常称它们为
dump_xyz()以获取xyz的一些重要值)具有如下签名:void dump_xyz(FILE *fp, const char *tag, const xyz *ptr);以便它可以用于编写到stderr、stdout或某种日志文件,并且可以通过标签来识别发生。有时我会变得懒惰并省略文件流参数,但该函数的生产版本通常具有所有三个参数。有时添加const char *file, int line, const char *func参数,同时传递__FILE__、__LINE__和__func__可能会很有用。