Tue, Dec 04, 2007 at 05:25:35PM +0000, Alexey Dokuchaev wrote: > > *ptr++ would choke since pointer arith on (void *) is undefined AFAIK. > > I've been under impression that ++ on void * whould simply increase it > by one.
This behaviour is documented for GCC: http://www.mcs.vuw.ac.nz/cgi-bin/info2www?(gcc)Pointer+Arith Just for the record (gcc 4.2.1): ----- $ gcc -o test -Wall -ansi -pedantic test.c test.c: In function 'main': test.c:9: warning: wrong type argument to increment $ ./test '2' $ g++ -o test -Wall -ansi test.c test.c: In function 'int main()': test.c:9: error: ISO C++ forbids incrementing a pointer of type 'void*' $ cat test.c #include <stdio.h> int main(void) { char c[] = "123456789abcdef"; void *p = c; p++; printf("'%c'\n", *((char *)p)); return 0; } ----- It seems to me that ++ adds one to the void pointer because it is demanded by C99 (ISO/IEC 9899:TC2, 6.2.5, requirement 26, page 36) that 'char *' and 'void *' have the same representation and alignment requirements. So, it seems to me that (p++) has implicit conversion from 'void *' to 'char *' for 'void *p', at least it can be interpreted in this way. But some people say that void* arithmetics is GCC'ism. It worth to note that the warning about void* arithmetics lived in GCC at least since 1992: see http://gcc.gnu.org/viewcvs/trunk/gcc/c-typeck.c?revision=364&view=markup function 'pointer_int_sum'. And the problem of 'void *' arithmetics had been touched in the -current a while ago: http://lists.freebsd.org/pipermail/freebsd-current/2003-July/006439.html I am failing to find a place in the C standard where void arithmetics is prohibited, but I can be blind. Anyone? -- Eygene _______________________________________________ cvs-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/cvs-all To unsubscribe, send any mail to "[EMAIL PROTECTED]"