__FILE__ 插入当前源文件名字 (%s)
__FUNCTION__ 插入当前函数名字 (%s)
__LINE__ 插入当前源代码行号 (%d / %i)
__DATE__ 插入当前编译日期 (%s)
__TIME__ 插入当前编译时间 (%s)
__STDC__ 当要求程序严格遵循 ANSI C时,该宏被定义为1
__cplusplus 当编写C++程序时该宏被定义为1
例子:一个简单活动的ASSERT被定义如下:
#define Assert(str) if(!(str)) \
fprintf(stderr, "Assertion faild: %s, file: %s, line: %i\n", \
#str, __FILE__, __LINE__)
#define Debug(format, ...) \
printf("%s %s: %s:%d debug: "format"\n", __DATE__, __TIME__, __FILE__, __LINE__, ##__VA_ARGS__); \
fflush(stdout)
printf("%s %s: %s:%d debug: "format"\n", __DATE__, __TIME__, __FILE__, __LINE__, ##__VA_ARGS__); \
fflush(stdout)