• 关于标准C语言的预定义宏


    标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。下面预定义宏表,被我抄了下来。
    __LINE__  当前程序行的行号,表示为十进制整型常量
    __FILE__  当前源文件名,表示字符串型常量
    __DATE__转换的日历日期,表示为Mmm dd yyyy 形式的字符串常量,Mmm是由asctime产生的。
    __TIME__ 转换的时间,表示"hh:mm:ss"形式的字符串型常量,是有asctime产生的。(asctime貌似是指的一个函数)
    __STDC__ 编辑器为ISO兼容实现时位十进制整型常量
    __STDC_VERSION__ 如何实现复合C89整部1,则这个宏的值为19940SL;如果实现符合C99,则这个宏的值为199901L;否则数值是未定义
    __STDC_EOBTED__ (C99)实现为宿主实现时为1,实现为独立实现为0
    __STDC_IEC_559__ (C99)浮点数实现复合IBC 60559标准时定义为1,否者数值是未定义
    __STDC_IEC_559_COMPLEX__ (C99)复数运算实现复合IBC 60559标准时定义为1,否者数值是未定义
    __STDC_ISO_10646__ (C99)定义为长整型常量,yyyymmL表示wchar_t值复合ISO 10646标准及其指定年月的修订补充,否则数值未定义

    实现还经常定义其他宏用于传递环境信息,如进行程序编译工作的计算机类型。具体定义哪些宏值是由实现决定的,但是UNIX实现习惯上预定义unix。与内置宏不同的是,这些宏可以取消定义。标准C语言要求特定实现的宏名一下划线开头,加上大写字母或另一个下划线(unix宏不符合这个要求)。

    实际运用,例:预定义宏可以在魔种错误消息中使用:
    if(n|=m)fprintf(stderr,"Internal error;line %d,file 5s ",__LINE__,__FILE__);

    其他实现定义的宏可以分隔主机或特定目标代码。例如:Microsoft Visual C++定义__WIN32为1:
    #ifdef __WIN32
          /*Code for Win32 environment*/
    #endif

    __STDC__与__STDC_VERSION__宏可以编写与标准C语言和非标准C实现敬爱内容的程序:
    #ifdef __STDC__
         /*Some version of Standard C*/
    #if defined(__STDC__VERSION__)&&__STDC_VERSION__>=199901L
         /* C99 */
    #elif defined(__STDC_VERSION__)&&__STDC_VERSION__>=199409L
         /*C89 and Amendment 1 */
    #else
         /* C89 but not Amendment 1*/
    #endif
    #else /* __STDC__not defined */
        /*Not Standard C*/
    endif

    reference:http://blog.csdn.net/hrbeuwhw/article/details/7484432

  • 相关阅读:
    202231
    搞机经验总结
    Maven最佳实践
    win10双系统安装
    C#前台js调用后台代码和后台代码调用前台js
    DataList的使用+分页
    异步中的跨线程赋值问题
    javascript中async/await常用场景
    20. 有效的括号
    53. 最大子数组和(动态规划)
  • 原文地址:https://www.cnblogs.com/haore147/p/3919646.html
Copyright © 2020-2023  润新知