ANSI C 常用内部宏 __LINE__,__FILE__ 等

本贴最后更新于 2719 天前,其中的信息可能已经东海扬尘

常见宏

在 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__ 用法有些不同。

  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 44 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...