-3

No compilation and runtime errors

Is 2019 is kind of variable or anything? Explain this please

#include <stdio.h>

int main()
{
    int a, b;
    a= b = 2020, 2019;
    printf("%d %d", a, b);

    return 0;
}
dHaYaN
  • 1

1 Answers1

1
a = b = 2020, 2019;

Is parsed as:

(a = (b = 2020)), 2019;

The , is a comma operator. First the left side of , is executed, it's result is discarded, a sequence point happens and then the right side is executed. So let's execute the left side:

First the inner braces need to be executed, ie. b = 2020 is executed, ie. b is assigned the value of 2020. The simple assignment operator = "returns" the same value that was stored, ie. in this case b = 2020 returns the value 2020. So now we have:

(a = 2020), 2019;

Then a = 2020 is executed - a is assigned the value of 2020. So now we have:

2020, 2019;

The result of the left side of comma operator is ignored (and side effects happen). So now we have:

2019;

It's just a value, something one could call an "empty statement" or "empty expression". A single value doesn't do anything, it is permitted by the language grammar and is like just ignored. Mostly empty statements with a (void) cast are used to remove compilers warnings about unused variables, they are used like int unused; (void)unused; - the (void)unused is just an expression that doesn't do anything.

Can you explain what happens with 2019

Nothing.

and what it is?

A rvalue of type int. A expression that has type int and value 2019.

Is 2019 is kind of variable or anything?

It's not a variable, it's just an expression. Try it out, any number is an expression, like int main() { 1; 2; 3; 1.0; 1 + 1; }

KamilCuk
  • 120,984
  • 8
  • 59
  • 111