2012-07-03 39 views
27

tôi có mã này:trường hợp mặc định trong một điều kiện chuyển đổi

#include<stdio.h>         
    int main() 
    { 
     int a=10; 
     switch(a) 
     { 
     case '1': 
      printf("ONE\n"); 
      break; 
     case '2': 
      printf("TWO\n"); 
      break; 
     defalut: 
      printf("NONE\n"); 
     } 
     return 0; 
    } 

Chương trình không in bất cứ điều gì, thậm chí không NONE. Tôi đã phát hiện ra rằng default có lỗi đánh máy defalut!
Tôi muốn biết tại sao lỗi cú pháp này không được trình biên dịch phát hiện.

+3

đây là một ví dụ tuyệt vời tại sao bạn KHÔNG SỬ DỤNG GOTO GUYS BẠN ĐANG CÀI ĐẶT BẠN. –

+0

Tôi đồng ý, điều đó không nên được biên soạn. – KenL

+2

@Hans - OP không sử dụng GOTO. Thật không may, nó là một phần của ngôn ngữ và trình biên dịch đã không nhận thấy rằng nhãn đã không được sử dụng. –

Trả lời

35

defalut chỉ là nhãn trong chương trình của bạn mà bạn có thể chuyển đến với goto. Việc có trình chỉnh sửa làm nổi bật các từ khóa có thể khiến lỗi này dễ phát hiện hơn.

Tôi cũng nên lưu ý rằng chương trình của bạn có thể có một số lỗi logic. Ký tự '1' không giống như 1 và giống với '2'2.

+3

Rất đẹp. Nhãn câu lệnh cũng có thể chặn cảnh báo "mã không thể truy cập" cho 'printf' cuối cùng. –

+0

Wow ... Chỉ cần wow. Đó là một lỗi khó chịu. – Daniel

11

Đó không phải là lỗi cú pháp. defalut là nhãn hợp lệ và có thể là mục tiêu của goto.

8

mẹo: nếu bạn đang sử dụng gcc, hãy thêm tùy chọn -pedantic. nó sẽ cảnh báo bạn về các nhãn không sử dụng:

$ gcc -ansi -Wall -pedantic test.c -o test 
test.c: In function ‘main’: 
test.c:14:10: warning: label ‘defalut’ defined but not used 
Các vấn đề liên quan