我有這樣的代碼:我爲什麼可以分配/比較int和字符用C
#include <stdio.h>
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
C文檔中說,getchar()
返回int
值。在上面的程序中,我們將c
類型分配爲int
。最重要的是EOF
是一個integer
常量,在頭函數中定義。
現在,如果更改代碼是這樣的:
#include <stdio.h>
main()
{
char c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
此代碼也可以!等待一分鐘,根據C文檔getchar()
返回int
,但請參閱上面的代碼,我將它存儲在char
中。而C編譯器不會拋出任何錯誤。並且在while
循環中我比較了c
這是一個char
和EOF
這是一個int
並且編譯器不會拋出任何錯誤並執行我的程序!
爲什麼編譯器不會在上述兩種情況下拋出任何錯誤?
在此先感謝。
C不是動態的,它只是允許在數值類型之間進行隱式轉換。第二個代碼將字符'\ xFF'解釋爲EOF(在EOF == -1的系統上),但第一個不會,因此getchar使用int。 – ughoavgfhw
爲什麼downvote? –
@ughoavgfhw我不一定非得是'\ xFF',而且在'char'無符號的機器上,它可以被編譯爲一個無限循環。 –