Adelante declaración de las enumeraciones en C no funciona para mí. He buscado en la internet y stackoverflow pero todas las preguntas en relación con las declaraciones de los enumeradores se refieren a la de c++. ¿Qué hacer para declarar a los enumeradores en C? Ponerlos en la parte superior de cada archivo (o en un include), de modo que todas las funciones en el archivo puede acceder a ellos? Gracias

Normalmente en un include, puede mostrar el código para ver cuál es el problema que tiene es?

OriginalEl autor loop | 2011-09-20

2 Comentarios

  1. 7

    Ponerlos en un encabezado para que todos los archivos que necesiten puedan acceder a la cabecera y el uso de las declaraciones de ella.

    Cuando se compila con las opciones:

    $ /usr/bin/gcc -g -std=c99 -Wall -Wextra -c enum.c
    $

    GCC 4.2.1 (en MacOS X 10.7.1) acepta el código siguiente:

    enum xyz;
    
    struct qqq { enum xyz *p; };
    
    enum xyz { abc, def, ghi, jkl };

    Agregar -pedantic y advierte:

    $ /usr/bin/gcc -g -std=c99 -Wall -Wextra -pedantic -c enum.c
    enum.c:1: warning: ISO C forbids forward references to enum types
    enum.c:5: warning: ISO C forbids forward references to enum types
    $

    Por lo tanto, usted no debe tratar de usar declaraciones forward de tipos enumerados en C; GCC permite como una extensión cuando no es forzada a ser pedante.

    OriginalEl autor Jonathan Leffler

  2. 4

    Que no se puede «avanzar declarar» las enumeraciones, ya que el compilador no sabe el tamaño de la enumeración. El estándar de C dice: «Cada tipo enumerado será compatible con char, la firma de un tipo entero, o un tipo de entero sin signo. La elección del tipo de aplicación definido, pero será capaz de representar los valores de todos los miembros de la enumeración«.

    ¿No es más probable que no se permite porque no hacen ninguna de algodón-pickin’ sentido! Usted no puede referirse a cualquiera de la enumeración de los NOMBRES hasta que decirle al compilador de lo que son. De lo posible el uso es una enumeración que no define los nombres?
    Usted podría, aproximadamente, un argumento que es un puntero a una enumeración incompleta (como en el ejemplo de código) hace algún tipo de sentido. Pero es bastante tenue, su conclusión de que son esencialmente de ningún uso práctico cuando incompleto es correcta.
    puede utilizar una definición incompleta de un struct en los archivos de encabezado, de la misma manera que usted podría tener una definición incompleta de una enumeración, respaldado por una definición a otra parte, y teniendo que la definición incluida en cada punto de uso de valores de enumeración.
    Mi caso de uso fue (en la cabecera): enum Foo { ... }; enum Bar; enum Foo bar2foo( Bar bar ); Así que declaramos la función que devuelve un Foo. Si usted quiere usar, usted también tendrá que incluir la definición de los Foo.
    Esto no es un argumento. typedef struct S S; funciona, pero typedef enum E E; no, a pesar de que ambos habían indefinido tamaños. En realidad, adelante declaraciones son sólo acerca de no conocer los tamaños de las entidades involucradas.

    OriginalEl autor Foo Bah

Dejar respuesta

Please enter your comment!
Please enter your name here