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

私はこれを3者演算子を使用して書いていますが、なぜbreak文のエラーですか?あなたは三項演算子を使用する場合、それはifが好きされていない「ブレーク」なぜ3進演算子でブレークを使用できないのですか?

+11

'break;'は文であり、式ではないためです。 – MikeCAT

+1

ポインタの算術演算はしばしばniceですが、他の言語がほとんどないCの機能の1つですが、常に最適な解決策ではありません。イテレータとして 'size_t i'を使うようにループを再編成すると、合理的なアーキテクチャで性能を落とすことなく、コードはもっと良くなります。 – EOF

+1

[なぜC++の三項条件文の中で "break"文を使用できないのですか?](http://stackoverflow.com/questions/28642693/why-cant-i-use-a-break-ステートメント内の三項条件ステートメント・イン・コ) – Twahanz

答えて

6

前に期待の式:

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

GCCコンパイラは、このエラーが発生します。

(condition ? expression_if_true : expression_if_false); 

これらの2つの式は、同じタイプでなければなりません。そうでないとナンセンスになります。

Thilo氏によると、この演算子では式のみを使用できません。これは、三項演算子全体が条件に応じて式そのものでなければならないためです。

+3

と' break'は全く表現ではありません。 – Thilo

1

構文は次のとおりです

(condition ? expr_true : expr_false); 

expr_trueexpr_falseは(三項演算子の結果であろう)一般的なタイプを持っていなければなりません。 もちろん、breakは式ではありません。ステートメントです。

関連する問題