jfs*_*jfs 3 c language-lawyer c11
isspace()如果输入可表示为unsigned char或等于,则有效EOF.
getchar() 从stdin读取下一个字符.
当getchar()!=EOF; 是否所有getchar()返回的值都可以表示为unsigned char?
uintmax_t count_space = 0;
for (int c; (c = getchar()) != EOF; )
if (isspace(c))
++count_space;
Run Code Online (Sandbox Code Playgroud)
愿这段代码导致未定义的行为吗?
jfs*_*jfs 10
根据C11 WG14草案版本N1570:
§7.21.7.6/ 2该
getchar函数getc与参数stdin 等效.§7.21.7.5/ 2该
getc功能相当于fgetc......§7.21.7.1/ 2 [
!=EOF案例] ......fgetc函数获得该字符作为unsigned char转换为int......中的文本是我的.
即
isspace()接受getchar()价值观getchar()!=EOF值都可表示为unsigned char如果你认为它太明显了("它还能做什么"),那就再想一想.例如,在相关的情况下:isspace(CHAR_MIN)可能是未定义的,即,将字符传递给字符分类函数可能是未定义的行为!
如果UCHAR_MAX > INT_MAX结果可能是实现定义的:
§6.3.1.3/ 3否则,新类型已签名,其值无法表示; 结果是实现定义的,或者引发实现定义的信号.