在C中切换语句

时间:2012-02-10 02:50:32

标签: c switch-statement

我正在使用switch语句在C中编写程序,我想知道编译器是否会接受诸如

之类的语句
case !('a'):

我找不到任何使用带有switch语句的!的在线程序。

3 个答案:

答案 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语句中没有意义。

乔的回答是最好的。