2010-03-11 99 views
4

我有以下代码的可移植性一个C代码

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

是否空指针由一个特定的值递增这里(如果它保持任何数据类型的地址)?

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

回答

7

从标准C的角度来看,该代码无效。指定void *指针或指向不完整类型的指针是非法的。

您的编译器将它作为扩展来实现,当然这是不可移植的。

+0

感谢您的回答。 :) – 2010-03-11 12:46:24

5

将++运算符应用到void*是一个GCC扩展,我被告知使某些事情对于非常低级别的编程更为方便(基本上不需要投入太多)。我认为我从来没有遇到过我不想投注到unsigned char*的情况。

如果您正在编写应该是便携式的代码,请使用-pedantic标志。

+0

+1为迂腐的国旗 – Macmade 2010-03-11 12:47:50