2016-06-16 89 views
1
while(*p!='\0' && *q!='\0') 
{ 
     if(*p==*q) 
     { 
       p++; 
       q++; 
       c++; 
     } 
     else 
     break; 
} 

我已经写了这个使用三元运算符,但为什么它给错误语句的错误?为什么break不能和三元运算符一起使用?

*p==*q?p++,q++,c++:break; 

gcc编译器给出了这样的错误:“休息”

+11

因为'break;'是一个语句,而不是表达式。 – MikeCAT

+1

虽然指针运算通常很好,并且是其他语言所具有的C特性之一,但它并不总是最好的解决方案。如果重新组织循环以使用'size_t i'作为迭代器,则代码会更好,而不会在任何合理的体系结构上丢失性能。 – EOF

+1

[为什么我不能在C++的三元条件语句中使用“break”语句?](http://stackoverflow.com/questions/28642693/why-cant-i-use-a-break- statement-in-a-ternary-conditional-statement-in-c) – Twahanz

回答

6

之前预期的表现当您使用三元运算符,它不像一个if。三元运算符具有以下形式:

(condition ? expression_if_true : expression_if_false); 

这两个表达式必须具有相同的类型,否则,使无义。

而且如Thilo所说,你不能在这个运算符中使用语句,只能表达式。这是因为根据条件,整个三元运算符必须是一个表达式。

+3

和'休息'根本不是一个表达。 – Thilo

1

的语法是:

(condition ? expr_true : expr_false); 

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

相关问题