Onde é usada a palavra-chave C auto?

Nos meus tempos de faculdade, li sobre a palavra-chave e, com o passar do tempo, esqueci-me do que era. Define-se como:

define uma variável local como tendo um vida útil local

nunca descobri que está a ser usado em lado nenhum, é realmente usado e, em caso afirmativo, onde é usado e em que casos?

 76
c
Author: rjzii, 2010-02-03

8 answers

auto é um modificador como static. Define a classe de armazenamento de uma variável. No entanto, dado que o valor por omissão para as variáveis locais é auto, não é necessário especificá-lo manualmente.

Esta página Lista diferentes classes de armazenamento em C.

 69
Author: Mehrdad Afshari, 2014-11-02 03:13:50

Se tivesse lido a lista IAQ (perguntas Pouco frequentes), saberia que o auto é útil principalmente para definir ou declarar um veículo:

auto my_car;
Um veículo que está sempre estacionado ao ar livre.
extern auto my_car;

Para quem não tem sentido de humor e quer "apenas os factos, Minha Senhora": a resposta curta é que nunca há qualquer razão para usar auto de todo. O único tempo que você pode usar auto é com uma variável que já tem classe de armazenamento auto, então você está só estou a especificar algo que aconteceria de qualquer maneira. A tentativa de usar auto em qualquer variável que não tenha a classe de armazenamento auto já resultará na rejeição do compilador do seu código. Eu suponho que se você quiser ficar Técnico, sua implementação não tem que ser um compilador (mas é) e pode teoricamente continuar a compilar o código após a emissão de um diagnóstico (mas não vai).

Pequena adenda por kaz:

Também há:

static auto my_car;

Que requer um diagnóstico de acordo com a ISO C. Isto é correto, porque declara que o carro está quebrado. O diagnóstico é gratuito, MAS desligar a luz do painel vai custar-lhe oitenta dólares. (Vinte ou menos, se você comprar seu próprio dongle USB para diagnósticos a bordo do eBay).

O acima mencionado também requer um diagnóstico, e por isso nunca é executado através do compilador, a não ser pelo pessoal da cidade encarregado de fazer a fiscalização do estacionamento.

Se você vê muito de {[[9]} em qualquer base de código, você está em um bairro ruim; procure um emprego melhor imediatamente, antes que todo o lugar se transforme em ferrugem.

 104
Author: Jerry Coffin, 2017-05-23 12:34:44

A palavra-chave auto é inútil na língua C. Existe porque antes da linguagem C existia uma linguagem B na qual essa palavra-chave era necessária para declarar variáveis locais. (B foi desenvolvido em NB, que se tornou C).

Aqui está o manual de referência para B .

Como pode ver, o manual está repleto de exemplos em que auto é usado. Isto é assim porque não há nenhuma palavra-chave int. Uma espécie de palavra-chave é necessária para dizer " esta é uma declaração de uma variável", e essa palavra-chave também indica se é um local ou externo (auto versus extrn). Se você não usar um ou outro, você tem um erro de sintaxe. Isto é, x, y; não é uma declaração por si só, mas auto x, y; é.

Uma vez que as bases de código escritas em B tiveram que ser portadas para NB e para C como a língua foi desenvolvida, as versões mais recentes da língua carregaram alguma bagagem para uma compatibilidade melhorada para trás que traduzida para menos trabalho. No caso de auto, os programadores não foi necessário caçar cada ocorrência de {[[0]} e removê-la.

É óbvio do manual que o agora obsolescente cruft "int" implícito em C (Ser capaz de escrever main() { ... } SEM NENHUM int na frente) também vem de B. Essa é outra característica de compatibilidade para suportar o Código B. As funções não têm um tipo de retorno especificado em B porque não existem tipos. Tudo é uma palavra, como em muitas línguas de reunião.

Note como uma função pode ser declarada extrn putchar e então a única coisa que faz dela uma função que o identificador usa: é usado numa expressão de chamada de função como putchar(x), e é isso que diz ao compilador para tratar essa palavra digita como um ponteiro de função.

 33
Author: Kaz, 2016-06-12 10:31:23

Em C auto é uma palavra-chave que indica que uma variável é local para um bloco. Uma vez que esse é o padrão para variáveis com escopo em bloco, é desnecessário e muito raramente usado (Eu não acho que eu já vi o uso fora de exemplos em textos que discutem a palavra-chave). Eu estaria interessado se alguém pudesse apontar um caso em que o uso de auto era necessário para obter uma análise correcta ou comportamento.

No entanto, na norma C++11 a palavra-chave auto foi 'desviada' para suportar o tipo inferência, onde o tipo de uma variável pode ser retirado do tipo do seu inicializador:

auto someVariable = 1.5;   // someVariable will have type double

A inferência do tipo está a ser adicionada principalmente para suportar a declaração de variáveis em modelos ou devolvidas a partir de funções de modelos, onde os tipos baseados num parâmetro de modelo (ou deduzidos pelo compilador quando um modelo é instanciado) podem muitas vezes ser bastante dolorosos para declarar manualmente.

 22
Author: Michael Burr, 2016-01-06 00:04:06

Com o antigo compilador Aztec C, foi possível transformar todas as variáveis automáticas em variáveis estáticas (para aumentar a velocidade de endereçamento) usando um interruptor de linha de comando.

Mas as variáveis explicitamente declaradas com auto foram deixadas como está nesse caso. (A must for recursive functions which would otherwise not work properly!)

 7
Author: raphnet, 2016-11-16 13:46:00

A palavra-chave auto é semelhante à inclusão de ponto-e-vírgula em Python, era necessária por uma língua anterior(B) mas os desenvolvedores perceberam que era redundante porque a maioria das coisas eram auto.

Suspeito que foi deixado para ajudar na transição de B Para C. Em suma, um uso é para a compatibilidade da linguagem B.

Por exemplo em B e 80 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');
}
 5
Author: Mikhail, 2017-06-18 21:58:01

A palavra-chave automática é um exemplo de classe de armazenamento (algum tipo de técnicas que decide a vida útil da variável e local de armazenamento). Ele tem um comportamento pelo qual a variável feita pela ajuda dessa palavra-chave tem vida útil (vida ) reside apenas dentro dos suspensórios encaracolados

{
    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
}          
 0
Author: Atul Sharma, 2016-04-09 00:15:08

auto é bom para dizer que você não quer que seja register. No entanto, muitas vezes é inútil, uma vez que o compilador vai colocar register quando nenhum deles foi usado e ele pensa que é o ideal, e raramente vai pensar tão incorretamente, no entanto, muitas vezes vai perder que register é o ideal.

 -2
Author: Mattias, 2014-11-06 23:02:09