2011-01-11 29 views
22

Tôi có một enum được khai báo là;Làm thế nào để vượt qua ENUM làm đối số hàm trong C

typedef enum 
{ 
    NORMAL = 0,   
    EXTENDED    

}CyclicPrefixType_t; 

CyclicPrefixType_t cpType; 

Tôi cần một chức năng mà sẽ đưa điều này như một cuộc tranh cãi:

fun (CyclicPrefixType_t cpType) ; 

khai func là:

void fun(CyclicPrefixType_t cpType); 

Xin vui lòng giúp. Tôi không nghĩ nó đúng.

Cảm ơn

+7

Tại sao bạn cho rằng điều đó không chính xác? Trình biên dịch của bạn đã nói gì với bạn? –

+0

Có vẻ tốt với tôi; bạn đã thử biên dịch chưa? –

+2

Không sử dụng tên tập tin với '_t' ở cuối, chúng thường được bảo lưu, đặc biệt là bởi POSIX. Nhưng như những người khác nói, nguyên mẫu của bạn là ok. –

Trả lời

22

Đó là khá nhiều chính xác cách bạn làm điều đó:

#include <stdio.h> 

typedef enum { 
    NORMAL = 31414, 
    EXTENDED 
} CyclicPrefixType_t; 

void func (CyclicPrefixType_t x) { 
    printf ("%d\n", x); 
} 

int main (void) { 
    CyclicPrefixType_t cpType = EXTENDED; 
    func (cpType); 
    return 0; 
} 

này kết quả đầu ra giá trị của EXTENDED (31.415 trong trường hợp này) như mong đợi.

7

Sau đây cũng làm việc, FWIW (mà confuses hơi ...)

#include <stdio.h> 

enum CyclicPrefixType_t { 
    NORMAL = 31414, 
    EXTENDED 
}; 

void func (enum CyclicPrefixType_t x) { 
    printf ("%d\n", x); 
} 

int main (void) { 
    enum CyclicPrefixType_t cpType = EXTENDED; 
    func (cpType); 
    return 0; 
} 

Rõ ràng đó là một legacy C thing.

+0

Trong ví dụ này, 'CyclicPrefixType_t' không phải là một kiểu dữ liệu mà chỉ là tên của' enum' - vì vậy nó có một chút khác biệt. – cerr

Các vấn đề liên quan