Понятие ключевого слова "auto" в c
Не могли бы вы дать мне точную концепцию ключевого слова "auto" в программе C.
Когда я прошел через одну книгу "Deep C secrets", получил следующую цитату.
Ключевое слово auto, по-видимому, бесполезный. Это имеет смысл только для компилятор-писатель делает запись в таблица символов - она говорит, что это хранилище автоматически распределяется при вводе блок (в отличие от глобального статического распределения или динамического распределения на куча). Авто не имеет отношения к других программистов, так как вы по умолчанию.
Ответы
Ответ 1
auto
не является типом данных. Это спецификатор класса хранения, например static
. Это в основном противоположно static
при использовании для локальных переменных и указывает, что время жизни переменной равно его объему (например: когда он выходит из области действия, он автоматически уничтожается).
Вам не нужно указывать auto
как единственные места, где вам разрешено использовать его, это также значение по умолчанию.
Ответ 2
Это может быть полезно в C89, где у вас есть неявное правило int.
void f() {
a = 0; // syntax error
auto b = 0; // valid: parsed as declaration of b as an int
}
Но тогда вы можете просто написать прямо int
вместо auto
. C99 больше не имеет неявного правила int. Поэтому я не думаю, что у auto
есть реальная цель. Это "только спецификатор хранилища по умолчанию".
Ответ 3
Вы получаете поведение auto
по умолчанию всякий раз, когда вы объявляете переменную, например, - int i = 0;
Однако вы делаете то же самое, явно указывая auto int i = 0
, которая не нужна.
Ответ 4
Как сказано, auto
является значением по умолчанию для переменных в области функций в C. Единственное использование, которое у меня было для ключевого слова, - это макросы. Для макроса, который делает объявление переменной, вы иногда можете захотеть убедиться, что переменная не объявлена static
или в области файлов. Здесь ключевое слово auto
подходит.
Это было особенно полезно для С++, где вы могли бы злоупотреблять механизмом конструктора/деструктора для управления ресурсами, связанными с областью. Поскольку ключевое слово auto
в настоящее время меняет свой смысл на нечто совершенно другое в С++, это использование больше невозможно.
Ответ 5
Я считаю, что цитата довольно сомнительна. Логический уровень компилятора не имеет ничего общего с логическим уровнем скомпилированного языка, даже если оба языка одинаковы. Может быть, я беден от фантазии, но я действительно не могу представить, как наличие или не определенное ключевое слово может быть полезным для компилятора, но не для общей программы; особенно в "C", где вы не можете напрямую манипулировать ключевыми словами или любой формой кода, и вы должны отражать все данные, потому что в "C" код и данные представляют собой две совершенно разные концепции.
Моя дикая догадка заключается в том, что auto был там первоначально, потому что он не был необязательным, но обязательным, позже, когда язык развился, и он не был нужен больше, он все еще оставался из-за соображений обратной совместимости с существующим кодом C.