These kind of questions are highly standard-version dependent, so a general answer doesn't make much sense.
From a C89 draft (correct me if official C89 Standard is different, it's not freely avalaible):
The function called at program startup is named main.
The implementation declares no prototype for this function.
It can be defined with no parameters:
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[]) { /*...*/ }
C99 and C11 standard say the same but they add something at the and:
[...]
or equivalent;[9] or in some other implementation-defined manner.
[9] Thus, int can be replaced by a typedef name defined as int, or the type of argv can be written as char ** argv, and so on.
In general things that are not defined from the standard leads to undefined behavior, so that code is UB in C89/C90, and it could be valid in C99 and C11, but that's implementation-defined.
P. S.: as you can see, you should also add void
in the parameters list, without it the behavior is defined as above.