2010-03-11 103 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