-2

What is the output of this program and how?

#include<stdio.h>

int main(){
     int a=0,b=10;
     a=b---
     printf("the value of b=%d",b);
     printf("the value of a=%d",a);
     return 0;
}
Sourav Ghosh
  • 133,132
  • 16
  • 183
  • 261

2 Answers2

5

In your code, writing

 a=b---
 printf("the value of b=%d",b);

is same as

a = b---printf("the value of b=%d",b);

which is an expression with undefined behavior, as an attempt is made to change and use the value of variable b in two subexpressions without a sequence point in between. Hence, the output of this code cannot be justified.

Without the above problem, in general, the syntax is similar to

x = (y--) -  (<return value of printf() call>)

which is a perfectly valid syntax.


Note:

Why a = b---<something> is treated as a = (b--) - <something> and not a = b - -- <something> is due to the maximal munch rule.

Community
  • 1
  • 1
Sourav Ghosh
  • 133,132
  • 16
  • 183
  • 261
1

Strictly speaking, as others have said since this is undefined behaviour, the result could be anything . And while they're right, it doesn't explain why you get this specific answer in this specific compiler.

In practice b will usually be printed as 9, or 10 depending on whether the compiler does the decrememnt first or the printf first.

printf returns the number of characters printed. Which I think is 16 or 17 in this case.

So this is like writing a = (b--) - 16; b is 10 before the decrement and it's a post decrement so this is the value used.

luckykaa
  • 166
  • 6