这不是gcc的bug
一些人说,gcc可以安静地编译下面的程序:
void foo(void *p)
{
++p;
}
所以这是gcc的一个bug。很不幸,这一个feature,而不是bug。gcc手册中明显地提到:
In GNU C, addition and subtraction operations are supported on pointers
tovoid' and on pointers to functions. This is done by treating the size of a
void’ or of a function as 1.
如果你对此不满,那就打开-Wpointer-arith。(不过话说回来了,-Wall -W居然都不会打开这个选项~~)而Intel C编译器就可以给出警告:
foo.c(3): warning #1338: arithmetic on pointer to void or function type
++p;
^
当然了,标准肯定是不允许对void*进行算术操作,原因很简单,因为它指向的对象大小不知道。参见C99 6.5.6。