我有这样的代码:
#include <stdio.h>
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
C文档说getchar()返回int值.在上面的程序中,我们将c类型指定为int.最重要的EOF是integer 标头函数中定义的常量.
现在,如果代码更改为以下内容:
#include <stdio.h>
main()
{
char c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码也有效!等待一分钟,根据C文档getchar()返回int,但请参阅上面的代码我将其存储在char.并且C编译器不会抛出任何错误.同时也可while循环我比较c这是一个char与EOF它是一个int和编译器不会引发任何错误,我的程序执行!
为什么编译器在上述两种情况下不会抛出任何错误?
提前致谢.
不.它只是意味着返回的值是一个int,隐式转换为char类型.就这些.
编译器可能会为此类转换生成警告消息,sizeof(int)大于sizeof(char).例如,如果-Wconversion使用GCC选项编译代码,则会显示以下警告消息:
c.c:5:7: warning: conversion to 'char' from 'int' may alter its value
c.c:8:8: warning: conversion to 'char' from 'int' may alter its value
Run Code Online (Sandbox Code Playgroud)
这意味着,您应该使用int以避免此类警告消息.