Скорее всего, чтобы избежать предупреждений компилятора. Проверьте, не вызывает ли этот код предупреждение о пустом операторе:
if (foo);
Если это так, то хотите ли вы такое же предупреждение в режиме выпуска для следующего кода?
if (foo) assert(what);
C99 (что относится к C ++ 11) также говорит, что assert
расширяется до «пустого выражения». IIRC, один пробел не является выражением , хотя пробел, за которым следует точка с запятой, является выражением-выражением . Старая добрая грамматика БНФ.
Кстати, это определение assert
не соответствует стандартам. C89 и C99 оба говорят, что когда определено NDEBUG
, тогда assert определяется как:
#define assert(ignore) ((void)0)
Я не уверен, считают ли авторы это важным требованием, но программа может, например, упорядочить расширение макроса и ожидать определенного результата.