Aquí se define una enumeración en ANSI C.

enum Security_Levels
{
    black_ops,
    top_secret,
    secret,
    non_secret
};

Ahora para declarar s [4] de tipo Security_Levels, escribí esto en el código main ()

    Security_Levels s[4];

Y recibo este error:

file.c: In function ‘main’:
file.c:13:3: error: unknown type name ‘Security_Levels’
Security_Levels s[4];

Pero cuando lo declare así

enum Security_Levels s[4];

¡FUNCIONÓ!

Security_Levels s[4];

Esto ^ Funcionó en C ++ pero arroja el error antes mencionado en C

Tengo una pregunta similar al usar struct en C y C ++ también.

struct structure_name variable_name; //this is how it works in C
structure_name variable_name; // in  case of C++

Entonces, ¿por qué la diferencia al declarar vars de tipos definidos por el usuario?

-2
insomniac_tk 2 abr. 2017 a las 18:41

2 respuestas

La mejor respuesta

Respuesta corta: porque esa es la forma en que se definen los dos idiomas diferentes.

Respuesta más larga: en C, los nombres struct y enum están en espacios de nombres separados y distintos. Es por eso que ve muchas cosas de tipo typedef struct s s; en el código C, por lo que no necesita usar struct. En C ++, los nombres struct y enum (y class) son parte del espacio de nombres que define la estructura / enumeración (generalmente el espacio de nombres global). Por lo tanto, puede hacer referencia a ellos sin una typedef o palabra clave.

5
1201ProgramAlarm 2 abr. 2017 a las 15:46

La siguiente función devolverá diferentes valores en C y C ++:

extern int T;

int size(void)
{
    struct T {  int i;  int j;  };

    return sizeof(T);
    /* C:   return sizeof(int)
     * C++: return sizeof(struct T)
     */
}

Esto se debe a que C requiere una estructura frente a las etiquetas de estructura (y por lo tanto sizeof (T) se refiere a la variable), pero C ++ permite que se omita (y por lo tanto sizeof (T) se refiere al typedef implícito). Tenga en cuenta que el resultado es diferente cuando la declaración externa se coloca dentro de la función: entonces la presencia de un identificador con el mismo nombre en el alcance de la función inhibe que la definición implícita de tipo surta efecto para C ++, y el resultado para C y C ++ sería el mismo . Observe también que la ambigüedad en el ejemplo anterior se debe al uso del paréntesis con el operador sizeof. Usar sizeof T esperaría que T fuera una expresión y no un tipo, y por lo tanto el ejemplo no se compilaría con C ++.

De Wikipedia

0
Bo Persson 2 abr. 2017 a las 18:39