Это продолжение этого вопроса.
Я пытаюсь избежать использования явного 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, если оно законно.