Синтаксис C - Синтаксис командного оператора

80
7

в соответствии со стандартом C (и K & R) синтаксис Comma-Operator выглядит следующим образом:


expression:
assignment-expression
expression, assignment-expression

Но почему это утверждение работает?


5+5, 1+1; 

5 + 5 и 1 + 1 не являются выражениями присваивания, но в C-стандарте требуются выражения-назначения в качестве операндов для Comma-Operator.

спросил(а) 2016-06-26T20:33:00+03:00 3 года, 9 месяцев назад
1
Решение
88

assignment-expressionconditional-expressionlogical-OR-expressionlogical-AND-expressioninclusive-OR-expressionexclusive-OR-expressionAND-expressionequality-expressionrelational-expressionshift-expressionadditive-expression, которые, наконец, являются ⊃ additive-expression + multiplicative-expression.


Итак, нет, 5 + 5 действительно является ∈ assignment-expression.

⊃ является отношением "содержит".

ответил(а) 2016-06-26T20:47:00+03:00 3 года, 9 месяцев назад
62

Способ определения грамматики C может быть не очевиден в первую очередь.


Во-первых, давайте посмотрим, как определяется assignment-expression:


(6.5.16) assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression

Это означает, что это может быть либо conditional-expression, либо последняя комбинация токенов. Первый определяется как:

(6.5.15) conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression

В конце концов вы столкнетесь:


(6.5.7) shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression

где additive-expression соответствует выражениям 1+1.

ответил(а) 2016-06-26T20:52:00+03:00 3 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема