C 标准库

<assert.h>

简介

C 标准库的 assert.h头文件提供了一个名为 assert 的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。

已定义的宏 assert 指向另一个宏 NDEBUG,宏 NDEBUG 不是 <assert.h> 的一部分。如果已在引用 <assert.h> 的源文件中定义 NDEBUG 为宏名称,则 assert 宏的定义如下:

#define assert(ignore) ((void)0)

库宏

下面列出了头文件 assert.h 中定义的唯一的函数:

1void assert(int expression) 这实际上是一个宏,不是一个函数,可用于在 C 程序中添加诊断。

assert()

描述

C 库宏 void assert(int expression) 允许诊断信息被写入到标准错误文件中。换句话说,它可用于在 C 程序中添加诊断。

声明

下面是 assert() 宏的声明。

void assert(int expression);
参数
  • expression -- 这可以是一个变量或任何 C 表达式。如果 expression 为 TRUE,assert() 不执行任何动作。如果 expression 为 FALSE,assert() 会在标准错误 stderr 上显示错误消息,并中止程序执行。
返回值

这个宏不返回任何值。

实例

下面的实例演示了 assert() 宏的用法。

#include <assert.h>
#include <stdio.h>

int main()
{
   int a;
   char str[50];

   printf("请输入一个整数值: ");
   scanf("%d", &a);
   assert(a >= 10);
   printf("输入的整数是: %d\n", a);

   printf("请输入字符串: ");
   scanf("%s", str);
   assert(str != NULL);
   printf("输入的字符串是: %s\n", str);

   return(0);
}

让我们在交互模式下编译并运行上面的程序,如下所示:

<ctype.h>

简介

C 标准库的 ctype.h 头文件提供了一些函数,可用于测试和映射字符。

这些函数接受 int 作为参数,它的值必须是 EOF 或表示为一个无符号字符。

如果参数 c 满足描述的条件,则这些函数返回非零(true)。如果参数 c 不满足描述的条件,则这些函数返回零。

库函数

下面列出了头文件 ctype.h 中定义的函数:

1int isalnum(int c) 检查所传的字符是否是字母和数字。
2int isalpha(int c) 检查所传的字符是否是字母。
3int iscntrl(int c) 检查所传的字符是否是控制字符。
4int isdigit(int c) 检查所传的字符是否是十进制数字。
5int isgraph(int c) 检查所传的字符是否有图形表示法。
6int islower(int c) 检查所传的字符是否是小写字母。
7int isprint(int c) 检查所传的字符是否是可打印的。
8int ispunct(int c) 检查所传的字符是否是标点符号字符。
9int isspace(int c) 检查所传的字符是否是空白字符。
10int isupper(int c) 检查所传的字符是否是大写字母。
11int isxdigit(int c) 检查所传的字符是否是十六进制数字。

标准库还包含了两个转换函数,它们接受并返回一个 "int"

1int tolower(int c) 把大写字母转换为小写字母。
2int toupper(int c) 把小写字母转换为大写字母。

字符类

1数字 完整的数字集合 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
2十六进制数字 集合 { 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f }
3小写字母 集合 { a b c d e f g h i j k l m n o p q r s t u v w x y z }
4大写字母 集合 {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z }
5字母 小写字母和大写字母的集合
6字母数字字符 数字、小写字母和大写字母的集合
7标点符号字符 集合 ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [  ] ^ _ ` { | } ~
8图形字符 字母数字字符和标点符号字符的集合
9空格字符 制表符、换行符、垂直制表符、换页符、回车符、空格符的集合。
10可打印字符 字母数字字符、标点符号字符和空格字符的集合。
11控制字符 在 ASCII 编码中,这些字符的八进制代码是从 000 到 037,以及 177(DEL)。
12空白字符 包括空格符和制表符。
13字母字符 小写字母和大写字母的集合。

<errno.h>

简介

C 标准库的 errno.h 头文件定义了整数变量 errno,它是通过系统调用设置的,在错误事件中的某些库函数表明了什么发生了错误。该宏扩展为类型为 int 的可更改的左值,因此它可以被一个程序读取和修改。

在程序启动时,errno 设置为零,C 标准库中的特定函数修改它的值为一些非零值以表示某些类型的错误。您也可以在适当的时候修改它的值或重置为零。

errno.h 头文件定义了一系列表示不同错误代码的宏,这些宏应扩展为类型为 int 的整数常量表达式。

库宏

下面列出了头文件 errno.h 中定义的宏:

1extern int errno 这是通过系统调用设置的宏,在错误事件中的某些库函数表明了什么发生了错误。
2EDOM Domain Error 这个宏表示一个域错误,它在输入参数超出数学函数定义的域时发生,errno 被设置为 EDOM。
3ERANGE Range Error 这个宏表示一个范围错误,它在输入参数超出数学函数定义的范围时发生,errno 被设置为 ERANGE。

<float.h>

简介

C 标准库的 float.h 头文件包含了一组与浮点值相关的依赖于平台的常量。这些常量是由 ANSI C 提出的,这让程序更具有可移植性。在讲解这些常量之前,最好先弄清楚浮点数是由下面四个元素组成的:

S符号 ( +/- )
b指数表示的基数,2 表示二进制,10 表示十进制,16 表示十六进制,等等...
e指数,一个介于最小值 emin 和最大值 emax 之间的整数。
p精度,基数 b 的有效位数

基于以上 4 个组成部分,一个浮点数的值如下:

floating-point = ( S ) p x b

floating-point = (+/-) precision x base

库宏

下面的值是特定实现的,且是通过 #define 指令来定义的,这些值都不得低于下边所给出的值。请注意,所有的实例 FLT 是指类型 float,DBL 是指类型 double,LDBL 是指类型 long double。

FLT_ROUNDS定义浮点加法的舍入模式,它可以是下列任何一个值:
-1 - 无法确定
0 - 趋向于零
1 - 去最近的值
2 - 趋向于正无穷
3 - 趋向于负无穷
FLT_RADIX 2这个宏定义了指数表示的基数。
基数 2 表示二进制,
基数 10 表示十进制,
基数 16 表示十六进制。
FLT_MANT_DIG
DBL_MANT_DIG
LDBL_MANT_DIG
这些宏定义了 FLT_RADIX 基数中的位数。
FLT_DIG 6
DBL_DIG 10
LDBL_DIG 10
这些宏定义了舍入后不会改变表示的十进制数字的最大值(基数 10)。
FLT_MIN_EXP
DBL_MIN_EXP
LDBL_MIN_EXP
这些宏定义了基数为 FLT_RADIX 时的指数的最小负整数值。
FLT_MIN_10_EXP -37
DBL_MIN_10_EXP -37
LDBL_MIN_10_EXP -37
这些宏定义了基数为 10 时的指数的最小负整数值。
FLT_MAX_EXP
DBL_MAX_EXP
LDBL_MAX_EXP
这些宏定义了基数为 FLT_RADIX 时的指数的最大整数值。
FLT_MAX_10_EXP +37
DBL_MAX_10_EXP +37
LDBL_MAX_10_EXP +37
这些宏定义了基数为 10 时的指数的最大整数值。
FLT_MAX 1E+37
DBL_MAX 1E+37
LDBL_MAX 1E+37
这些宏定义最大的有限浮点值。
FLT_EPSILON 1E-5
DBL_EPSILON 1E-9
LDBL_EPSILON 1E-9
这些宏定义了可表示的最小有效数字。
FLT_MIN 1E-37
DBL_MIN 1E-37
LDBL_MIN 1E-37
这些宏定义了最小的浮点值。

下面的实例演示了 float.h 文件中定义的一些常量的使用。

#include <stdio.h>
#include <float.h>

int main()
{
   printf("浮点的最大值 = %.10e\n", FLT_MAX);
   printf("浮点数最小值 = %.10e\n", FLT_MIN);

   printf("数字的位数 = %.10e\n", FLT_MANT_DIG);
}

让我们编译和运行上面的程序,这将产生下列结果:

<limits.h>

简介

limits.h 头文件决定了各种变量类型的各种属性。定义在该头文件中的宏限制了各种变量类型(比如 char、int 和 long)的值。

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

库宏

下面的值是特定实现的,且是通过 #define 指令来定义的,这些值都不得低于下边所给出的值。

CHAR_BIT8定义一个字节的比特数。
SCHAR_MIN-128定义一个有符号字符的最小值。
SCHAR_MAX127定义一个有符号字符的最大值。
UCHAR_MAX255定义一个无符号字符的最大值。
CHAR_MIN0定义类型 char 的最小值,如果 char 表示负值,则它的值等于 SCHAR_MIN,否则等于 0。
CHAR_MAX127定义类型 char 的最大值,如果 char 表示负值,则它的值等于 SCHAR_MAX,否则等于 UCHAR_MAX。
MB_LEN_MAX1定义多字节字符中的最大字节数。
SHRT_MIN-32768定义一个短整型的最小值。
SHRT_MAX+32767定义一个短整型的最大值。
USHRT_MAX65535定义一个无符号短整型的最大值。
INT_MIN-32768定义一个整型的最小值。
INT_MAX+32767定义一个整型的最大值。
UINT_MAX65535定义一个无符号整型的最大值。
LONG_MIN-2147483648定义一个长整型的最小值。
LONG_MAX+2147483647定义一个长整型的最大值。
ULONG_MAX4294967295定义一个无符号长整型的最大值。

下面的实例演示了 limit.h 文件中定义的一些常量的使用。

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

int main()
{

   printf("The number of bits in a byte %d\n", CHAR_BIT);

   printf("The minimum value of SIGNED CHAR = %d\n", SCHAR_MIN);
   printf("The maximum value of SIGNED CHAR = %d\n", SCHAR_MAX);
   printf("The maximum value of UNSIGNED CHAR = %d\n", UCHAR_MAX);

   printf("The minimum value of SHORT INT = %d\n", SHRT_MIN);
   printf("The maximum value of SHORT INT = %d\n", SHRT_MAX);

   printf("The minimum value of INT = %d\n", INT_MIN);
   printf("The maximum value of INT = %d\n", INT_MAX);

   printf("The minimum value of CHAR = %d\n", CHAR_MIN);
   printf("The maximum value of CHAR = %d\n", CHAR_MAX);

   printf("The minimum value of LONG = %ld\n", LONG_MIN);
   printf("The maximum value of LONG = %ld\n", LONG_MAX);

   return(0);
}

这将产生下列结果:


参考自:https://www.runoob.com/cprogramming/c-tutorial.html

12-19 13:53
查看更多