2016-06-26 8 views
4

nach dem C Standard (und K & R) der Syntax des Comma-Operators ist wie folgt:C Standard - Comma Operator Syntax

expression: 
    assignment-expression 
    expression, assignment-expression 

Aber warum funktioniert diese Anweisung?

5+5, 1+1; 

5 + 5 und 1 + 1 nicht Zuordnung-Ausdrücke, aber der C-Standard erfordert Zuordnung-Ausdrücke als Operanden für den Comma-Operator.

Antwort

5

assignment-expressionconditional-expressionlogical-OR-expressionlogical-AND-expressioninclusive-OR-expressionexclusive-OR-expressionAND-expressionequality-expressionrelational-expressionshift-expressionadditive-expression die sind schließlich ⊃ additive-expression + multiplicative-expression.

Also nein, 5 + 5 ist in der Tat ∈ assignment-expression.


⊃ ist die "enthält" -Beziehung.

+3

Mit anderen Worten, die Symbole in der formalen Grammatik der Sprache müssen wie in der Grammatik definiert interpretiert werden. Jede englischsprachige Interpretation, die durch ihre Schreibweise impliziert wird, ist bestenfalls eine Richtlinie. –

2

Die Art und Weise, wie die C-Grammatik definiert ist, mag von vornherein nicht offensichtlich sein.

Zuerst schauen wir uns, wie die assignment-expression definiert:

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

Das bedeutet, dass es entwederconditional-expression oder diese Kombination von Token sein kann. Ersteres wird wie folgt definiert:

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

Schließlich werden Sie feststellen:

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

wo additive-expression auf Ausdrücke wie zum 1+1 entspricht.