auto myautoptr = This_Function_that_returns_some_pointer_type ();

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

Когда я прочитал одну книгу «Глубокие секреты С», я получил следующую цитату.

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

 Sedat Kapanoglu14 янв. 2011 г., 08:58
Вот почему это комментарий Коди, а не ответ.
 Sedat Kapanoglu14 янв. 2011 г., 08:37
В C ++ 0x auto имеет совершенно другое значение.en.wikipedia.org/wiki/C%2B%2B0x#Type_inference
 Cody Gray♦14 янв. 2011 г., 08:45
@ssg: C ++ не тот же язык, что и C. Это не имеет ничего общего с вопросом.
 Mikhail04 мая 2017 г., 01:08

Ответы на вопрос(6)

Решение Вопроса

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

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

 J. C. Salomon18 янв. 2011 г., 17:25
Вы уверены, что «время жизни переменной равно ее объему»? Я думал, что время жизни было равно вызову функции.Например., являетсяint foo() {int *p; {int i = 42; p = &i} return *p;} несоответствующий?
 Laurence Gonsalves20 янв. 2011 г., 06:55
@jcsalomon В спецификации C90 в §6.1.2.4 говорится об автоматической продолжительности хранения: «Гарантируется, что хранилище будет зарезервировано для нового экземпляра такого объекта при каждой обычной записи в блок, с которым он связан ... Хранилище для объекта больше не гарантируется резервирование, когда выполнение блока каким-либо образом заканчивается. " У меня нет копии спецификации C99, но маловероятно, что они могли бы изменить это.

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

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

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

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

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

где у вас есть неявное правило int.

void f() {
  a = 0; // syntax error
  auto b = 0; // valid: parsed as declaration of b as an int
}

Но тогда вы можете просто написать прямоint вместоauto, C99 больше не имеет неявного правила int. Так что я не думаюauto больше не имеет никакой реальной цели. Это «просто по умолчанию» спецификатор хранилища.

 IInspectable30 окт. 2013 г., 14:35
Я не понимаю, как это было бы полезно, даже в C89. Это ничего не добавляет. Где быauto может быть использован, это также по умолчанию, подразумеваетсяint типа или нет.

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

auto myautoptr = This_Function_that_returns_some_pointer_type ();

Ваш ответ на вопрос