несовместимые типы структур в кастах/присвоении?

Это продолжение этого вопроса.

Я пытаюсь избежать использования явного typedef для копирования одного массива в другой через приведение, как это:

#include 

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, однако с Open Watcom он компилируется нормально (и работает, как я ожидаю, печатая от 1 до 3).

Соответствует ли поведение gcc стандарту или нет? Если да, то какая соответствующая глава и раздел? Я не могу понять, почему два одинаковых определения типов struct{int _[3];} не являются одинаковыми (или совместимыми) в глазах gcc.

EDIT: Я прекрасно знаю, что это плохой стиль кодирования. Вопрос в другом. Мне интересно, есть ли логическое обоснование такого поведения gcc, если оно законно.

5
задан Community 23 May 2017 в 10:34
поделиться