Ваше понимание верно, и стандарт (или, по крайней мере, Страуструп) определяет пустую декларацию .
РЕДАКТИРОВАТЬ : Кажется, этот ответ неправильный (естьсемантическое правило для стандарта - но, насколько я могу судить, не для книги - которое запрещает как decl-specified-seq
, так и init-declarator-list
быть пустыми одновременно).См. Ответ Чарльза Бейли.
n "Язык программирования C ++", приложение A, раздел A.4:
Программа - это набор translation-unit
s (...).translation-unit
, часто называемый исходным файлом , представляет собой последовательность declaration
s:
translation-unit:
declaration-seq_opt
opt
означает, что производство является необязательным.В этом правиле это означает, что действительна пустая единица перевода.
Раздел A.7:
declaration-seq:
declaration
declaration-seq declaration
declaration:
block-declaration
(...)
block-declaration:
simple-declaration
(...)
simple-declaration:
decl-specified-seq_opt init-declarator-list_opt ;
Таким образом, declaration-seq
является последовательностью по крайней мере из одного declaration
.declaration
может, помимо прочего, быть block-declaration
, что, в свою очередь, дает simple-declaration
.Поскольку не-литерал decl-specified-seq
и init-declarator-list
являются необязательными, ;
является допустимым объявлением.