Why isn't argv[argc]==(char *)0 ?

Michael Meissner meissner at dg-rtp.dg.com
Sat Nov 18 01:49:04 AEST 1989


In article <547.nlhp3 at oracle.nl> bengsig at oracle.nl (Bjorn Engsig) writes:

|  The execv family of system calls all have  char *argv[]  as their second
|  parameter, and you are required to put an endmarker as  (char *)0  in it.
|  On the other hand, main has  int argc  and  char *argv[]  but here, the
|  endmarker has disappeared.  Has it ever been considered to change the defi-
|  nition of main such that it will always be true that  argv[argc] == (char *)0
|  or to change the execv's to use argc and not an endmarker.
|  
|  Is it due to the fact that main() is a C-thing whereas exec() is a Unix thing,
|  and they therefore are incompatible?  If this is the case, why isn't there a
|  system() counterpart in the scope of C with the same parameters as main()?
|  
|  It is probably much too late to change anything, but I would just like to 
|  know if this has ever been considered.

I don't know what version of the standard you are reading, but in the
draft dated December 7, 1988, it states in section 2.1.2.2 on page 8:

If they are defined, the parameters to the main function shall obey
the following constraints:

* The value of argc shall be nonegative.

* argv[argc] shall be a null pointer.

...

Note, this effectively rules out a ANSI C implementation on a Version
6 system (V6 for whatever reason, put -1 in argv[argc], and had a note
in the exec* man pages that you couldn't pass argv to execve).  I
seriously doubt anybody is worried about this....

--

Michael Meissner, Data General.				If compiles where much
Uucp:		...!mcnc!rti!xyzzy!meissner		faster, when would we
Internet:	meissner at dg-rtp.DG.COM			have time for netnews?



More information about the Comp.unix.wizards mailing list