Search code examples
cinitializationparenthesescurly-bracescomma-operator

What's the relation between comma and parentheses and curly braces in C?


I've the following two lines , and could not find a good explanation

I did read about the dual nature of comma as operator and separator , and priority precedence of parentheses , and comma as a sequence point .

int a =(3,4) // here a is 4 because comma here is an operator first a=3 , then a = 4 
int a={3,4} // here is the problem , should not a=3 and then a =4 too because comma is a sequence point or it's undefined behavior or what ?

I expected

a=4
a=4 , 
but the actual output is 
a=4 , a=3

Solution

  • In the first case:

    int a =(3,4);
    

    The variable is initialized with an expression consisting of a comma operator and parenthesis. This expression evaluates to 4 as you correctly surmised which is what is assigned to a.

    In the second case:

    int a={3,4};
    

    The variable is initialized with an initializer list which is what the curly braces denote, and the comma separates the initializers. If the variable in question was a struct or array, the values in the initializer list would be assigned to each member. If there are more initializers than members, the excess values are discarded.

    So a is assigned the first value in the initializer list, namely 3, and the value 4 is discarded.

    Had you done this:

    int a[2] = {3, 4};
    

    Then a[0] would be 3 and a[1] would be 4.