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 }
相關文章
相關標籤/搜索