关于GCC 调试的时候, 有时候为了便于快速定位所要打印的调试信息, 可以方便地调用提供的一些宏.
__FILE__ 调试信息所在的文件
__LINE__ 调试信息所在的行
__DATE__ 调试信息打印日期
__TIME__ 调试信息打印的时间
__FUNC__ 调试信息所在的函数
常常可以看到很多开源方案中有这类应用:
#define DEBUG_PRINT(format,...) fprintf(stderr,"[DEBUG: ][Filename: %s][LINE: %d] "format, ##__VA_ARGS__)
对了, 关于 #, ##, ##__VA_ARGS__ 应用如下
1. #define P(x) printf(#x "value is: %d", x) //起替换作用
int main(void)
{
int y = 10;
P(y);
}
打印出: y value is 10;
2. #define P(n) x##n
int main(void)
{
int P(3) = 10; //等价于 int x3 = 10;
printf("x3 = %d\n", x3);
}
会打印出 10;
3. ##__VA_ARGS__ 可变参数替换
#define DEBUG_PRINT(format,...) fprintf(stderr,format, ##__VA_ARGS__)
int main(void)
{
DEBUG_PRINT("hello mark\n");
}
C99编码器 会自动检查参数个数,若没有,会自动去掉前面的 逗号。
上述一些特性 仅GCC 支持吧!