a=3,2,1; gives error in gcc

c, comma-operator, gcc, variable-assignment

Solution

If you separate the initialization from the declaration, you may get what you expected:

int a;
a = 3, 2, 1;     // a == 3, see note bellow

or

int a;
a = (3, 2, 1);   // a == 1, the rightmost operand of 3, 2, 1

as your original command is syntactically incorrect (it is the declaration so it expected other variables to declare instead of numbers `2` and `1`)

Note: All side effects from the evaluation of the left-operand are completed before beginning the evaluation of the right operand.

So

a = 3, 2, 1

which are 3 comma operators `a = 3`, `2` and `1` are evaluated from left to right, so the first evaluation is

a = 3, 2

which result 2 (right-operand) (which is by the way not assigned to any variable, as the value of the left-operand `a = 3` is simply `3`), but before giving this result it is completed the side effect `a = 3` of the left-operand, i. e. assigning `3` to variable `a`. (Thank AnT for his observation.)

Problem

I tried the following code in gcc: ``` #include<stdio.h> int main() { int a=3,2,1;//////////////////////ERROR!////////////////////////// printf("%d", a); return 0; } ``` I expected it to compile successfully as: - a series of integer expressions seperated by commas will be evaluated from left to right and the value of the right-most expression becomes the value of the total comma separated expression. Then, the value of the integer variable a should have been 1 right? Or is it 3? And why am I getting this error when I try to execute this program? error: expected identifier or '(' before numeric constant

Original source

Related problems