为什么在此代码中,-cd = c11 / c99未显示gcc的特定警告违规?

时间:2015-07-09 11:59:40

标签: gcc gcc-warning

如果我编译这个程序

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

3 个答案:

答案 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

我老了,也许情况发生了变化。 : - )