2009-04-13 3 views
23

Wenn ich etwas wie das Folgende in einer Header-Datei habe, wie deklariere ich eine Funktion, die eine Aufzählung des Typs Foo zurückgibt?Eine Aufzählung von einer Funktion in C zurückgeben?

enum Foo 
{ 
    BAR, 
    BAZ 
}; 

Kann ich einfach so etwas wie das Folgende tun?

Foo testFunc() 
{ 
    return Foo.BAR; 
} 

Oder muss ich typedefs oder Zeiger oder etwas verwenden?

Antwort

38

In C++ können Sie nur Foo verwenden.

In C müssen Sie Enum Foo verwenden, bis Sie eine Typedef für es bereitstellen. Wenn Sie sich auf BAR beziehen, verwenden Sie nicht Foo.BAR, sondern nur BAR. Alle Aufzählungskonstanten haben denselben Namespace.

daher (bei C):

enum Foo { BAR, BAZ }; 

enum Foo testFunc(void) 
{ 
    return BAR; 
} 

Oder mit einem typedef:

typedef enum Foo { BAR, BAZ } Foo; 

Foo testFunc(void) 
{ 
    return BAR; 
} 
4

Ich glaube, dass die einzelnen Werte in der enum sind Kennungen in ihrem eigenen Recht, benutzen Sie einfach:

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

In C, braucht es enum Foo; in C++ wäre nur Foo in Ordnung. –

+0

Danke. Oder der Typ Def, den Kenny vorschlägt, nehme ich an. – dmckee

+0

Ja - oder der Typedef würde funktionieren, aber in C++ ist das "automatisch", aber in C muss es manuell erstellt werden. –

2

denke ich, einige Compiler

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

C Compiler würden die Funktion mit dem typedef an Ort und Stelle akzeptieren; C++ - Compiler benötigen es nicht. –

2
enum Foo 
{ 
    BAR, 
    BAZ 
}; 

In C erfordern, die Rückgabetyp sollte enum vor sich haben. Und wenn Sie die einzelnen Enum-Werte verwenden, qualifizieren Sie sie in keiner Weise.

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