Java 当返回路径没有预期的返回类型时,没有编译时错误

Java 当返回路径没有预期的返回类型时,没有编译时错误,java,c,Java,C,我想知道为什么下面的代码在编译过程中没有抛出错误: #include <stdio.h> char * func (char *); int main() { func("TINFO"); func("INFO"); } char * func(char * str) { if (str[0] == 'T') return str + 1; } 您所要做的就是提高编译器的“警告”级别 例如: $ gcc -o x x.c <= DEFA

我想知道为什么下面的代码在编译过程中没有抛出错误:

#include <stdio.h>
char * func (char *);

int main()
{
    func("TINFO");
    func("INFO");
}

char * func(char * str)
{
    if (str[0] == 'T')
    return str + 1;
}

您所要做的就是提高编译器的“警告”级别

例如:

$ gcc -o x x.c
  <= DEFAULT: No warnings, no errors

$ gcc -Wall -pedantic -o x x.c
x.c: In function `main':
x.c:14: warning: control reaches end of non-void function
x.c: In function `func':
x.c:24: warning: control reaches end of non-void function
$gcc-o x x.c

根据C标准6.9.1.12,只有在调用方使用返回值时,到达函数末尾才是未定义的行为:

如果到达了终止函数的
}
,并且调用方使用了函数调用的值,则行为未定义


这就是为什么编译器必须让这段代码编译。

但这是一个警告,而不是Java所做的错误(对于类似的代码)。发布Java翻译以查看错误
$ gcc -o x x.c
  <= DEFAULT: No warnings, no errors

$ gcc -Wall -pedantic -o x x.c
x.c: In function `main':
x.c:14: warning: control reaches end of non-void function
x.c: In function `func':
x.c:24: warning: control reaches end of non-void function