limits.h(c标准库)

 

 1 /*yvals.h*/
 2 #define _YVALS_H_
 3 
 4 #define MYEDOM  33
 5 #define MYERANGE    34
 6 #define MYEFPOS 35
 7 #define MYERRMAX    36
 8 
 9 #define _ILONG 1
10 #define _CSIGN 1
11 #define _MBMAX 2

 

 1 /*my_limits.h 8-bit version*/
 2 /*
 3  * c中标量数据类型要以一种对每一个计算机体系结构都很天然的方式表示。
 4  * 程序选择效率更高的类型:
 5  * #if VAL_MIN < INT_MIN || INT_MAX < VAL_MAX
 6  *      typedef long val_t;
 7  * #else
 8  *      typedef int val_t;
 9  * #endif
10  * 测试int型是否超过16位:
11  * #if (-1 + 0x0) >> 1 > 0x7fff
12  *      //大于16为则...
13  * #endif
14  *
15  * 整型常量:由一串数组组成(因此负数不是整型常量),包含8进制,16进制,能够包含后缀标识类型。
16  * 常量表达式:仅仅只包含常量的表达式。
17  * 因此INT_MIN,-2147483648须要写成-2147483647-1,由于-2147483648别当作常量表达式,由"-"和常量值2147483648组成。
18  * 对于"-",是对原值补码进行取反加1操做。,因此整型常量2147483648(int型)会类型提高。
19  * printf("%d", -2147483648);会报warnning。但printf("%d", -2147483647-1);不会,由于按照上面常量表达式操做,能够正确。
20  * 为何按上述步骤操做,能够从编译器步骤看,词法分析时,按词扫描,扫描到数,肯定类型。
21  */
22 #ifndef _MY_LIMITS_H_
23 #define _MY_LIMITS_H_
24 #ifndef _YVALS_H_
25 #include "yvals.h"
26 #endif
27 
28 #define MY_CHAR_BIT 8
29 #if _CSIGN
30 #define MY_CHAR_MAX 127
31 #define MY_CHAR_MIN (-127-1)
32 #else
33 #define MY_CHAR_MAX 255
34 #define MY_CHAR_MIN 0
35 #endif
36 
37 #if _ILONG
38 #define MY_INT_MAX  2147483647
39 #define MY_INT_MIN  (-2147483647-1)
40 #define MY_UINT_MAX    4294967295
41 #else
42 #define MY_INT_MAX  32767
43 #define MY_INT_MAX  (-32767-1)
44 #define MY_UINT_MAX 65535
45 #endif
46 
47 #define MY_LONG_MAX 2147483647
48 #define MY_LONG_MIN (-2147483647-1)
49 
50 #define MY_MB_LEN_MAX   _MBMAX
51 
52 #define MY_SCHAR_MAX    127
53 #define MY_SCHAR_MIN    (-127-1)
54 
55 #define MY_SHRT_MAX 32767
56 #define MY_SHRT_MIN (-32767-1)
57 
58 #define MY_UCHAR_MAX    255
59 #define MY_ULONG_MAX    4294967295
60 #define MY_USHRT_MAX    65535
61 #endif

 

 1 /*my_t_limits.c*/
 2 #include <stdio.h>
 3 #include "my_limits.h"
 4 
 5 int main()
 6 {//测试了部分,其余相似
 7     printf("CHAR_BIT = %2i MB_LEN_MAX = %2i\n\n", MY_CHAR_BIT, MY_MB_LEN_MAX);
 8     printf("CHAR_MAX = %10i CHAR_MIN = %10i\n", MY_CHAR_MAX, MY_CHAR_MIN);
 9     printf("SCHAR_MAX = %10i SCHAR_MIN = %10i\n", MY_SCHAR_MAX, MY_SCHAR_MIN);
10     printf("UCHAR_MAX = %10u\n\n", MY_UCHAR_MAX);
11 #if MY_CHAR_BIT < 8 || MY_CHAR_MAX < 127 || 0 < MY_CHAR_MIN || MY_CHAR_MAX != MY_SCHAR_MAX && MY_CHAR_MAX != MY_UCHAR_MAX
12 #error bad char properties
13 #endif
14     return 0;
15 }
相关文章
相关标签/搜索