This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/53232] New: No warning for main() without a return statement with -std=c99
- From: "vincent-gcc at vinc17 dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 04 May 2012 12:55:49 +0000
- Subject: [Bug c/53232] New: No warning for main() without a return statement with -std=c99
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53232
Bug #: 53232
Summary: No warning for main() without a return statement with
-std=c99
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: vincent-gcc@vinc17.net
On the following program, GCC (4.4 to 4.7 at least) invoked with -std=c99
-Wreturn-type doesn't give a warning about the missing return statement.
#include <stdio.h>
static int i = 0;
int main (void)
{
if (i++ == 0)
printf ("%d\n", main ());
}
According to the C99 rules, it seems that the return statement is optional only
for program termination. Though this is ambiguous, someone else at least has
the same interpretation as me:
http://groups.google.com/group/comp.std.c/msg/c2f56fecfb699952
Before seeing this message, I posted
http://groups.google.com/group/comp.std.c/browse_thread/thread/0187ef7b23bedf16
to comp.std.c (Subject: main function without a return statement in C99/C11).
Also, I think that the warning should be given in every case for the following
reasons:
* A missing return statement may be unintentional (I think that implicit values
like here should be discouraged in general, and that the C99 rule is there more
to avoid undefined behavior than to save space).
* Compatibility with C90 and with freestanding environments.
* It is difficult to guarantee that main() will not be called from another C
file.