Den4ik
Den4ik

Reputation: 43

GCC C99 Disable compilation of main() without return

How to force gcc compilator throw error when int main() have no return statement. This code compiles without any errors

#include<stdio.h>

int main(){
   printf("Hi");
}

I am using

gcc  -Wall -Wextra -std=c99 -Wreturn-type -Werror -pedantic-errors a.c

command for compilation

Upvotes: 4

Views: 94

Answers (3)

Eric Postpischil
Eric Postpischil

Reputation: 223795

You can avoid the special treatment that main receives by renaming it. Compiling with -Dmain=AlternateName -Werror=return-type yields “error: control reaches end of non-void function”.

Naturally, you would do this as a special compilation to test for the issue and not use the object module resulting from this compilation. A second normal compilation without -Dmain=AlternateName would be used to generate the object module.

Upvotes: 3

0___________
0___________

Reputation: 67835

It is not possible as it correct in C99

5.1.2.2.3 Program termination 1 If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument; 11) reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified.

Upvotes: -1

dbush
dbush

Reputation: 224842

This can't be disabled, as such behavior would be in violation of the C99 standard.

Section 5.1.2.2.3 of C99 states the following regarding the main function:

If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument; reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified.

Upvotes: 2

Related Questions