On Mon, Jul 21, 2003 at 11:24:43AM -0700, Tim Kientzle wrote: > Chad David wrote: > >I assumed it was obvious that you could copy the data, but I believe > >the intent of the original question was to find an alternative. As > >far as I know there isn't one. A const is a const, except in C++. > > Yes, the intent was to find a way to avoid copying the data. > > I was hoping that someone knew a standard way to > say "yes, I really do mean to cast away that const," > akin to C++ const_cast. > > As far as I can tell, the POSIX-mandated declaration > of execvp is simply wrong. (SUSv3 even has a comment > that essentially admits this fact and then vainly tries > to rationalize it. <sigh>)
I mailed this a long time ago: char * func(void) { char *foo; const char *cfoo = "bar"; /* From http://www.eskimo.com/~scs/C-faq/q11.10.html: * * References: ANSI Sec. 3.1.2.6, Sec. 3.3.16.1, Sec. 3.5.3 * ISO Sec. 6.1.2.6, Sec. 6.3.16.1, Sec. 6.5.3 * H&S Sec. 7.9.1 pp. 221-2 * * Use -Wcast-qual with gcc. * gcc 2.7.2.3 ok, gcc 2.95.2 not ok. */ foo = *((char *const *) &cfoo); return (foo); } But that doesn't work after 2.7.2 What does work, except with 2.95 is this: foo = *((char **)((void *)&cfoo))); Then again: you can always use the union trick: union { void *nonconst; const void *constant; } hack; hack.constant = cfoo; foo = hack.nonconst; Zlo _______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"