Существует как минимум пара исключений из правила, что все идентификаторы должны быть удалены перед использованием:
в то время как C99 удалял неявные объявления функций, вы все еще можете видеть программы на C, которые полагаются, возможно, по незнанию, на них. На SO даже иногда возникает вопрос, например, что спрашивают, почему функции, которые возвращают double
, не работают (когда заголовок, который включает в себя объявление функции, опущен). Кажется, что при компиляции с семантикой до C99 предупреждения для необъявленных функций часто не настраиваются для использования или игнорируются.
идентификатор для метки goto
может использоваться до ее «объявления» - он неявно объявляется своим синтаксическим внешним видом (за которым следуют: и инструкция).
Исключение из правила для goto
меток в значительной степени бесполезно, но факт, что идентификаторы функций могут использоваться без объявления (до C99), может быть полезно знать, потому что вы можете однажды в Некоторое время сталкиваюсь с проблемой, которая является основной причиной.
Кроме того, идентификаторы могут использоваться перед «объявлением» (строго говоря, перед определением) в предварительной обработке, где они могут быть проверены на то, определены они или нет, или использоваться в выражениях препроцессора, где они будут оцениваться до 0
, если не определено иначе.