C代码的可移植性

Ash*_*dav 4 c portability

我有以下代码

int main()
{
   int a=6;
   void *p;
   p=&a;
   p++;
}
Run Code Online (Sandbox Code Playgroud)

这里的void指针是否按特定值递增(如果它保存任何数据类型的地址)?

在上面的情况下p,即使它指向一个整数值,也会增加1.据我所知,上面的代码调用Implementation Defined行为.

AnT*_*AnT 7

从标准C的角度来看,代码无效.增加void *指针或任何其他指向不完整类型的指针是违法的.

您的编译器将其实现为扩展,当然,它是非可移植的.


Ste*_*sop 5

应用++运算符void*是一个GCC扩展,我被告知这使得某些事情对于非常低级别的编程更加方便(基本上不必抛出那么多).我认为我从未遇到过我认真不想投的情况unsigned char*.

-pedantic如果您正在编写应该是可移植的代码,请使用该标志.