为什么我可以在C中分配/比较int和char

Ant*_*t's 3 c c++

我有这样的代码:

#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.最重要的EOFinteger 标头函数中定义的常量.

现在,如果代码更改为以下内容:

 #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这是一个charEOF它是一个int和编译器不会引发任何错误,我的程序执行!

为什么编译器在上述两种情况下不会抛出任何错误?

提前致谢.

Naw*_*waz 9

不.它只是意味着返回的值是一个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以避免此类警告消息.