2010-02-27 40 views
5

Tôi vừa bắt đầu C rất gần đây và tôi đã được yêu cầu trả lời một số bài tập mã hóa trong đó đoạn mã sau đây xuất hiện:Dễ C enum câu hỏi

typedef enum { 
    false = 0, 
    true = 1 
} Bool; 

Ai đó có thể vui lòng cung cấp một bản tóm tắt và giải thích rõ ràng để cái đó?

Cảm ơn rất nhiều.

+0

Cần thẻ bài tập về nhà? –

+1

Mỗi khi một câu hỏi như thế này được hỏi và một câu trả lời, anh ấy biết rằng trước khi anh ấy đăng câu trả lời, sẽ có ít nhất 5 người khác đã đăng bài của riêng mình, hy vọng anh ấy có thể dễ dàng kiếm được hàng trăm điểm. : P –

+1

Vì vậy, có những người dùng vô hạn trả lời câu hỏi này. (và vô hạn của họ đã xóa riêng của họ sau khi thực hiện sao chép, do đó bạn chỉ nhìn thấy 6 ở đây): p – kennytm

Trả lời

11

Nó thực sự làm hai việc; bạn có thể phá vỡ nó xuống một cái gì đó như thế này:

enum _bool { 
    false = 0, 
    true = 1 
}; 

Và:

typedef enum _bool Bool; 

Mã này tạo ra một kiểu enumeration mới và sau đó sử dụng typedef để cung cấp cho nó một cái tên thuận tiện. Nó sẽ cho phép bạn sử dụng 'loại' mới được gọi là Bool ở nơi khác trong mã của bạn và gán giá trị falsetrue. Đây là trường hợp sử dụng đơn giản:

Bool logical_not(Bool in) 
{ 
    if (in == true) 
     return false; 
    else 
     return true; 
} 
+0

Rõ ràng mã được gửi không làm điều đó, bởi vì _bool không tồn tại trong bản gốc. Tôi đã đến đây vì tôi đã cố gắng tìm một số tài liệu về "enumed enum", điều này vô nghĩa khi tôi lo ngại Giải thích điều này cần phải là một phần của câu trả lời –

+0

Các bảng kê không cần nhãn hoặc typedef; 'enum {A, B, C}' là mã hợp lệ. Bạn đang cố hỏi gì? –

1

Vì C không có kiểu dữ liệu Boolean, mã của bạn mô phỏng một bằng cách sử dụng typedef.

Bạn có thể tận dụng các kiểu dữ liệu người dùng định nghĩa mới như sau:

Bool find_key_in_array() { 
     Bool found = false; // assume not found. 

     // do searching and set found suitably.  

     return found; 
} 

int main() { 

     Bool result = find_key_in_array(); 

     return 0; 
} 
1

Nó cung cấp literals có thể đọc cho đúng và sai. Nhưng bạn có thể đoán được điều đó.

Tính năng này hoạt động như thế nào? Một điều tra (từ khóa enum) kết nối một loạt mã thông báo với các giá trị số nguyên và typedef ... Bool; làm cho Bool tên tệp của liệt kê.

Nhìn chung tôi sẽ không khuyến khích thành ngữ này bởi vì bạn sau có thể bị cám dỗ để sử dụng

int flag=false; 
// something happens that might change the setting of flag that *doesn't* use the enum 
if (flag == true) { 
    //... 
} 

và nếu flag đã thiết lập để 2 này sẽ không làm những gì bạn mong đợi.

Nếu bạn sử dụng c cho dài số không là sai tất cả mọi thứ khác là sự giải thích đúng sẽ là bản chất thứ hai.

1

Enum là loại không thể thiếu có số lượng giá trị biểu tượng giới hạn. Điều này cho phép bạn làm những việc như:

Bool finish = false; 

while (finish != true) 
{ 
    ... 
} 
0

Từ những gì tôi nhớ:

này tuyên bố một điều tra và sau đó liên kết một tên, Bool, để liệt kê này (thông qua typedef). Bạn có thể lấy thêm thông tin về các bảng liệt kê C here

4

Nó chỉ là định nghĩa của một enum, một loại có thể giả định chỉ một số riêng biệt của các giá trị, tức là những giá trị được đặt trong dấu ngoặc đơn. Mỗi giá trị này được đặt tên, sau này bạn có thể sử dụng để tham chiếu đến nó. Nếu bạn chỉ xác định tên của các giá trị và không phải là giá trị thực, trình biên dịch sẽ đặt chúng cho bạn theo thứ tự tăng dần, bắt đầu từ số không cho phần tử đầu tiên.

Xem wiki article về các loại được liệt kê (và cụ thể là C section) để biết thêm thông tin.

Enum cụ thể đó xác định loại boolean, tức là loại có thể giả định chỉ có hai giá trị: true và false, trong đó false =! True. Các giá trị boolean được sử dụng rất thường xuyên trong lập trình, ví dụ như cờ để chỉ ra nếu một điều kiện được đáp ứng, và thực tế nhiều ngôn ngữ bao gồm chúng như là một kiểu gốc (C++ và C99, ví dụ, làm điều đó).

Bằng cách này, để xác định enum rằng đây:

enum Bool 
{ 
    false = 0, 
    true = 1 
}; 

sẽ là đủ; Tuy nhiên, vì cách C được thiết kế để khai báo một biến kiểu với mã này Bool bạn sẽ cần phải đặt luôn từ khóa enum trước Bool:

enum Bool myFlag=true; 

Sử dụng lừa typedef, thay vào đó, bạn xác định một ẩn danh enum được thực hiện theo cách đó, và sau đó bạn cung cấp một bí danh cho nó tên là Bool; theo cách đó bạn chỉ cần làm:

Bool myFlag=true;