Это то же самое, что комментировать блок, за исключением одного важного различия: вложение не проблема. Рассмотрим этот код:
foo();
bar(x, y); /* x must not be NULL */
baz();
Если я хочу это закомментировать, я могу попробовать:
/*
foo();
bar(x, y); /* x must not be NULL */
baz();
*/
Bzzt. Ошибка синтаксиса! Зачем? Поскольку блочные комментарии не вкладываются, и поэтому (как вы можете видеть из подсветки синтаксиса SO), */
после слова «NULL» завершает комментарий, в результате чего вызов baz
не комментируется, а */
после baz
синтаксическая ошибка. С другой стороны:
#if 0
foo();
bar(x, y); /* x must not be NULL */
baz();
#endif
Работает, чтобы закомментировать всю вещь. И #if 0
s будут гнездиться друг с другом, вот так:
#if 0
pre_foo();
#if 0
foo();
bar(x, y); /* x must not be NULL */
baz();
#endif
quux();
#endif
Хотя, конечно, это может немного запутать и стать головной болью при обслуживании, если не прокомментировать должным образом.