ожидаемое выражение перед возвращением - PullRequest
2 голосов
/ 14 декабря 2009

следующий оператор c не проходит через компилятор .error, являясь «ожидаемым выражением до возврата».

           int max( int a,int b)
            {
                 a>b?return a:return b;
            }

и да, я знаю, что могу написать это для нахождения max как

            return a>b?a: b;

, что вполне нормально и будет отлично работать. но мой вопрос в том, что именно является проблемой с первым кодом. Почему мы не можем использовать return в тернарном опоераторе, хотя мы можем довольно легко использовать вызов функции там?

СПАСИБО заранее !!!

Ответы [ 5 ]

26 голосов
/ 14 декабря 2009

C грамматика говорит, что вещи после '?' и ':' должны быть выражениями - return - это не выражение, это утверждение.

10 голосов
/ 14 декабря 2009

Операнды троичного ?: выражения. Оператор возврата - это оператор, а не выражение.

6 голосов
/ 14 декабря 2009

?: - это оператор, а не конструкция потока управления, поэтому все, что связано с операндами, должно быть выражением, а операторы возврата (или любые операторы) не являются допустимыми подвыражениями.

?: - это не просто сокращение для if-else (которое является конструкцией потока управления); это семантически отличается.

if( a > b ) return a; else return b;

с другой стороны - это то, что вы пытались сделать, и вполне допустимо (если, возможно, стилистически опрометчиво).

6 голосов
/ 14 декабря 2009

Ожидается, что вторая и третья части троичного выражения приведут к значениям, а не к операторам возврата, как в вашем примере.

1 голос
/ 15 декабря 2009

Тернарному оператору нужно выражение, return - это оператор.

Подробнее об условном операторе здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...