我有以下代码的可移植性一个C代码
int main()
{
int a=6;
void *p;
p=&a;
p++;
}
是否空指针由一个特定的值递增这里(如果它保持任何数据类型的地址)?
在上述情况下,即使指向一个整数值,p
也会增加1。根据我上面的代码调用Implementation Defined
行为。
我有以下代码的可移植性一个C代码
int main()
{
int a=6;
void *p;
p=&a;
p++;
}
是否空指针由一个特定的值递增这里(如果它保持任何数据类型的地址)?
在上述情况下,即使指向一个整数值,p
也会增加1。根据我上面的代码调用Implementation Defined
行为。
从标准C的角度来看,该代码无效。指定void *
指针或指向不完整类型的指针是非法的。
您的编译器将它作为扩展来实现,当然这是不可移植的。
将++运算符应用到void*
是一个GCC扩展,我被告知使某些事情对于非常低级别的编程更为方便(基本上不需要投入太多)。我认为我从来没有遇到过我不想投注到unsigned char*
的情况。
如果您正在编写应该是便携式的代码,请使用-pedantic
标志。
+1为迂腐的国旗 – Macmade 2010-03-11 12:47:50
感谢您的回答。 :) – 2010-03-11 12:46:24