Где используется ключевое слово c auto?
в мои студенческие годы я читал о auto ключевое слово и с течением времени я на самом деле забыл, что это такое. Он определяется как:
определяет локальную переменную как имеющие
местное время жизни
Я никогда не находил, что он используется где-либо, действительно ли он используется, и если да, то где он используется и в каких случаях?
8 ответов:
autoявляется модификатором, какstatic. Он определяет класс памяти переменной. Однако, поскольку по умолчанию для локальных переменныхauto, вам не нужно вручную указать его.на этой странице перечисляет различные классы хранения в C.
если бы вы прочли IAQ (нечасто задаваемые вопросы) список, вы бы знали, что авто полезно в первую очередь для определения или объявления транспортного средства:
auto my_car;автомобиль, который постоянно паркуется на открытом воздухе:
extern auto my_car;для тех, кто не имеет никакого чувства юмора и хочет "только факты мэм": короткий ответ заключается в том, что никогда нет причин использовать
autoна всех. Единственный раз, когда вы можете использоватьautoс переменной, которая уже имеетautoкласс хранения, так что вы просто указываете что-то, что произойдет в любом случае. Попытка использоватьautoна любой переменной, которая не имеетautoкласс хранения уже приведет к тому, что компилятор отклонит ваш код. Я полагаю, что если вы хотите получить технический результат, ваша реализация не должна быть компилятором (но это так), и теоретически она может продолжать компилировать код после выдачи диагностики (но это не так).небольшое добавление по КАЗ:
также:
static auto my_car;который требует диагностики в соответствии с ISO C. Это правильно, потому что он объявляет, что автомобиль сломан. Диагностика бесплатна, но выключение света на приборной панели обойдется вам в восемьдесят долларов. (Двадцать или меньше, если вы покупаете свой собственный USB-ключ для бортовой диагностики с eBay).
вышеуказанного
extern auto my_carтакже требует диагностики, и по этой причине он никогда не запуск через компилятор, кроме городского персонала, которому поручено следить за соблюдением правил парковки.если вы видите много
extern static auto ...в любой кодовой базе вы находитесь в плохом районе; немедленно ищите лучшую работу, прежде чем все место превратится в ржавчину.
The
autoключевое слово бесполезно в языке Си. Это происходит потому, что до языка C существовал язык B, в котором это ключевое слово было необходимо для объявления локальных переменных. (B был развит в NB, который стал C).здесь справочное руководство для B.
как вы можете видеть, руководство изобилует примерами, в котором Это. Это так, потому что нет
intключевое слово. Какое-то ключевое слово нужно сказать "это объявление переменной", и это ключевое слово также указывает, является ли оно локальным или внешним (autoиextrn). Если вы не используете один или другой, у вас есть синтаксическая ошибка. То есть,x, y;- это не декларация сама по себе, ноauto x, y;есть.поскольку кодовые базы, написанные на B, должны были быть перенесены на NB и C по мере развития языка, более новые версии языка несли некоторый багаж для улучшенной обратной совместимости, которая переводилась на менее работа. В случае
auto, программисты не должны были выслеживать каждое появлениеautoи удалить его.из руководства очевидно, что теперь устаревший" неявный int " cruft в C (возможность писать
main() { ... }безintспереди)также происходит от B. Это еще одна функция обратной совместимости для поддержки кода B. Функции не имеют возвращаемого типа, указанного в B, потому что нет типов. Все это слово, как и во многих сборках языки.обратите внимание, как функция может быть объявлена
extrn putcharи тогда единственное, что делает его функцию идентификатора использовать: он используется в выражении вызова функции, какputchar(x), и это то, что говорит компилятору рассматривать это слово без типа как указатель на функцию.
В C
auto- ключевое слово, указывающее, что переменная является локальной для блока. Поскольку это значение по умолчанию для переменных с блочной областью, оно ненужно и очень редко используется (я не думаю, что когда-либо видел его использование за пределами примеров в текстах, которые обсуждают ключевое слово). Мне было бы интересно, если бы кто-то мог указать случай, когда использованиеautoтребуется, чтобы получить правильный разбор или поведение.однако, в стандарте C++11
autoключевое слово было "угнано" для поддержки вывод типа, где тип переменной может быть взят из типа ее инициализатора:auto someVariable = 1.5; // someVariable will have type doubleвывод типа добавляется в основном для поддержки объявления переменных в шаблонах или возвращается из функций шаблона, где типы, основанные на параметре шаблона (или выведенные компилятором при создании экземпляра шаблона) часто могут быть довольно болезненными для объявления вручную.
С помощью старого компилятора Aztec C можно было превратить все автоматические переменные в статические переменные (для увеличения скорости адресации) с помощью переключателя командной строки.
но переменные явно объявлены с помощью
autoостались как есть в таком случае. (Обязательно для рекурсивных функций, которые в противном случае не работали бы должным образом!)
The
autoключевое слово похоже на включение точек с запятой в Python, это требовалось предыдущим языком (B), но разработчики поняли, было излишним, потому что большинство вещей былиauto.Я подозреваю, что он остался, чтобы помочь с переходом от B к C. короче, одна польза для совместимости.
например в B и 80s C:
/* The following function will print a non-negative number, n, to the base b, where 2<=b<=10. This routine uses the fact that in the ASCII character set, the digits 0 to 9 have sequential code values. */ printn(n, b) { extrn putchar; auto a; if (a = n / b) /* assignment, not test for equality */ printn(a, b); /* recursive */ putchar(n % b + '0'); }
Ключевое слово Auto-это класс хранения (некоторые методы, которые определяют время жизни переменной и место хранения). Он имеет поведение, по которому переменная, сделанная с помощью этого ключевого слова, имеет продолжительность жизни (lifetime), находится только в фигурных скобках
{ auto int x=8; printf("%d",x); // here x is 8 { auto int x=3; printf("%d",x); // here x is 3 } printf("%d",x); // here x is 8 }
autoхорошо сказать, что вы не хотите, чтобы это былоregister. Однако это часто бесполезно, так как компилятор будет поставитьregisterкогда ни один из них не использовался, и он считает, что он оптимален, и он редко будет думать так неправильно, однако он будет часто пропускать этоregisterоптимален.
Comments