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 }

 

转载于:https://www.cnblogs.com/kevin-kang/p/3170396.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值