如果我编译这个程序
main() {}
带
gcc -Wall -Wextra -Wpedantic smallest_program.c
gcc说:
smallest_program.c:2:1: warning: return type defaults to ‘int’ [-Wreturn-type]
main() { }
^
smallest_program.c: In function ‘main’:
smallest_program.c:2:1: warning: control reaches end of non-void function [-Wreturn-type]
main() { }
如果我添加C11或C99作为标准:
gcc -std=c11 -Wall -Wextra -Wpedantic smallest_program.c
警告是:
smallest_program.c:2:1: warning: return type defaults to ‘int’
main() { }
我看来 C11 如果省略它,C99在main中添加了一个隐式返回语句。但为什么缺少返回类型的警告不会长时间包含违反的特定警告: [ - Wreturn-type] ?
这是来自 gcc(Ubuntu 4.9.2-0ubuntu1~14.04)4.9.2
答案 0 :(得分:3)
由于隐式int
规则已被删除,因此不会出现警告标志的问题,但在C11下,必须提供诊断,有或没有警告选项。因此,你不能沉默那种诊断。
答案 1 :(得分:2)
关于隐式int
返回的警告消息的区别,在C11(IIRC,自C99)中不允许隐式enabled by default
,因此无论警告是什么/警告都将始终显示警告/您启用的错误(它是“return 0;
”。)换句话说,您不必被要求发出警告,因为实施必须为您提供诊断。
关于到达非空函数结束的控制,自C99起,C在main
函数中具有隐式@model List<CimenaCityProject.Models.MovieTheaters>
@{
var selectlist = (SelectList)ViewBag.HomeCinemaID;
}
。这就是为什么在C11模式下编译不会产生警告的原因。
答案 2 :(得分:0)
因为你在main的开头错过了void - 它将默认为int - 因为它也假定int作为传入的参数,因为那里也没有空白。
我建议你尝试以下主要...
::after
我老了,也许情况发生了变化。 : - )