#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