在与 getc 系列返回值进行比较之前,是否必须将字符转换为 unsigned char?

问题描述 投票:0回答:2

我不确定在与

unsigned char
系列函数的返回进行比较之前是否必须将角色转换为
getc

这是没有演员表的示例:

#include <stdio.h>

int main(void) {
  int c;

  while ((c = getchar()) != '\n' && c != EOF) // loop until newline or EOF
    putchar(c);

  return 0;
}

这是一个演员阵容的例子:

#include <stdio.h>

int main(void) {
  int c;

  while ((c = getchar()) != (unsigned char)'\n' && c != EOF) // loop until newline or EOF
    putchar(c);

  return 0;
}

在我使用的实现上,两者都有效。

便携式节目需要演员阵容吗?

我相信是的,因为C11/N1570 7.21.7.1p2,强调我的:

如果流指向的输入流的文件结束指示符未设置并且存在下一个字符,则 fgetc 函数以转换为 int 的无符号字符形式获取该字符,并前进相关的文件位置指示符对于流(如果已定义)。

c language-lawyer getchar fgetc getc
2个回答
0
投票
当字符常量为正数或 0 时,(例如

'\n'

always 正数)不需要强制转换。


0
投票
  • '\n'
     在 C 语言中是 
    int
    
    
  • getchar()
     返回 
    int
    
    
  • c
    int
    
    
您永远不需要将

int

 转换为 
int
,因此您的第一个循环就是它应该看起来的样子。
选择

EOF

,使其不可能与转换为 
char
unsigned char
 发生冲突。它最常见的值是 
-1

© www.soinside.com 2019 - 2024. All rights reserved.