在C中切换语句

Sam*_*ams 4 c switch-statement

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

case !('a'):
Run Code Online (Sandbox Code Playgroud)

我在网上找不到任何使用!switch语句的程序.

Pau*_*ter 12

你真的尝试过吗?

好吧,我做了(Mac OS X上的gcc).

!是逻辑否定运算符,并且!(x)返回1表示x为0,其他为0. 'a'具有在编译时已知的值,因此编译器的计算结果!('a')为0.所以

case !('a'):
Run Code Online (Sandbox Code Playgroud)

相当于

case 0 :
Run Code Online (Sandbox Code Playgroud)

它甚至不会生成编译器错误,并且运行正常.

我认为这不是你想要做的,而是想要一个能够捕获除'a'之外的所有值的情况,而不是单个值0.抱歉但是switch-case语句不能那样工作.case关键字后面的表达式必须是编译器已知的值.


Joe*_*Joe 10

不,抱歉,不是你想要的方式(否定整个逻辑表达式而不是其中一个组件).但是你可以使用该default子句匹配任何与a不匹配的东西case.