Понятие "авто" ключевое слово в c - PullRequest
13 голосов
/ 14 января 2011

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

Когда я прочитал одну книгу "Секреты глубокой С", я получил цитату ниже.

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

Ответы [ 6 ]

19 голосов
/ 14 января 2011

auto не является типом данных.Это спецификатор класса хранения, например static.Это в основном противоположно static при использовании локальных переменных и указывает, что время жизни переменной равно ее области действия (например: когда она выходит из области видимости, она автоматически уничтожается).

Вам никогда не нужноукажите auto в качестве единственного места, где вам разрешено его использовать, это также по умолчанию.

5 голосов
/ 14 января 2011

Это может быть полезно в 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 голосов
/ 14 января 2011

Вы получаете поведение auto по умолчанию всякий раз, когда объявляете переменную, например - int i = 0; Однако вы делаете то же самое, явно указав auto int i = 0, который не нужен.

1 голос
/ 14 января 2011

Как уже говорилось, auto - это значение по умолчанию для переменных в области действия функции в C. Единственное использование, которое я использовал для ключевого слова, - это макросы.Для макроса, который делает объявление переменной, вы можете иногда захотеть убедиться, что переменная не объявлена ​​static или находится в области видимости файла.Здесь ключевое слово auto пригодится.

Это было особенно полезно для C ++, где вы могли использовать механизм конструктора / деструктора для управления ресурсами, связанными с областью действия.Поскольку ключевое слово auto в настоящее время меняет свое значение на что-то совершенно другое в C ++, такое использование больше невозможно.

0 голосов
/ 21 марта 2018

Предположим, у меня есть функция, возвращающая какой-то извилистый указатель на сложную структуру, или, поскольку я разрабатываю функцию, которая может возвращать различные структуры, я бы хотел, чтобы в C было:

auto myautoptr =This_Function_that_returns_some_pointer_type ();

0 голосов
/ 14 января 2011

Я нахожу эту цитату довольно сомнительной.Логический уровень компилятора не имеет ничего общего с логическим уровнем компилируемого языка, даже если два языка одинаковы.Может быть, я плохо разбираюсь в фантазиях, но я действительно не могу себе представить, как наличие или отсутствие определенного ключевого слова может быть полезным для компилятора, но не для общей программы;особенно в «C», где вы все равно не можете напрямую манипулировать ключевыми словами или любой другой формой кода, и вам необходимо отражать все в данных, потому что в «C» код и данные - это две совершенно разные концепции.

My wildПредполагается, что auto был там изначально, потому что он был не обязательным, а обязательным, позже, когда язык развивался и больше не был необходим, он все еще оставался из-за обратной совместимости с существующим кодом C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...