爲什麼在gcc中編譯下面的代碼不會產生任何類型不匹配警告? -1
是INT類型,f()
預計鍵入字符:爲什麼gcc不會爲int和char產生類型不匹配的警告?
void f(char c) {}
int main(void)
{
f(-1);
return 0;
}
即使我們明確地指定類型,也沒有警告:
void f(unsigned char c) {}
int main(void)
{
f((signed int)-1);
return 0;
}
什麼奇怪的是:如果我們指定超出範圍值時,將顯示警告:
void f(char c) {}
int main(void)
{
f(65535);
return 0;
}
warning: overflow in implicit constant conversion
gcc版本6.1.1
如果使該功能非空,會發生什麼情況? – talonmies
@talonmies void f(...){c ='x'; }' - 沒有區別 –
那麼,看看警告,「在隱式常量轉換中溢出」。你的第一個例子有溢出嗎?如果沒有,爲什麼編譯器會警告某些不存在的東西。 – hyde