Где используется ключевое слово c auto?



в мои студенческие годы я читал о auto ключевое слово и с течением времени я на самом деле забыл, что это такое. Он определяется как:




определяет локальную переменную как имеющие
местное время жизни




Я никогда не находил, что он используется где-либо, действительно ли он используется, и если да, то где он используется и в каких случаях?

420   8  
c

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

    Ничего не найдено.