我可以在三元运算符中使用 'continue' 语句吗?



如何在三元运算符中使用continue语句?

for (i = 0; i < arr_size - 1; i++)
{
ar[i] == 1 || ar[i] == 2 || ar[i] == 3 ? count++ : continue;
}

我可以这样替换它。

for (i = 0; i < arr_size - 1; i++)
{
ar[i] == 1 || ar[i] == 2 || ar[i] == 3 ? count++ : count;
}

不能以这种方式使用continue,因为它是一个语句,并且三元运算符的操作数必须是表达式

与任何运算符一样,它的结果具有一个可以在其他表达式中使用的值。如果允许以您想要的方式使用continue,那么表达式的值是多少?那样用是没有意义的。

三元运算符不适合您所需要的。它应该重写为if语句:

if (ar[i] == 1 || ar[i] == 2 || ar[i] == 3) {
count++;
}

三元运算符有一些特殊的规则。

例如,您只能在这三个参数中使用表达式。但continue;是一个完整的句子。所以它不能与三元运算符一起工作。

如果您必须使用continue的三元运算符,您可以尝试以下操作:

for (i = 0; i < arr_size - 1; i++)
{
bool flag = false;
ar[i] == 1 || ar[i] == 2 || ar[i] == 3 ? count++ : (flag = true);
if(flag) continue;
}

请参阅此C参考并阅读n1570或一些更新的C标准。另请阅读现代C,并研究现有用C编码的自由软件的源代码,如GNU make。

表达式和语句是不同的

代码:

for (i = 0; i < arr_size - 1; i++)
{
if (ar[i] == 1 || ar[i] == 2 || ar[i] == 3)
count++;
else
continue;
}

假设else continue是循环中的最后一件事,您可以省略它

提示:使用最新的GCC编译器gcc -Wall -Wextra -g编译C代码。

阅读C编译器(例如GCC(和调试器的文档(例如GDB(。

如果允许,可以使用静态源代码分析工具,如Clang静态分析器、Frama-C、Bismon或DECODER项目。

(对于Frama-C、Bismon和DECODER,请在2021年通过电子邮件联系我basile.starynkevitch@cea.fr。(

最新更新