guy@auspex.auspex.com (Guy Harris) (07/22/89)
>Sounds like SGI has an unusual argument passing method. Nope. It turned out the problem was that he'd written something like: struct foobar { ... } <<<<<<<<<<<<<NOTE: missing semicolon! main(argc, argv) int argc; char *argv[]; { ... The missing semicolon caused the "struct" declaration to get glued to the definition of "main", so that "main" was being defined as returning a "struct foobar". This presumably changed the calling sequence of "main" in such a way as to scramble the incoming arguments. I've seen this error crop up before; it's certainly easy enough to make. ("For want of a semicolon, the program was lost....") I like to explicitly declare the return type of *all* functions, even those returning "int", and at least in ANSI C (and in most UNIX C implementation) "main" does, in fact, return "int", so I declare it as such. I just realized that doing so can also catch this particular mistake, since, while struct foobar { ... } main(argc, argv) ... is legal (yes, really), struct foobar { ... } int main(argc, argv) ... isn't. So, always declare "main" as returning "int"; it may catch that error someday....