2009-04-13 10 views
23

Jeśli w pliku nagłówkowym mam coś takiego, jak zadeklarować funkcję zwracającą wyliczenie typu Foo?Zwracanie wyliczenia z funkcji w C?

enum Foo 
{ 
    BAR, 
    BAZ 
}; 

Czy mogę po prostu zrobić coś takiego?

Foo testFunc() 
{ 
    return Foo.BAR; 
} 

Czy muszę używać maszyn typu typedefs lub wskaźników?

Odpowiedz

38

W C++ można użyć tylko Foo.

W C, musisz używać enum Foo, dopóki nie podasz dla niego napisu.

A następnie, gdy odwołujesz się do BAR, nie używasz Foo.BAR, ale tylko BAR. Wszystkie stałe wyliczeniowe współużytkują tę samą przestrzeń nazw.

Stąd (w C):

enum Foo { BAR, BAZ }; 

enum Foo testFunc(void) 
{ 
    return BAR; 
} 

A, z typedef:

typedef enum Foo { BAR, BAZ } Foo; 

Foo testFunc(void) 
{ 
    return BAR; 
} 
4

wierzę, że poszczególne wartości w enum są identyfikatorami w sobie, wystarczy użyć:

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

w C, wymaga wyliczenia Foo; w C++, po prostu Foo byłoby OK. –

+0

Dzięki. Albo typ def, który sugeruje Kenny. – dmckee

+0

Tak - lub typedef zadziała, ale w C++, który jest "automatyczny", ale w C musi zostać utworzony ręcznie. –

2

myślę niektóre kompilatory mogą wymagać

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

Kompilatory C zaakceptowałyby funkcję z wpisanym typem; Kompilatory C++ tego nie wymagają. –

2
enum Foo 
{ 
    BAR, 
    BAZ 
}; 

In C, typ zwracany powinien mieć przed nim wyliczenie. A kiedy używasz indywidualnych wartości wyliczeniowych, nie kwalifikujesz ich w żaden sposób.

enum Foo testFunc() 
{ 
    enum Foo temp = BAR; 
    temp = BAZ; 
    return temp; 
} 
Powiązane problemy