关于标准C语言的预定义宏
2016-01-08 21:50
295 查看
标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。下面预定义宏表,被我抄了下来。
实现还经常定义其他宏用于传递环境信息,如进行程序编译工作的计算机类型。具体定义哪些宏值是由实现决定的,但是UNIX实现习惯上预定义unix。与内置宏不同的是,这些宏可以取消定义。标准C语言要求特定实现的宏名一下划线开头,加上大写字母或另一个下划线(unix宏不符合这个要求)。
__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\n",__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
相关文章推荐
- C++编程练习
- Sicily 1128. DICE
- c语言中static的作用(精辟分析)
- C++命名空间
- C++中explicit关键字的作用
- C语言复合字面量的使用
- C++数据类型与C#对应关系
- C++校门外的树
- C++11的右值引用
- C语言实现全排列
- C++ string substr()
- 回文字符串切割问题
- C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制
- 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/OmniCppComplete
- Sicily 1286. Pascal Library
- iOS学习第三天,C语言的学习
- (IOS自学)C语言基础学习(二)
- C++:友元2(时间之差)
- C++ 类头文件的编译错误
- C++:友元1(两点之间的距离)