常见宏
在 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__
用法有些不同。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于