C Library User 手册(9)
10 头文件
从这一章开始,我们将按字母顺序介绍 Hexagon C 库中的头文件,这个一个相对无聊的过程,但是仍旧有必要这样做。 每个头文件都被描述,而它的所有函数定义都按字母顺序描述。
10.1 assert.h
包含标准头文件 <assert.h> 以定义宏断言,这对于诊断程序中的逻辑错误很有用。 你可以通过在包含 <assert.h> 之前在程序中定义宏 NDEBUG 来消除由宏断言生成的测试代码,而无需从程序中删除宏引用。 每次程序包含这个头文件时,它都会重新确定宏断言的定义。
#undef assert
#if defined NDEBUG
#define assert(test) (void)0
#else
#define assert(test) <void expression>
#endif
10.1.1 assert
#undef assert
#if defined NDEBUG
#define assert(test) (void)0
#else
#define assert(test) <void expression>
#endif
如果 int 表达式test 等于 0,则宏将向 stderr 写入一条诊断消息,其中包括:
- test文本
- 源文件名(预定义的宏**FILE**)
- 源代码行号(预定义的宏**LINE**)
然后它调用abort。
你可以在任何side-effects context中的程序中编写宏断言。
10.2 ctype.h
包含标准头文件 <ctype.h> 以声明几个函数,这些函数可用于对目标字符集中的代码进行分类和映射。 每个具有 int 类型参数的函数都可以接受宏 EOF 的值或任何可表示为 unsigned char 类型的值。 因此,参数可以是任何函数 fgetc、fputc、getc、getchar、putc、putchar、tolower、toupper 和 ungetc 的返回值。 你不得使用其他参数值调用这些函数。
其他库函数使用这些函数。 例如,函数 scanf 使用函数 isspace 来确定输入字段中的有效空白。
字符分类功能是密切相关的。 许多是根据其他功能定义的。 对于基本 C 字符集中的字符,以下是这些函数之间的依赖关系:
该图用 + 表示那些可以在“C”语言环境之外的语言环境中定义附加字符的函数。
该图告诉你,函数 isprint 为空格或函数 isgraph 返回非零的任何字符返回非零。 反过来,函数 isgraph 对函数 isalnum 或函数 ispunct 返回非零的任何字符返回非零。 另一方面,函数 isdigit 仅对数字 0-9 返回非零值。
实现可以为其中一些函数定义返回非零的附加字符。 任何字符集都可以包含返回非零的附加字符:
- iscntrl(如果字符导致 isprint 返回零)
- ispunct(如果字符导致 isalnum 返回零)
该图用 ++ 表示那些可以在任何字符集中定义附加字符的函数。 此外,“C”语言环境以外的语言环境可以定义返回非零的附加字符:
- isalpha、isupper 和 islower(如果字符导致 iscntrl、isdigit、ispunct 和 isspace 返回零)
- isspace(如果字符导致 isprint 返回零)
请注意,实现可以定义“C”语言环境以外的语言环境,其中一个字符可以导致 isalpha(因此 isalnum)返回非零,但仍然导致 isupper 和 islower 返回零。
int isalnum(int c);
int isalpha(int c);
int isascii(int c); [POSIX]
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
int toascii(int c); [POSIX]
int tolower(int c);
int _tolower(int c); [POSIX]
int toupper(int c);
int _toupper(int c); [POSIX]
10.2.1 isalnum
int isalnum(int c);
如果 c 是以下任何一项,则该函数返回非零值:
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
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
或任何其他特定于语言环境的字母字符。
10.2.3 isascii
int isascii(int c); [POSIX]
isascii 函数测试 ASCII 字符,它是任何值在 0 到 127 范围内的字符,包括 0 到 127。
isascii 是在所有整数值上定义的。
10.2.4 iscntrl
int iscntrl(int c);
如果 c 是以下任何一项,则该函数返回非零值:
BEL BS CR FF HT NL VT
或任何其他实现定义的控制字符。
10.2.5 isdigit
int isdigit(int c);
如果 c 是以下任何一项,则该函数返回非零值:
0 1 2 3 4 5 6 7 8 9
10.2.6 isgraph
int isgraph(int c);
如果 c 是 isalnum 或 ispunct 返回非零的任何字符,则函数返回非零。
10.2.7 islower
int islower(int c);
如果 c 是以下任何一项,则该函数返回非零值:
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
或任何其他特定于语言环境的小写字符。
10.2.8 isprint
int isprint(int c);
如果 c 是空格或 isgraph 返回非零的字符,则函数返回非零。
10.2.9 ispunct
int ispunct(int c);
如果 c 是以下任何一项,则该函数返回非零值:
! " # % & ' ( ) ; < = > ? [ \ ] * + , - . / : ^ _ { | } ~
或任何其他实现定义的标点符号。
10.2.10 isspace
int isspace(int c);
如果 c 是以下任何一项,则该函数返回非零值:
CR FF HT NL VT space
或任何其他特定于语言环境的空格字符。
10.2.11 isupper
int isupper(int c);
如果 c 是以下任何一项,则该函数返回非零值:
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
或任何其他特定于语言环境的大写字符。
10.2.12 isxdigit
int isxdigit(int c);
如果 c 是以下任何一项,则该函数返回非零值:
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
10.2.13 toascii
int toascii(int c); [POSIX]
toascii 函数返回除低 7 位以外的所有位都被清除的参数。
toascii 函数总是返回一个有效的 ASCII 字符。 结果是 0 到 127 范围内的非负整数,包括 0 到 127。
10.2.14 tolower
int tolower(int c);
如果存在则该函数返回对应的小写字母,如果isupper©;否则返回c。
10.2.15 _tolower
int _tolower(int c); [POSIX]
如果存在则该函数返回对应的小写字母,如果isupper©;否则返回c。
10.2.16 toupper
int toupper(int c);
如果存在则返回对应的大写字母,如果islower©,则返回c;否则返回c。
10.2.17 _toupper
int _toupper(int c); [POSIX]
如果存在则返回对应的大写字母,如果islower©,则返回c;否则返回c。