我正在使用switch语句在C中编写程序,我想知道编译器是否会接受诸如
之类的语句case !('a'):
我找不到任何使用带有switch语句的!
的在线程序。
答案 0 :(得分:12)
你真的尝试过吗?
好吧,我做了(Mac OS X上的gcc)。
!是逻辑否定运算符,并且!(x)返回1表示x为0,其他为0。
'a'
具有在编译时已知的值,因此编译器将!('a')
计算为0.所以
case !('a'):
相当于
case 0 :
它甚至不会生成编译器错误,并且运行正常。
我认为这不是你想要做的,而是想要一个能够捕获除'a'之外的所有值而不是单个值0的情况。抱歉但是switch-case语句不能这样工作。 case
关键字后面的表达式必须是编译器已知的值。
答案 1 :(得分:10)
不,抱歉,不是你想要的方式(否定整个逻辑表达式而不是其中一个组件)。但您可以使用default
子句匹配case
未匹配的任何内容。
答案 2 :(得分:1)
每个case条件都有一个int作为其条件值。字符被认为是int的特例。使用NOT运算符在case语句中没有意义。
乔的回答是最好的。