标签: c portability
我有以下代码
int main() { int a=6; void *p; p=&a; p++; }
此处的void指针是否按特定值递增(如果它保存任何数据类型的地址)?
在上面的情况下p增加1,即使它指向一个整数值。据我所知,上面的代码调用Implementation Defined行为。
p
Implementation Defined
答案 0 :(得分:7)
从标准C的角度来看,代码无效。增加void *指针或任何其他指向不完整类型的指针是违法的。
void *
您的编译器将其实现为扩展,当然,这是非可移植的。
答案 1 :(得分:5)
将++运算符应用于void*是一个GCC扩展,我被告知这使得某些事情对于非常低级别的编程更加方便(基本上不必抛出那么多)。我认为我从来没有遇到过我认真地不想施展到unsigned char*的情况。
void*
unsigned char*
如果您正在编写应该是可移植的代码,请使用-pedantic标志。
-pedantic
答案 2 :(得分:1)
除了AndreyT的回答:
查看stdint.h,使您的代码更具便携性。