Ключевое слово auto
бесполезно на языке Си. Это происходит потому, что до языка C существовал язык B, в котором это ключевое слово было необходимо для объявления локальных переменных. (B был разработан в NB, который стал C).
Вот справочное руководство для B .
Как видите, руководство изобилует примерами, в которых используется auto
. Это так, потому что нет ключевого слова int
. Для того, чтобы сказать «это объявление переменной», требуется какое-то ключевое слово, и это ключевое слово также указывает, является ли оно локальным или внешним (auto
против extrn
). Если вы не используете одно или другое, у вас есть синтаксическая ошибка. То есть x, y;
не является декларацией сам по себе, но auto x, y;
является.
Поскольку кодовые базы, написанные на B, должны были быть портированы на NB и на C при разработке языка, более новые версии языка несли некоторый багаж для улучшения обратной совместимости, что переводило на меньшее количество работы. В случае auto
программистам не приходилось выслеживать каждое вхождение auto
и удалять его.
Из руководства очевидно, что теперь устаревшее "неявное int" Cruft в C (возможность писать main() { ... }
без int
впереди) также происходит от B. Это еще одна функция обратной совместимости для поддержки B-кода. Функции не имеют тип возвращаемого значения, указанный в B, потому что нет типов. Все слово, как во многих языках ассемблера.
Обратите внимание, как функцию можно просто объявить extrn putchar
, а затем единственное, что делает ее функцией, для которой идентификатор использует : она используется в выражении вызова функции, например putchar(x)
, и вот что говорит компилятору обрабатывать это слово без типа как указатель на функцию.