scrogged argc, argv (was: system 5 vrs. bsd4.3 question)

Roger B.A. Klorese rogerk at mips.COM
Wed Sep 6 11:54:57 AEST 1989


In article <10940 at smoke.BRL.MIL> gwyn at brl.arpa (Doug Gwyn) writes:
>In article <28398 at beta.lanl.gov> dxk at beta.lanl.gov (David M Koon) writes:
>-#include <stdio.h>
>-#include <string.h>
>-#include <time.h>
>-#include "cffs.h"
>-main(argc,argv)
>-int argc;
>-char *argv[];
>-{
>-....
>-However, on the SGI machine argc is undefined and argv seems to contain
>-the environmental variables.  Does anyone have any ideas as to what is 
>-causing this and how I can fix it?
>
>The last time someone asked this, it turned out that the preceding
>header ("cffs.h" in this case) contained an error that affected the
>apparent return type associated with main().  Fix "cffs.h".

More specifically:

if "cffs.h" ends with a struct declaration of the form

struct foo
{
....
}

rather than the proper

struct foo
{
...
};

(note the semicolon)

...you get hit by the fact that the compiler then classes the return
of main() as a struct foo, rather than as an int.  The MIPS C compiler
shifts the argument list over by one to accomodate the return value of
a struct-valued function.  This is cool, unless the function is declared
as "struct foo" and called (by the startup code) as "int", in which
case argv will be where you think argc ought to be, and envp will be
where you think argv should be.
-- 
ROGER B.A. KLORESE      MIPS Computer Systems, Inc.      phone: +1 408 720-2939
928 E. Arques Ave.  Sunnyvale, CA  94086                        rogerk at mips.COM
{ames,decwrl,pyramid}!mips!rogerk
"I want to live where it's always Saturday."  -- Guadalcanal Diary



More information about the Comp.unix.wizards mailing list