Bevor C standardisiert wurde, hätten viele Compiler keine Schwierigkeiten gehabt, mit Typen mit der Größe Null umzugehen, solange der Code nie versucht hätte, einen Zeiger auf einen Typ mit der Größe Null von einem anderen zu subtrahieren. Solche Typen waren nützlich, und ihre Unterstützung war einfacher und billiger als das Verbot. Andere Compiler haben sich jedoch entschlossen, solche Typen zu verbieten, und einige statische Assertionscodes haben sich möglicherweise auf die Tatsache gestützt, dass sie kreischen würden, wenn Code versuchen würde, ein Array mit der Größe Null zu erstellen. Die Autoren des Standards standen vor der Wahl:
Ermöglichen Sie Compilern, stillschweigend Array-Deklarationen mit der Größe Null zu akzeptieren, selbst wenn der Zweck solcher Deklarationen darin besteht, eine Diagnose auszulösen und die Kompilierung abzubrechen, und verlangen Sie, dass alle Compiler solche Deklarationen akzeptieren (wenn auch nicht unbedingt stillschweigend), um Objekte mit der Größe Null zu erzeugen .
Ermöglichen Sie Compilern, Array-Deklarationen mit der Größe Null stillschweigend zu akzeptieren, selbst wenn der Zweck solcher Deklarationen darin besteht, eine Diagnose- und Abbruchkompilierung auszulösen, und Compilern, die auf solche Deklarationen stoßen, die Kompilierung entweder abzubrechen oder nach Belieben fortzusetzen.
Erfordern, dass Implementierungen eine Diagnose ausgeben, wenn Code ein Array mit der Größe Null deklariert, aber dann Implementierungen erlauben, die Kompilierung entweder abzubrechen oder nach Belieben fortzusetzen (mit welcher Semantik sie dies für richtig halten).
Die Autoren des Standards entschieden sich für # 3. Folglich werden Array-Deklarationen mit der Größe Null von der Standard- "Erweiterung" berücksichtigt, obwohl solche Konstrukte weitgehend unterstützt wurden, bevor der Standard sie verbot.
Der C ++ - Standard erlaubt das Vorhandensein leerer Objekte. Um jedoch zu ermöglichen, dass die Adressen leerer Objekte als Token verwendet werden können, muss sie eine Mindestgröße von 1 haben. Für ein Objekt ohne Mitglieder muss eine Größe von 1 vorhanden sein 0 würde somit den Standard verletzen. Wenn ein Objekt jedoch Elemente mit der Größe Null enthält, stellt der C ++ - Standard keine Anforderungen an die Verarbeitung, außer dass ein Programm, das eine solche Deklaration enthält, eine Diagnose auslösen muss. Da der meiste Code, der solche Deklarationen verwendet, erwartet, dass die resultierenden Objekte eine Größe von Null haben, besteht das nützlichste Verhalten für Compiler, die solchen Code erhalten, darin, sie so zu behandeln.