C Library User 手册(9)

281 篇文章 16 订阅

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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值