2016-06-26 8 views
4

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

expression: 
    assignment-expression 
    expression, assignment-expression 

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

5+5, 1+1; 

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

ответ

5

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

Таким образом, нет, 5 + 5 действительно является assignment-expression.


⊃ есть отношение «содержит».

+3

Другими словами, символы в грамматике языка должны интерпретироваться так, как они определены в грамматике. Любая интерпретация на английском языке, подразумеваемая их написанием, в лучшем случае является ориентиром. –

2

Способ определения грамматики 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.