[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH] apr_getopt_long interface update and interleaving support

From: Greg Hudson <ghudson_at_MIT.EDU>
Date: 2000-11-25 01:50:34 CET

>> It wasn't "const char *const *argv" before because a "char **"
>> argument is not compatible with such a parameter, and C programs
>> canonically take "char **argv", not "const char *const *argv". I'm
>> not sure if it's even valid C to silently change from char * to const
>> char * without an explicit cast, which is what you'd be doing if you
>> wrote a main() which accepted a list of const char pointers intead of
>> a list of char pointers.

> Don't be silly, you can always pass a non-const value for a const
> arg. Same with silent promotions of int to long, etc.

The compiler can only promote the top-level parameter, not the
contents of an array. Observe:

equal-rites% cat test.c
void foo(const char *const *a) { ; }
void bar() { char **b = 0; foo(b); }
equal-rites% gcc -c -Wall test.c
test.c: In function `bar':
test.c:2: warning: passing arg 1 of `foo' from incompatible pointer type
Received on Sat Oct 21 14:36:15 2006

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.