遇到一个编译错误如下:pointer to void not legal here
用的是Green Hill的编译器
追踪到最好发现是因为void *类型的指针不能加上一个偏移值。举例如下:
头文件中定义一个宏:
#define rawWrite(addr, offset) (*(volatile unsigned short *)((addr) + (offset)))
然后在别的地方用它:
void *pBase = 0x0;
rawWrite(pBase, 0x1);
这时候编译器就会报错。
但这样的Code在Linux下能编译通过,而且经过测试,指针会实际偏移1个地址。而不是4个。所以在不能通过的编译器上,我们可以将它改为char *型。至于Linux中为什么要这样用,以后有时间再去研究。或者哪位大虾知道,请指点。谢谢!