2013-11-24 3 views
0

Я использую переключатель заявление, что в основном выглядит следующим образом:переопределение переменной, в распределительном заявление в C

switch (command): 
case '+': 
    int key; 
    scanf("%i", &key); 
    //do stuff 
    break; 
case '-': 
    int key; 
    scanf("%i", &key); 
    //do stuff 
    break; 
.... 

Оказывается, я не позволил переобъявить int key по делу лестнице, несмотря на то, они ломаются как отдельные блоки работы. Я получаю ошибку компиляции redeclaration of 'key' with no linkage, поэтому я просто использую key, не прибегая к приводу. Кажется, программа работает нормально.

Это приемлемо? Это безопасно?

+1

Ваш код кажется вполне repetitve для меня. Это потому, что вы упростили отправку здесь или у вас на самом деле повторяются фрагменты кода, что является плохой практикой в ​​первую очередь? –

ответ

4

Это не законный и, следовательно, он небезопасен. Но это легко исправить. Просто используйте блоки в своем заявлении о переключении, чтобы ограничить объем ваших объявлений:

switch (command): 
case '+': { 
    int key; 
    scanf("%i", &key); 
    //do stuff 
    break; 
} 
case '-': { 
    int key; 
    scanf("%i", &key); 
    //do stuff 
    break; 
} 
+0

Почему бы просто не объявить 'int key;' в начале определения функции? –

+1

@BitFiddlingCodeMonkey: Это будет работать в этом случае, но в целом разные ветви 'switch' требуют разных локальных переменных. На самом деле это вопрос стиля. Я предпочитаю помещать локальные переменные в максимально возможной области. (И Google: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Local_Variables#Local_Variables) – rici