当前位置 博文首页 > ChenYX的博客:ANSIC标准定义的6种预定义宏

    ChenYX的博客:ANSIC标准定义的6种预定义宏

    作者:[db:作者] 时间:2021-07-07 18:50

    ANSIC标准定义了以下6种可供C语言使用的预定义宏:???

    ? ? ?? __LINE__? ? ? ? ? ? ? ? ? ? ? ? 在源代码中插入当前源代码行号???
    ?????? __FILE__??????????????????????? 在源代码中插入当前源代码文件名???
    ?????? __DATE__? ? ? ? ? ? ? ? ? ? ? 在源代码中插入当前编译日期〔注意和当前系统日期区别开来〕???
    ?????? __TIME__???????????????????????在源代码中插入当前编译时间〔注意和当前系统时间区别开来〕?????????
    ?????? __STDC__??????????????????????当要求程序严格遵循ANSIC标准时该标识符被赋值为1。???
    ?????? __cplusplus? ? ? ? ? ? ? ? ? ? ?当编写C++程序时该标识符被定义。


    ?? 标识符__LINE__和__FILE__通常用来调试程序;???
    ?? 标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本;
    ? ?这四个都是预编译宏,不是包含在头文件中的:
    ? ?__FILE__是当前编译的文件的文件名 是一个字符串
    ? ?__TIME__是当前编译的文件的编译时间 格式是hh:mm:ss 是字符串
    ? ?__DATE__是当前编译的文件的编译日期 格式是Mmm:dd:yyyy 是字符串
    ? ?__LINE__是调用该宏语句所在的行数,是个十进制数

    用在宏定义中,譬如:

    #define TEST (__FILE__" "__TIME__) /*这个括号没有也行的*/
    int main(void)
    {
        printf(TEST);
        return 0;
    }

    假如该代码的文件名叫console.cpp
    那么会输出文件名加编译时间
    .\console.cpp 21:34:22

    C程序:

    #include <stdio.h>
    int main()
    {
        char s1[] = __DATE__;
        char s2[] = __TIME__;
        printf("s1=[%s]\n", s1);
        printf("s2=[%s]\n", s2);
        return 0;
    }

    编译运行结果:

    #include <stdio.h>
    
    int main()
    {
            char s1[] = __DATE__;
            char s2[] = __TIME__;
    
            printf("s1=[%s]\n", s1);
            printf("s2=[%s]\n", s2);
    
            return 0;
    }
    [zcm@c #7]$make
    gcc  -o a a.c
    [zcm@c #8]$./a
    s1=[Apr 24 2014]
    s2=[17:21:26]
    [zcm@c #9]$./a
    s1=[Apr 24 2014]
    s2=[17:21:26]
    [zcm@c #11]$./a
    s1=[Apr 24 2014]
    s2=[17:21:26]

    可见,每次程序运行时,输出的都是同一个时间,即编译时间!

    cs
    下一篇:没有了