Orphaned Response
karl at haddock
karl at haddock
Sat Sep 6 01:09:00 AEST 1986
killer!tad (Tad Marko) writes:
>In my original article, ... I was asking if I should use
>"foo(parm) char **parm; {...}" or "foo(parm) char *parm[]; {...}"
>and I *DID* test both of them, and they both worked.
Okay, that's a more sensible question. The official truth is that in this
context, they are equivalent. However, my *personal opinion* is that the
former is "more correct"; the latter is a kludge where the compiler figures
out what you "must have really meant" and converts it for you. (Kind of like
how some compilers will interpret "&a" as "&a[0]" if "a" is an array, though
in that case you'll probably get a warning at least.)
My recommendation is to write "char **parm"; it causes less confusion. Even
if you do write "char *parm[]", you are declaring a pointer, not an array.
(Similarly, a formal argument declared "float parm" really declares a double,
which is also quite confusing, e.g. if you take its address.)
Oh yes, some compilers used to consider a parameter declared "type x[]" to be
a *non-modifiable* pointer to type. That no longer seems to be popular.
Karl W. Z. Heuer (ima!haddock!karl; karl at haddock.isc.com), The Walking Lint
More information about the Comp.lang.c
mailing list