Переключение операторов в C - PullRequest
4 голосов
/ 10 февраля 2012

Я пишу программу на C с операторами switch, и мне было интересно, примет ли компилятор такой оператор, как

case !('a'):

Я не смог найти в сети никаких программ, которые использовали бы ! сзаявление о переключении.

Ответы [ 3 ]

12 голосов
/ 10 февраля 2012

Вы действительно пробовали это?

Ну, я сделал (GCC на Mac OS X).

! является оператором логического отрицания, и! (x) возвращает 1 для x, равного 0, и 0 для всего остального. 'a' имеет значение, которое известно во время компиляции, поэтому компилятор оценивает !('a') в 0. Итак

case !('a'):

является эквивалентом

case 0 :

Он даже не генерирует ошибку компилятора и работает нормально.

Я полагаю, что это не то, что вы хотите сделать, и скорее хочу, чтобы регистр перехватывал все значения, кроме «a», а не одно значение 0. Извините, но операторы switch-case не работают таким образом , Выражение после ключевого слова case должно быть значением, известным компилятору.

10 голосов
/ 10 февраля 2012

Нет, извините, не так, как вы намереваетесь (отрицая все логическое выражение, а не один из его компонентов).Но вы можете использовать предложение default, чтобы сопоставить все, что не соответствует case.

1 голос
/ 10 февраля 2012

Каждое условие case имеет значение int в качестве условного значения.Символ считается частным случаем int.Использование оператора NOT не имеет смысла в регистре.

Ответ Джо - лучший.

...