Подтвердить что ты не робот

Понятие ключевого слова "auto" в c

Не могли бы вы дать мне точную концепцию ключевого слова "auto" в программе C.

Когда я прошел через одну книгу "Deep C secrets", получил следующую цитату.

Ключевое слово auto, по-видимому, бесполезный. Это имеет смысл только для компилятор-писатель делает запись в таблица символов - она ​​говорит, что это хранилище автоматически распределяется при вводе блок (в отличие от глобального статического распределения или динамического распределения на куча). Авто не имеет отношения к других программистов, так как вы по умолчанию.

4b9b3361

Ответ 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.