C语言中的开关语句

4
我正在用C语言编写一个程序,其中包含switch语句,我想知道编译器是否会接受这样的语句:
case !('a'):

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

4
请使用 if 语句。 - Cody Gray
3个回答

12

你真的尝试过了吗?

好的,我试过了(在Mac OS X上使用gcc)。

!是逻辑非运算符,而 !(x) 对于 x=0 时返回1,对于其他值则返回0。'a' 是一个在编译时就已知其值的常量,因此编译器将 !('a') 计算为0。所以结果为

case !('a'):

等同于

case 0 :

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

我想你不想这样做,而是想要一个除了'a'之外所有值的情况,而不是单个值0。抱歉但是switch-case语句不能这样工作。紧跟case关键字的表达式必须是编译器已知的值。


1
+1!我相信这是唯一描述幕后情况的答案。这很重要,因为很难判断OP是否区分!!= :) - Miguel

10

不好意思,不能以你期望的方式进行(否定整个逻辑表达式而不是其中一个组成部分)。但是你可以使用default子句来匹配未被case匹配的任何内容。


1
每个case条件都有一个int作为其条件值。字符被视为int的特殊情况。在case语句中使用NOT运算符没有意义。
Joe的答案是最好的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接