C 库 - <limits.h>
C 库 limits.h 头文件定义了不同变量类型的各种属性。此头文件中定义的宏限制了各种变量类型(例如 char、int 和 long)的值。
这些限制规定变量不能存储超出这些限制的任何值,例如,无符号字符最多可以存储 255 个值。
<limits.h> 库宏
以下值是特定于实现的,并使用 #define 指令定义。但是,这些值不能低于给定值。
宏 | 值 | 描述 |
---|---|---|
CHAR_BIT | 8 | 定义一个字节的位数。 |
SCHAR_MIN | -128 | 定义有符号字符的最小值。 |
SCHAR_MAX | +127 | 定义有符号字符的最大值。 |
UCHAR_MAX | 255 | 定义无符号字符的最大值。 |
CHAR_MIN | -128 | 定义字符类型的最小值,如果字符表示负值,则其值等于 SCHAR_MIN,否则为零。 |
CHAR_MAX | +127 | 定义对于 char 类型,如果 char 表示负值,则其值等于 SCHAR_MAX,否则等于 UCHAR_MAX。 |
MB_LEN_MAX | 16 | 定义多字节字符的最大字节数。 |
SHRT_MIN | -32768 | 定义短整型的最小值。 |
SHRT_MAX | +32767 | 定义短整型的最大值。 |
USHRT_MAX | 65535 | 定义无符号短整型的最大值。 |
INT_MIN | -2147483648 | 定义整数的最小值。 |
INT_MAX | +2147483647 | 定义整数的最大值。 |
UINT_MAX | 4294967295 | 定义无符号整数的最大值。 |
LONG_MIN | -9223372036854775808 | 定义长整数的最小值。 |
LONG_MAX | +9223372036854775807 | 定义长整数的最大值。 |
ULONG_MAX | 18446744073709551615 | 定义无符号长整型的最大值。 |
请注意,上述宏有助于开发者编写高效的代码,使其在不同平台和编译器下保持一致。
示例 1
以下是基本的 C 库程序,用于显示 limits.h 头文件下各种宏的值范围。
#include <stdio.h> #include <limits.h> int main() { printf("The value of CHAR_BIT: %d ", CHAR_BIT); printf("The value of SCHAR_MIN: %d ", SCHAR_MIN); printf("The value of SCHAR_MAX: %d ", SCHAR_MAX); printf("The value of UCHAR_MAX: %u ", UCHAR_MAX); printf("The value of CHAR_MIN: %d ", CHAR_MIN); printf("The value of CHAR_MAX: %d ", CHAR_MAX); printf("The value of MB_LEN_MAX: %d ", MB_LEN_MAX); printf("The value of SHRT_MIN: %d ", SHRT_MIN); printf("The value of SHRT_MAX: %d ", SHRT_MAX); printf("The value of USHRT_MAX: %u ", USHRT_MAX); printf("The value of INT_MIN: %d ", INT_MIN); printf("The value of INT_MAX: %d ", INT_MAX); printf("The value of UINT_MAX: %u ", UINT_MAX); printf("The value of LONG_MIN: %ld ", LONG_MIN); printf("The value of LONG_MAX: %ld ", LONG_MAX); printf("The value of ULONG_MAX: %lu ", ULONG_MAX); return 0; }
输出
执行上述代码后,我们得到以下结果 -
The value of CHAR_BIT: 8 The value of SCHAR_MIN: -128 The value of SCHAR_MAX: 127 The value of UCHAR_MAX: 255 The value of CHAR_MIN: -128 The value of CHAR_MAX: 127 The value of MB_LEN_MAX: 16 The value of SHRT_MIN: -32768 The value of SHRT_MAX: 32767 The value of USHRT_MAX: 65535 The value of INT_MIN: -2147483648 The value of INT_MAX: 2147483647 The value of UINT_MAX: 4294967295 The value of LONG_MIN: -9223372036854775808 The value of LONG_MAX: 9223372036854775807 The value of ULONG_MAX: 18446744073709551615
示例 2
本例演示了如何查找最小值和最大值。
#include <stdio.h> #include <limits.h> int main() { int input[] = {89, 5, 21, 10, 45, 31, 98}; int n = sizeof(input) / sizeof(input[0]); // 宏初始化 int min_value = INT_MAX; int max_value = INT_MIN; // 循环迭代求最小值和最大值 for (int i = 0; i < n; ++i) { if (input[i] < min_value) { min_value = input[i]; } if (input[i] > max_value) { max_value = input[i]; } } // 显示结果 printf("Minimum value: %d ", min_value); printf("Maximum value: %d ", max_value); return 0; }
输出
执行上述代码后,我们得到以下结果 -
Minimum value: 5 Maximum value: 98
示例 3
以下程序初始化限制宏 (CHAR_MIN/MAX),以根据给定字符串生成字符的最小和最大长度。
#include <stdio.h> #include <limits.h> #include <string.h> int main() { char* char_input[] = {"RUSSIA", "UK", "INDIA", "NEWYORK", "INDONESIA", "DUBAI"}; int num_strings = sizeof(char_input) / sizeof(char_input[0]); //CHAR 宏的初始化 int min_length = CHAR_MAX; int max_length = CHAR_MIN; for (int i = 0; i < num_strings; ++i) { int current_length = strlen(char_input[i]); if (current_length < min_length) { min_length = current_length; } if (current_length > max_length) { max_length = current_length; } } printf("Minimum length of characters: %d ", min_length); printf("Maximum length of characters: %d ", max_length); return 0; }
输出
上述代码产生以下结果 -
Minimum length of characters: 2 Maximum length of characters: 9