while(*p!='\0' && *q!='\0')
{
if(*p==*q)
{
p++;
q++;
c++;
}
else
break;
}
私はこれを3者演算子を使用して書いていますが、なぜbreak文のエラーですか?あなたは三項演算子を使用する場合、それはif
が好きされていない「ブレーク」なぜ3進演算子でブレークを使用できないのですか?
while(*p!='\0' && *q!='\0')
{
if(*p==*q)
{
p++;
q++;
c++;
}
else
break;
}
私はこれを3者演算子を使用して書いていますが、なぜbreak文のエラーですか?あなたは三項演算子を使用する場合、それはif
が好きされていない「ブレーク」なぜ3進演算子でブレークを使用できないのですか?
前に期待の式:
*p==*q?p++,q++,c++:break;
GCCコンパイラは、このエラーが発生します。
(condition ? expression_if_true : expression_if_false);
これらの2つの式は、同じタイプでなければなりません。そうでないとナンセンスになります。
Thilo氏によると、この演算子では式のみを使用できません。これは、三項演算子全体が条件に応じて式そのものでなければならないためです。
と' break'は全く表現ではありません。 – Thilo
構文は次のとおりです
(condition ? expr_true : expr_false);
expr_trueとexpr_falseは(三項演算子の結果であろう)一般的なタイプを持っていなければなりません。 もちろん、break
は式ではありません。ステートメントです。
'break;'は文であり、式ではないためです。 – MikeCAT
ポインタの算術演算はしばしばniceですが、他の言語がほとんどないCの機能の1つですが、常に最適な解決策ではありません。イテレータとして 'size_t i'を使うようにループを再編成すると、合理的なアーキテクチャで性能を落とすことなく、コードはもっと良くなります。 – EOF
[なぜC++の三項条件文の中で "break"文を使用できないのですか?](http://stackoverflow.com/questions/28642693/why-cant-i-use-a-break-ステートメント内の三項条件ステートメント・イン・コ) – Twahanz