#include <stdio.h>
char toUpper(char);
int main(void)
{
char ch, ch2;
printf("lowercase input : ");
ch = getchar();
ch2 = toUpper(ch);
printf("%c ==> %c\n", ch, ch2);
return 0;
}
char toUpper(char c)
{
if(c>='a'&&c<='z')
c = c - 32;
}
在TOUPPER函數,返回類型是char,但在TOUPPER沒有 「返回」()。並用gcc(GCC)4.5.1 20100924(Red Hat 4.5.1-4),fedora-14編譯源代碼。GCC爲什麼以及如何編譯一個缺少return語句的函數?
當然,發出警告:「警告:控制到達非void函數結束」,但是,運作良好。
使用gcc進行編譯時,代碼中發生了什麼? 我想在這種情況下得到一個堅實的答案。 謝謝:)
聞起來像未定義行爲。 – ThiefMaster
@ThiefMaster:它**是** UB。他很幸運,通常放置返回值的寄存器恰好也用於減法。 –
謝謝大家:) – harrison