Reputation: 462
Why would compiling a program which has an int main(void)
main function differ from compiling a program which has an int main(int argc, char *argv[])
main function, if the program does not use arguments passed on the command line?
Is this OS or compiler specific? I do not get the same results using mingw and g++(which is weird isn't it as wingw is a port of gcc).
#include <iostream>
#include"SDL/SDL.h"
int main(void)
{
return 0;
}
g++ test.cpp; #g++ 4.4.5
i586-mingw32msvc-g++ test.cpp; # mingw 4.4.4
(Given by the second command.)
a(main.o):(.text+0x85): undefined reference to `_WinMain@16'
Upvotes: 6
Views: 3463
Reputation: 55395
This is SDL thing. On Windows, when you include SDL.h
,main
is redefined to SDL_main
which calls WinMain
(the real entry point in non-console Windows apps), does some initialization and finally calls your main code. It has a signature with argc
and argv
and you're pretty much required to follow it, so int main()
won't work.
Upvotes: 11
Reputation: 596
The specification of main(...) is a contract. In the C language, the contract says that the arguments are int and char **. This is a requirement your program has to fulfill, if it wants the environment to interact with it.
Whether or not your program wants to use the parameters is a different issue -- it just has to abide by the contract that there is a functiona named main, with the correct order and type of parameters.
Upvotes: -1