【发布时间】:2018-05-18 20:14:46
【问题描述】:
#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()中没有“return”。并用 gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4), fedora-14 编译源代码。
当然,会发出警告:“警告:控制到达非无效函数的结尾”,但是,运行良好。
在使用 gcc 编译期间,该代码发生了什么? 在这种情况下,我想得到一个可靠的答案。 谢谢:)
【问题讨论】:
-
闻起来像未定义的行为。
-
@ThiefMaster:它是 UB。他很幸运,通常放置返回值的寄存器恰好也用于减法。