常见宏
在 ANSI C 中有几个常用的标准预定义宏:
-
__LINE__
: 当前源代码所在行号 -
__FILE__
: 当前源文件名 -
__DATE__
: 当前编译日期 -
__TIME__
: 当前编译时间 -
__STDC__
: 当要求程序严格遵循 ANSI C 标准时,该标识被置为 1 -
__func__
: 当前函数名(C99/C++11 以后添加的)
例子
下面看一个例子:
#include <stdio.h> int main(void) { printf("Date : %s\n", __DATE__); printf("Time : %s\n", __TIME__); printf("File : %s\n", __FILE__); printf("Line : %d\n", __LINE__); printf("Func : %s\n", __func__); printf("STDC : %d\n", __STDC__); return 0; }
输出结果
Date : May 9 2016 Time : 17:03:31 File : 1.c Line : 8 Func : main STDC : 1
PS:我们可以通过一行类似于 #line 20 "some-file"
形式的指令来改变 __FILE__
和 __LINE__
的值.
示例
#include <stdio.h> #define BLURT printf ("This is line %d of file \"%s\" (function <%s>)\n",\ __LINE__, __FILE__, __func__) #line 99 "grody-to-the-max" void silly_function () { BLURT; } #line 999 "bassetts-liquorice-allsorts" int main () { BLURT; silly_function (); return 0; }
输出:
This is line 1001 of file "bassetts-liquorice-allsorts" (function <main>) This is line 101 of file "grody-to-the-max" (function <silly_function>)
最后
在 GCC 中还定义了 __FUNCTION__
和 __PRETTY_FUNCTION__
.在 C 中这两个宏的用法与 __func__
一样。但在 C++ 中 __PRETTY_FUNCTION__
用法有些不同。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于