2009-04-13 9 views
23

Si tengo algo como lo siguiente en un archivo de encabezado, ¿cómo declaro una función que devuelve una enumeración de tipo Foo?Devolviendo una enumeración de una función en C?

enum Foo 
{ 
    BAR, 
    BAZ 
}; 

¿Puedo hacer algo como lo siguiente?

Foo testFunc() 
{ 
    return Foo.BAR; 
} 

¿O necesito usar typedefs o punteros o algo así?

Respuesta

38

En C++, puede usar solo Foo.

En C, debe usar enum Foo hasta que proporcione un typedef para ello.

Y luego, cuando se refiere a BAR, no usa Foo.BAR sino solo BAR. Todas las constantes de enumeración comparten el mismo espacio de nombres.

Por lo tanto (para C):

enum Foo { BAR, BAZ }; 

enum Foo testFunc(void) 
{ 
    return BAR; 
} 

O, con un typedef:

typedef enum Foo { BAR, BAZ } Foo; 

Foo testFunc(void) 
{ 
    return BAR; 
} 
4

Creo que los valores individuales en el enum son identificadores en su propio derecho, sólo tiene que utilizar:

enum Foo testFunc(){ 
    return BAR; 
} 
+0

En C, que necesita enum Foo; en C++, solo Foo estaría bien. –

+0

Gracias. O el tipo def que sugiere Kenny, supongo. – dmckee

+0

Sí - o el typedef funcionaría, pero en C++ es 'automático' pero en C debe crearse manualmente. –

2

Creo que algunos compiladores pueden requerir

typedef enum tagFoo 
{ 
    BAR, 
    BAZ, 
} Foo; 
+0

Los compiladores de C aceptarían la función con el typedef en su lugar; Los compiladores de C++ no lo requieren. –

2
enum Foo 
{ 
    BAR, 
    BAZ 
}; 

En C, el el tipo de devolución debe tener enum antes. Y cuando usa los valores enum individuales, no los califica de ninguna manera.

enum Foo testFunc() 
{ 
    enum Foo temp = BAR; 
    temp = BAZ; 
    return temp; 
} 
Cuestiones relacionadas