2012-11-14 44 views
0

我想用枚舉作爲函數返回類型或者作爲參數。但是,當我按原樣給出時,它會給出錯誤信息。但如果我typedef相同,它工作正常。爲什麼我要的typedef枚舉當我使用它作爲函數的返回類型或參數

#include <stdio.h> 

enum  // if *typedef enum* is used instead, it's working fine 
{ 
    _false, 
    _true, 
} bool; 

bool func1(bool); 

int main() 
{ 
    printf("Return Value = %d\n\n", func1(_true)); 

    return 0; 
} 

bool func1(bool status) 
{ 
    return status; 
} 

請幫我理解這一點。謝謝。

+1

只需提及在C99中引入的''。 – hmjd

回答

4

你是不是做一個新的bool,而不是你的聲明變量命名bool

4

你的語法錯了。

如果你不使用typedef那麼就應該是這樣的:

enum bool 
{ 
    _false, 
    _true, 
}; 
enum bool func1(enum bool); 

enum bool func1(enum bool status) 
{ 
    return status; 
} 
4

此代碼:

enum 
{ 
    _false, 
    _true, 
} bool; 

聲明一個匿名枚舉類型的可變booltypedef enum { ... } bool;定義了一種稱爲bool的類型,可用於引用枚舉類型。

你也可以寫

enum bool 
{ 
    _false, 
    _true, 
}; 

但你必須要參考類型enum bool。最便攜的解決方案是將寫

typedef enum bool 
{ 
    _false, 
    _true, 
} bool; 

即限定稱爲bool枚舉類型和稱爲bool一般類型引用它。

1

您使用的語法錯誤。如下使用它。

#include <stdio.h> 

enum bool  // if *typedef enum* is used instead, it's working fine 
{ 
    _false, 
    _true, 
} ; 

enum bool func1(enum bool); 

int main() 
{ 
    printf("Return Value = %d\n\n", func1(_true)); 

    return 0; 
} 

enum bool func1(enum bool status) 
{ 
    return status; 
} 

相反,如果你使用的typedef就可以直接使用bool代替enum bool

還引述C99標準:

Section 7.16 Boolean type and values <stdbool.h> 

1 The header <stdbool.h> defines four macros. 
2 The macro 
bool expands to _Bool. 
3 The remaining three macros are suitable for use in #if preprocessing directives. They are 
true : which expands to the integer constant 1, 
false: which expands to the integer constant 0, and 
__bool_true_false_are_defined which expands to the integer constant 1. 
4 Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then redefine the macros bool, true, and false. 

如果你有編譯器來編譯,以C99標準,那麼你可以只包括stdbool.h和使用布爾像bool b = true;

相關問題