zoukankan      html  css  js  c++  java
  • 关于标准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
  • 相关阅读:
    为什么要选择忍者站群?
    SDCMS1.31 如何发布?
    强大的忍者站群
    出现未能加载“OpenWebKitSharp”是什么原因?
    wordpress发布模块如何使用?
    忍者站群做了百度竞价,岂不是跟站群相违背吗?
    点点博客的发布模块,如何使用?
    为什么有时候明明提示登陆成功,却无法获取分类或无法发布?
    被百度K了,怎么办?
    笔记0611
  • 原文地址:https://www.cnblogs.com/the-tops/p/5750930.html
Copyright © 2011-2022 走看看