Arjun Suresh (talk | contribs) |
Arjun Suresh (talk | contribs) |
||
| Line 28: | Line 28: | ||
|| (x--, y++) will return the value of y which is 1, as comma operator always returns the right value. Hence, switch case starts with 1. Before starting the switch case, x is decremented and y incremented also. So, in case 1, x is 7 and y is 2. x is changed to 56 in case 1. Because of no break, all cases are evaluated here. So, in case 2, x becomes 28 and y becomes 56. In case 3 nothing happens. In case 4, y becomes 55 and finally in default case x becomes 33. | || (x--, y++) will return the value of y which is 1, as comma operator always returns the right value. Hence, switch case starts with 1. Before starting the switch case, x is decremented and y incremented also. So, in case 1, x is 7 and y is 2. x is changed to 56 in case 1. Because of no break, all cases are evaluated here. So, in case 2, x becomes 28 and y becomes 56. In case 3 nothing happens. In case 4, y becomes 55 and finally in default case x becomes 33. | ||
| + | {'''What will be the output??''' | ||
| + | <syntaxhighlight lang="c"> | ||
| + | #include <stdio.h> | ||
| + | #include <string.h> | ||
| + | |||
| + | |||
| + | int main() | ||
| + | { | ||
| + | int i = 3, j = 6, k; | ||
| + | |||
| + | k = (i++ * j, ++i * j); | ||
| + | printf("%d",k); | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |type="()" | ||
| + | /} | ||
| + | -Undefined behavior | ||
| + | -Compiler dependent | ||
| + | +30 | ||
| + | -24 | ||
| + | ||comma operator always returns the right operand and it also forms a sequence point (comma in function parameter list is actually just a separator and not comma operator thus does not form a sequence point). Hence post increment of i is done before comma operator starts and then pre increment is done and finally i (5) is multiplied by j (6) giving 30. | ||
| + | |||
</quiz> | </quiz> | ||
<quiz display="simple"> {What will be the output?? <syntaxhighlight lang="c">
int main() {
int x = 8, y = 1;
switch(x--, y++)
{
case 1: x*=8;
case 2: y*= x/=2;
case 3:
case 4: y--;
default: x+=5;
}
printf("%d %d", x, y);
} </syntaxhighlight> |type="()" /} -64 2 -64 1 +33 55 -33 56 || (x--, y++) will return the value of y which is 1, as comma operator always returns the right value. Hence, switch case starts with 1. Before starting the switch case, x is decremented and y incremented also. So, in case 1, x is 7 and y is 2. x is changed to 56 in case 1. Because of no break, all cases are evaluated here. So, in case 2, x becomes 28 and y becomes 56. In case 3 nothing happens. In case 4, y becomes 55 and finally in default case x becomes 33.
{What will be the output?? <syntaxhighlight lang="c">
int main()
{
int i = 3, j = 6, k;
k = (i++ * j, ++i * j); printf("%d",k); }
</syntaxhighlight> |type="()" /} -Undefined behavior -Compiler dependent +30 -24 ||comma operator always returns the right operand and it also forms a sequence point (comma in function parameter list is actually just a separator and not comma operator thus does not form a sequence point). Hence post increment of i is done before comma operator starts and then pre increment is done and finally i (5) is multiplied by j (6) giving 30.
</quiz>
This work is licensed under the CC By-SA 3.0 , without all the cruft that would otherwise be put at the bottom of the page.
Sister Sites: GATE CSE Wiki, GATE CSE, Aptitude Overflow