2012-07-03 6 views
27

У меня есть этот код:По умолчанию случай в состоянии выключателя

#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; 
    } 

Программа ничего не печатать, даже не NONE. Я выяснил, что у default была типография defalut!
Я хочу знать, почему эта синтаксическая ошибка не обнаружена компилятором.

+3

Это отличный пример, почему вы НЕ ИСПОЛЬЗУЕТЕ ГОТОВЫЕ ПАРЫ, КОТОРЫЕ ВЫ УСТАНАВЛИВАЕТЕ СЕБЯ ДЛЯ НЕИСПРАВНОСТИ. –

+0

Согласен, что не следовало компилировать. – KenL

+2

@Hans - OP не использовал GOTO. К сожалению, это часть языка, и компилятор не заметил, что ярлык не использовался. –

ответ

35

defalut - это всего лишь метка вашей программы, с которой вы можете перейти с помощью goto. Наличие редактора, который выделяет ключевые слова, мог бы сделать эту ошибку легче обнаружить.

Следует также отметить, что ваша программа может иметь некоторые логические ошибки. Символ '1' не совпадает с 1, а также с '2' и 2.

+3

Ницца. Ярлык оператора, вероятно, также подавил предупреждение «недостижимый код» для последнего 'printf'. –

+0

Вау ... Просто ничего себе. Это неприятная ошибка. – Daniel

11

Это не синтаксическая ошибка. defalut является допустимой меткой, и это может быть цель goto.

8

совет: если вы используете gcc, добавьте опцию -pedantic. он предупредит вас о неиспользованных ярлыках:

$ gcc -ansi -Wall -pedantic test.c -o test 
test.c: In function ‘main’: 
test.c:14:10: warning: label ‘defalut’ defined but not used 
Смежные вопросы