До того, як C був стандартизований, багато компіляторів не мали б труднощів з обробкою типів нульового розміру, поки код ніколи не намагався відняти один вказівник на тип нульового розміру від іншого. Такі типи були корисними, і підтримувати їх було простіше і дешевше, ніж забороняти. Однак інші компілятори вирішили заборонити подібні типи, і деякі коди статичного твердження, можливо, покладались на той факт, що вони будуть кричати, якби код намагався створити масив нульового розміру. Автори «Стандарту» постали перед вибором:
Дозволити компіляторам мовчки приймати декларації масиву нульового розміру, навіть у тих випадках, коли метою таких декларацій буде ініціювати діагностику та перервати компіляцію, і вимагати, щоб усі компілятори приймали такі декларації (хоча і не обов'язково мовчки) як об'єкти нульового розміру. .
Дозвольте компіляторам мовчки приймати декларації масиву нульового розміру, навіть у тих випадках, коли метою таких декларацій буде ініціювати діагностику та перервати компіляцію, і дозволити компіляторам, які стикаються з такими деклараціями, або скасувати компіляцію, або продовжити її на дозвіллі.
Вимагайте, щоб реалізації видавали діагностику, якщо код оголошує масив нульового розміру, але потім дозволити реалізаціям або перервати компіляцію, або продовжити її (з будь-якою семантикою, яку вони вважають за потрібне) на дозвіллі.
Автори «Стандарту» обрали № 3. Отже, декларації масиву нульового розміру розглядаються Стандартним "розширенням", навіть незважаючи на те, що такі конструкції широко підтримувались до того, як Стандарт забороняв їх.
Стандарт C ++ допускає існування порожніх об'єктів, але, намагаючись дозволити адреси порожніх об'єктів використовуватись як маркери, він передбачає мінімальний розмір 1. Для об'єкта, який не має членів, розмір 0, таким чином, порушить Стандарт. Однак, якщо об'єкт містить члени нульового розміру, стандарт C ++ не встановлює жодних вимог щодо того, як він обробляється, окрім того, що програма, що містить таке оголошення, повинна запускати діагностику. Оскільки більшість коду, який використовує такі оголошення, очікує, що отримані об'єкти матимуть нульовий розмір, найкориснішою поведінкою компіляторів, які отримують такий код, є поводження з ними таким чином.