转换/赋值中不兼容的结构类型?

Ale*_*nze 5 c struct

这是这个问题的后续行动.

我试图避免使用显式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的行为背后是否存在合理的理由,如果它是合法的.

K-b*_*llo 6

gcc行为是正确的,类型是两个不相关的未命名结构.每个结构虽然具有相同的内存布局,但具有不同的名称.如果你真的想这样做,那么使用typedef.