Почему мы идем на авто-тип хранения класса?
В Си, почему мы идем на классы хранения? Я слышал, что автоматический тип совпадает с локальной переменной. в таком случае, почему мы выбираем автоматический тип? Есть ли особенное использование автоматического типа вместо локальных переменных, которое не упоминается как auto. например,
int a=10;
а также
auto int a=10;
оба хранятся в сегменте стека, и область видимости этих переменных находится внутри функции. Так в чем же разница между этими двумя? почему мы идем на auto
-тип?
1 ответ
Прежде всего, auto
(ключевое слово) не является спецификатором типа, это спецификатор класса хранения. Цитирование из стандарта,
У объекта есть срок хранения, который определяет его время жизни. Существует четыре длительности хранения: статическое, потоковое, автоматическое и выделенное.
Цитировать C11
Глава §6.2.4, Длительность хранения объектов
Объект, идентификатор которого объявлен без привязки и без спецификатора класса хранения
static
имеет автоматический срок хранения,[..]
и, что касается связи, (выделение мое)
Следующие идентификаторы не имеют связи: идентификатор, объявленный как что-либо, кроме объекта или функции; идентификатор, объявленный как параметр функции; идентификатор области блока для объекта, объявленного без спецификатора класса хранения
extern
,
Итак, локальные переменные, удовлетворяющие вышеуказанным условиям, по умолчанию имеют автоматическую длительность хранения. Вам не нужно явно указывать auto
ключевое слово.
OTOH, спецификаторы типа определяют тип (данных или переменных). Исходя из стандартного определения типа
Значение значения, хранящегося в объекте или возвращаемого функцией, определяется типом выражения, используемого для доступа к нему.