Why break cannot be used with ternary operator?

Shubham S. Naik picture Shubham S. Naik · Jun 16, 2016 · Viewed 7.9k times · Source
while(*p!='\0' && *q!='\0')
{
        if(*p==*q)
        {
               p++;
               q++;
               c++;
        }
        else
        break;
}

I have written this using ternary operator but why its giving error for break statement?

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

gcc compiler gives this error: expected expression before ‘break’

Answer

Boiethios picture Boiethios · Jun 16, 2016

When you use a ternary operator, it is not like an if. The ternary operator has this form:

(condition ? expression_if_true : expression_if_false);

Those two expression must have the same type, otherwise that makes nonsense.

And as Thilo said, you cannot use statement in this operator, only expression. This is because the whole ternary operator must be an expression itself, depending on the condition.