C Standard Library 简明教程

C Library - <limits.h>

C 库 limits.h 头文件定义了不同变量类型的各种属性。在此头文件中定义的宏限制各种变量类型的值,如 char、int 和 long。

这些限制指定变量不能存储超出这些限制的任何值,例如无符号字符最多可以存储 255 的最大值。

<limits.h> Library Macros

以下值是实现特定的,并使用 #define 指令定义。但是,这些值可能不会低于给定的值。

Macro

Value

Description

CHAR_BIT

8

定义字节中的位数。

SCHAR_MIN

-128

定义有符号 char 的最小值。

SCHAR_MAX

+127

定义有符号 char 的最大值。

UCHAR_MAX

255

定义无符号 char 的最大值。

CHAR_MIN

-128

定义类型 char 的最小值,如果 char 表示负值,则其值将等于 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 的最小值。

INT_MAX

+2147483647

定义 int 的最大值。

UINT_MAX

4294967295

定义无符号 int 的最大值。

LONG_MIN

-9223372036854775808

定义 long int 的最小值。

LONG_MAX

+9223372036854775807

定义 long int 的最大值。

ULONG_MAX

18446744073709551615

定义无符号 long int 的最大值。

请注意,以上宏可帮助开发人员编写可在不同平台和编译器中始终保持一致的高效代码。

Example 1

以下是用来展示 limits.h 头文件下的各种宏范围值的 C 库程序基本代码。

#include <stdio.h>
#include <limits.h>

int main() {
   printf("The value of CHAR_BIT: %d\n", CHAR_BIT);
   printf("The value of SCHAR_MIN: %d\n", SCHAR_MIN);
   printf("The value of SCHAR_MAX: %d\n", SCHAR_MAX);
   printf("The value of UCHAR_MAX: %u\n", UCHAR_MAX);
   printf("The value of CHAR_MIN: %d\n", CHAR_MIN);
   printf("The value of CHAR_MAX: %d\n", CHAR_MAX);
   printf("The value of MB_LEN_MAX: %d\n", MB_LEN_MAX);
   printf("The value of SHRT_MIN: %d\n", SHRT_MIN);
   printf("The value of SHRT_MAX: %d\n", SHRT_MAX);
   printf("The value of USHRT_MAX: %u\n", USHRT_MAX);
   printf("The value of INT_MIN: %d\n", INT_MIN);
   printf("The value of INT_MAX: %d\n", INT_MAX);
   printf("The value of UINT_MAX: %u\n", UINT_MAX);
   printf("The value of LONG_MIN: %ld\n", LONG_MIN);
   printf("The value of LONG_MAX: %ld\n", LONG_MAX);
   printf("The value of ULONG_MAX: %lu\n", ULONG_MAX);
   return 0;
}

Output

执行以上代码,将获得以下结果 −

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

Example 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]);

   // Initialization of macros
   int min_value = INT_MAX;
   int max_value = INT_MIN;

   // loop iteration for min and max value
   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];
       }
   }
   // Display the result
   printf("Minimum value: %d\n", min_value);
   printf("Maximum value: %d\n", max_value);

   return 0;
}

Output

执行以上代码,将获得以下结果 −

Minimum value: 5
Maximum value: 98

Example 3

在下面,程序初始化 limit 宏(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]);

   // Initialization of CHAR macros
   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\n", min_length);
   printf("Maximum length of characters: %d\n", max_length);

   return 0;
}

Output

以上代码生成以下结果 −

Minimum length of characters: 2
Maximum length of characters: 9