Сегодня утром мы обнаружили старый кусок кода, вызывающий сбои в вызове библиотеки.
struct fred
{
int a;
int b;
int c;
};
fred fred[MAX_SIZE+1];
memset( fred, 0, sizeof(fred) * MAX_SIZE+1 );
Похоже, что sizeof (fred), возможно, был размером полного массива, а не размером структуры, поскольку он переписывал большую часть памяти.
Тот факт, что он был скомпилирован без предупреждения в нескольких разных системах, казался странным.
Есть ли правильная семантика для этого случая, когда тип и имя переменной сталкиваются? или это что-то вроде поведения undefined? или просто дефект?