在使用Linux的x86机器上使用gcc 4.5.2编译时,以下内容不会给我任何警告:
char foo = 255;
Run Code Online (Sandbox Code Playgroud)
但是当我使用时-pedantic,gcc说:
警告:隐式常量转换溢出
gcc行为的方式有点奇怪,这让我怀疑我是否真的理解这项任务中发生了什么.我认为如果charPOSIX上有8位长并且默认情况下是签名,则无法保持255.
在C标准中,它表示无符号整数溢出导致溢出,但未定义有符号整数溢出.这个赋值是不确定的行为?为什么gcc这样做?
我正在阅读K&R的The C Programming Language,并对putchar和getchar感到困惑.我制作了一个程序,你输入10个字符,程序将它们打印回屏幕.
#include <stdio.h>
int main()
{
int i;
int ch;
for(i = 0; i < 10; i++)
{
printf("Enter a single character >> ");
ch = getchar();
putchar(ch);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的输出:
Enter a single character >> a
a
Enter a single character >> b
b
Run Code Online (Sandbox Code Playgroud)
...等等10次,但这是我得到的输出:(进入2个字符后我停止了)
Enter a single character >> a
aEnter a single character >>
Enter a single character >> b
bEnter a single character >>
Enter a single character >>
Run Code Online (Sandbox Code Playgroud)
不确定为什么我的输入字符与固定字符串组合并被输出.
另外,我不太清楚为什么使用int来存储字符.