C代码的可移植性

时间:2010-03-11 12:41:06

标签: c portability

我有以下代码

int main()
{
   int a=6;
   void *p;
   p=&a;
   p++;
}

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

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

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

除了AndreyT的回答:

查看stdint.h,使您的代码更具便携性。