为什么打破不能与三元运算符一起使用?

Shu*_*aik 1 c break ternary

while(*p!='\0' && *q!='\0')
{
        if(*p==*q)
        {
               p++;
               q++;
               c++;
        }
        else
        break;
}
Run Code Online (Sandbox Code Playgroud)

我用三元运算符编写了这个,但为什么它给break语句提供错误?

*p==*q?p++,q++,c++:break;
Run Code Online (Sandbox Code Playgroud)

gcc编译器给出了这个错误:'break'之前的预期表达式

Fre*_*ios 7

当你使用三元运算符时,它不像是一个if.三元运算符具有以下形式:

(condition ? expression_if_true : expression_if_false);
Run Code Online (Sandbox Code Playgroud)

这两个表达式必须具有相同的类型,否则会产生废话.

正如Thilo所说,你不能在这个运算符中使用语句,只能表达式.这是因为整个三元运算符本身必须是表达式,具体取决于条件.

  • 并且`break`根本不是表达. (3认同)

Mat*_* F. 5

语法是:

(condition ? expr_true : expr_false);
Run Code Online (Sandbox Code Playgroud)

expr_trueexpr_false必须有一个共同的类型(这将是三元运算符的结果)。此外,当然,break它不是一个表达式,它是一个语句。