我有以下代碼的可移植性一個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