Trước khi C được chuẩn hóa, nhiều trình biên dịch sẽ không gặp khó khăn gì khi xử lý các loại kích thước bằng không miễn là mã không bao giờ cố gắng trừ một con trỏ đến một loại kích thước bằng không từ một con trỏ khác. Những loại như vậy rất hữu ích, và hỗ trợ chúng dễ dàng hơn và rẻ hơn so với việc cấm chúng. Tuy nhiên, các trình biên dịch khác đã quyết định cấm các kiểu như vậy và một số mã xác nhận tĩnh có thể đã dựa trên thực tế là chúng sẽ gây nhiễu nếu mã cố gắng tạo một mảng có kích thước bằng không. Các tác giả của Tiêu chuẩn đã phải đối mặt với một sự lựa chọn:
Cho phép trình biên dịch chấp nhận âm thầm khai báo mảng có kích thước bằng không, ngay cả trong trường hợp mục đích của khai báo đó là kích hoạt quá trình biên dịch chẩn đoán và hủy bỏ, đồng thời yêu cầu tất cả trình biên dịch chấp nhận các khai báo đó (mặc dù không nhất thiết phải âm thầm) như tạo ra các đối tượng có kích thước bằng không .
Cho phép trình biên dịch chấp nhận một cách âm thầm các khai báo mảng có kích thước bằng 0, ngay cả trong trường hợp mục đích của các khai báo đó là kích hoạt quá trình biên dịch chẩn đoán và hủy bỏ, đồng thời cho phép các trình biên dịch gặp phải các khai báo như vậy để hủy biên dịch hoặc tiếp tục nó khi rảnh rỗi.
Yêu cầu các triển khai đưa ra một chẩn đoán nếu mã khai báo một mảng có kích thước bằng 0, nhưng sau đó cho phép các triển khai hủy bỏ quá trình biên dịch hoặc tiếp tục nó (với bất kỳ ngữ nghĩa nào họ thấy phù hợp) khi họ rảnh rỗi.
Các tác giả của Tiêu chuẩn đã chọn # 3. Do đó, khai báo mảng có kích thước bằng không được coi là "phần mở rộng" của Tiêu chuẩn, mặc dù các cấu trúc như vậy đã được hỗ trợ rộng rãi trước khi Tiêu chuẩn cấm chúng.
Tiêu chuẩn C ++ cho phép tồn tại các đối tượng rỗng, nhưng với nỗ lực cho phép địa chỉ của các đối tượng trống có thể sử dụng được dưới dạng mã thông báo, nó yêu cầu chúng có kích thước tối thiểu là 1. Đối với một đối tượng không có thành viên nào phải có kích thước 0 do đó sẽ vi phạm Tiêu chuẩn. Tuy nhiên, nếu một đối tượng chứa các thành viên có kích thước bằng không, thì Tiêu chuẩn C ++ không áp đặt yêu cầu nào về cách nó được xử lý ngoài việc chương trình có chứa khai báo như vậy phải kích hoạt chẩn đoán. Vì hầu hết các mã sử dụng các khai báo như vậy mong đợi các đối tượng kết quả có kích thước bằng 0, hành vi hữu ích nhất cho các trình biên dịch nhận mã đó là xử lý chúng theo cách đó.