Declaration of main() in gcc.c
Dave Korn
davek-ml@ntlworld.com
Tue Apr 10 14:25:00 GMT 2001
----- Original Message -----
From: "Billinghurst, David (CRTS)" <David.Billinghurst@riotinto.com>
Sent: Tuesday, April 10, 2001 2:58 AM
> I don't understand why gcc.c declares main as
>
> extern int main PARAMS ((int, const char *const *));
>
> int
> main (argc, argv)
> int argc;
> const char *const *argv;
>
> Shouldn't in be ...
>
> extern int main PARAMS ((int, char **));
>
> int
> main (argc, argv)
> int argc;
> char *argv[];
>
Hi David,
Well, on some systems, modifying any of the pointers in the argv array, or
even any of the strings they point to, is a big no-no. So declaring it this
way makes sure nobody ever makes such a modification to gcc. It would work
on some systems, but not others, and that would break gcc's compatibility.
Technically, since the environment is going to pass a char **, there's no
problem passing it to a function that wants a const * const *; that simply
restricts the receiving function from modifying it, even if it was
theoretically modifiable.
Note that it wasn't me who did it this way, I haven't looked into the
history, and I don't actually know all this for a fact; I'm just
extrapolating from the general principles of software engineering in order
to 'reverse engineer' the thinking of whoever wrote it that way in the first
place!
DaveK
More information about the Gcc-bugs
mailing list