这是这个问题的后续行动.
我试图避免使用显式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;
}
Run Code Online (Sandbox Code Playgroud)
随着gcc我得到了arrcpy.c:8: error: incompatible types in assignment,但是使用Open Watcom,它编译得很好(并按照我的预期工作,打印1到3).
gcc的行为是否符合标准?如果是,那么相关的章节是什么?我无法理解为什么两个相同的类型定义struct{int _[3];}在gcc的眼中是不相同的(或兼容的).
编辑:我完全知道这是一个糟糕的编码风格.问题是关于另一件事.我很好奇gcc的行为背后是否存在合理的理由,如果它是合法的.