I recently had to type in a small C test program and, in the process, I made a spelling mistake in the main function by accidentally using vooid
instead of
It's simply using the "old-style" function-declaration syntax; you're implicitly declaring an int
parameter called vooid
.
It's valid code, because myprog.c contains:
int main (vooid) // vooid is of type int, allowed, and an alias for argc
{
return 42; // The answer to the Ultimate Question
}
vooid
contains one plus the number of arguments passed (i.e., argc
). So, in effect all you've done is to rename argc
to vooid
.
In C, the default type for a function argument is int
. So, your program is treating the word vooid
as int main(int vooid)
, which is perfectly valid code.
It is only gcc -std=c89 -Wall -o qq qq.c
and gcc -std=gnu89 -Wall -o qq qq.c
don't emit a warning. All the other standards emit a warning about implicit type int
for vooid
.
int main(chart)
behaves the same way as does int main (vooid)
.
return vooid;
returns the number of command line arguments.
I tested with gcc 4.4.5 on Debian testing system.