這是this question的後續行動。在casts/assignment中不兼容的結構類型?
我試圖避免使用顯式的typedef到一個數組複製到另一個通過強制轉換是這樣的:
#include <stdio.h>
int main(void)
{
int i;
int dst[] = { 10, 20, 30 }, src[] = { 1, 2, 3 };
*(struct{int _[3];}*)dst = *(struct{int _[3];}*)src;
for (i = 0; i < 3; i++) printf("%d\n", dst[i]);
return 0;
}
用gcc我得到arrcpy.c:8: error: incompatible types in assignment
,但與開放式WATCOM它編譯罰款(並按我期望的那樣工作,打印1到3)。
gcc的行爲是否符合標準?如果是,相關的章節是什麼?我不明白爲什麼兩個相同的類型定義struct{int _[3];}
在gcc的眼中不相同(或兼容)。
編輯:我完全知道這是一種糟糕的編碼風格。問題是關於另一件事。我很好奇,如果gcc的行爲背後有一個合理的理由,那麼它是合法的。
無論這是可能是一個問題。但編寫代碼絕對是一種可怕的方式,除非你準備提交混淆的C比賽的提交。 – TJD
你爲什麼要避免typedef?這將有助於分解冗餘結構規範。 –
'memcpy(3)'有什麼問題? – sarnold