Pregunta ¿Dónde se usa la palabra clave C auto?


En mis días de universidad, leí sobre el auto palabra clave y en el transcurso del tiempo realmente olvidé lo que es. Se define como:

define una variable local como tener un   tiempo de vida local

Nunca encontré que se esté usando en ningún lado, ¿se usa realmente? En caso afirmativo, ¿dónde se usa y en qué casos?


73
2018-02-03 14:22


origen


Respuestas:


auto es un modificador como static. Define la clase de almacenamiento de una variable. Sin embargo, dado que el valor predeterminado para las variables locales es auto, normalmente no es necesario que lo especifique manualmente.

Esta página enumera diferentes clases de almacenamiento en C.


67
2018-02-03 14:23



Si leyeras el IAQ (Lista de preguntas poco frecuentes), sabría que el automóvil es útil principalmente para definir o declarar un vehículo:

auto my_car;

Un vehículo que está constantemente estacionado al aire libre:

extern auto my_car;

Para aquellos que carecen de sentido del humor y quieren "solo los hechos Señora": la respuesta corta es que nunca hay ningún motivo para usar auto en absoluto. La única vez que se te permite usar auto es con una variable que ya tiene auto clase de almacenamiento, por lo que solo está especificando algo que sucedería de todos modos. Intentando usar auto en cualquier variable que no tenga el auto la clase de almacenamiento ya dará como resultado que el compilador rechace su código. Supongo que si desea obtener información técnica, su implementación no tiene que ser un compilador (pero lo es) y teóricamente puede continuar compilando el código después de emitir un diagnóstico (pero no lo hará).

Pequeño apéndice por kaz:

También hay:

static auto my_car;

que requiere un diagnóstico de acuerdo con ISO C. Esto es correcto, porque declara que el automóvil está descompuesto. El diagnóstico es gratuito, pero apagar la luz del tablero le costará ochenta dólares. (Veinte o menos, si compra su propio dongle USB para el diagnóstico a bordo de eBay).

Lo antes mencionado extern auto my_car también requiere un diagnóstico, y por esa razón nunca se ejecuta a través del compilador, a excepción del personal de la ciudad encargado de la ejecución del estacionamiento.

Si ves mucha extern static auto ... en cualquier código base, estás en un mal vecindario; busca un mejor trabajo inmediatamente, antes de que todo el lugar se vuelva a Rust.


102
2018-02-03 14:51



los auto palabra clave es inútil en el lenguaje C. Está ahí porque antes del lenguaje C existía un lenguaje B en el que esa palabra clave era necesaria para declarar variables locales. (B se desarrolló en NB, que se convirtió en C).

Aquí está el manual de referencia para B.

Como puede ver, el manual está plagado de ejemplos en los que auto es usado. Esto es así porque no hay int palabra clave. Se necesita algún tipo de palabra clave para decir "esta es una declaración de una variable", y esa palabra clave también indica si es local o externa (auto versus extrn) Si no usa uno u otro, tiene un error de sintaxis. Es decir, x, y; no es una declaración en sí misma, pero auto x, y; es.

Dado que las bases de código escritas en B tuvieron que ser portadas a NB y a C a medida que el lenguaje fue desarrollado, las versiones más nuevas del lenguaje llevaban algo de equipaje para una compatibilidad hacia atrás mejorada que se traducía en menos trabajo. En el caso de auto, los programadores no tenían que cazar cada vez que ocurría auto y eliminarlo.

Es obvio por el manual que el ahora obsolescente "implícito int" cruft en C (ser capaz de escribir main() { ... } sin ningún int al frente) también proviene de B. Esa es otra característica de compatibilidad con versiones anteriores para admitir el código B. Las funciones no tienen un tipo de devolución especificado en B porque no hay tipos. Todo es una palabra, como en muchos lenguajes ensambladores.

Tenga en cuenta cómo una función puede ser declarada extrn putchar y luego lo único que lo convierte en una función que identifica utilizar: se usa en una expresión de llamada de función como putchar(x), y eso es lo que le dice al compilador que trate esa palabra sin letra como un puntero a la función.


31
2018-06-19 19:19



auto es una palabra clave que indica que una variable es local a un bloque. Dado que es el valor predeterminado para las variables con ámbito de bloque, es innecesario y muy poco utilizado (no creo que lo haya visto usar fuera de ejemplos en textos que discuten la palabra clave). Me interesaría si alguien pudiera señalar un caso donde el uso de auto fue requerido para obtener un análisis o comportamiento correcto.

Sin embargo, en el estándar C ++ 11 el auto la palabra clave ha sido 'secuestrada' para admitir la inferencia de tipo, donde el tipo de una variable puede tomarse del tipo de su inicializador:

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

La inferencia de tipo se agrega principalmente para admitir variables de declaración en plantillas o devuelto de funciones de plantilla donde los tipos basados ​​en un parámetro de plantilla (o deducidos por el compilador cuando se crea una instancia de una plantilla) a menudo pueden ser muy dolorosos para declarar manualmente.


23
2018-02-03 15:52



Con el viejo compilador de Aztec C, era posible convertir todas las variables automáticas en variables estáticas (para aumentar la velocidad de direccionamiento) usando un interruptor de línea de comandos.

Pero las variables explícitamente declaradas con auto quedaron como están en ese caso. (Una visita obligada para funciones recursivas que de otro modo no funcionarían correctamente!)


7
2017-11-16 13:46



los auto la palabra clave es similar a la inclusión de punto y coma en Python, fue requerida por un idioma anterior (B) pero los desarrolladores se dieron cuenta de que era redundante porque la mayoría de las cosas auto.

Sospecho que se dejó para ayudar con la transición de B a C. En resumen, un uso es para la compatibilidad del lenguaje B.

Por ejemplo, en B y 80 s 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
2018-05-03 23:23



La palabra clave Auto es una clase de almacenamiento (un tipo de técnica que decide la duración de la variable y el lugar de almacenamiento) ejemplo. Tiene un comportamiento según el cual la variable creada por la Ayuda de esa palabra clave tiene una vida útil (vida) que reside solo dentro de las llaves.

{
    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
2017-10-20 13:22



auto es bueno para decir que no quieres que sea register. Sin embargo, a menudo es inútil ya que el compilador pondrá register cuando no se ha usado y cree que es óptimo, y rara vez lo pensará tan incorrectamente, sin embargo, a menudo pasará por alto register es óptimo


-2
2017-11-06 22:27