Click here to Skip to main content
15,303,572 members
Please Sign up or sign in to vote.
2.56/5 (5 votes)
See more:
Hi expert, My c code is here:

void main(){

printf("Hello world");


The codeblock shows the error:

||warning: command line option '-Wzero-as-null-pointer-constant' is valid for C++/ObjC++ but not for C [enabled by default]|
C:\Users\Amir Khasru\Desktop\pointers.c|2|error: return type of 'main' is not 'int' [-Wmain]|
||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

What I have tried:

I tried to compile the above code through codeblock though never succeed. Please explain this?
Updated 19-Jan-22 21:39pm
PIEBALDconsult 12-Mar-16 13:57pm
What compiler? What error do you get?
Please use Improve question to add context and detail.
Member 12378355we 12-Mar-16 14:11pm
Code block!! I updated!
PIEBALDconsult 12-Mar-16 14:23pm
OK, so it looks like it's a non-conforming compiler, how odd. Change the return type to int or use a better compiler.
Member 12378355we 12-Mar-16 15:24pm
Member 12378355we 12-Mar-16 15:40pm
So we could even return char,float,double, pointer type data from main()....:))
PIEBALDconsult 12-Mar-16 17:47pm
No. Int or nothing.
[no name] 12-Mar-16 14:31pm
No Need to give a '1' for the question. Does the voter remember the time he/she started programming?
My small 5 to correct this a Little bit.
Member 12378355we 12-Mar-16 15:26pm
I've just started my coding, you know. Thanks.

Because main have to return an int.
See ISO/IEC 9899 (C99) and ISO/IEC 9899:201x (C11) at § Program startup:

The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;10) or in some other implementation-defined manner.

You can define main with the 2 parameters int argc and char *argv[], or nothing. But the returns, as per all current standards, cannot be void.
Anyway some compilers allow the form void main(void) { /* ... */ } as private extension not standard compliant.
From a C language point of view, this code is perfectly legal.
void main(){
    printf("Hello world");

So the only possibility is that the compiler do not conform to C language or do not run in C mode. As PIEBALDconsult said, "It is compiler dependent".
Member 12378355we 13-Mar-16 6:55am
Could char/float/double/* main() be possible?
PIEBALDconsult 13-Mar-16 13:22pm
manoranjan 14-Mar-16 3:37am
This is not the right answer. main() function returns int (and not void). See Solution 2.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900