+ 5
What will be the output of this code and how? please explain this code.
main () { int x=3, y=4,z; z=x++ + ++y - x-- + --y; printf("%d ",z); } /* what will be the value of x, y and z; */
5 Antworten
+ 19
//"no output" will be the output of this code after removing some errors
x will be 3 , y will be 4 & z will be 8
// z= 3 + 5 - 4 + 4
+ 6
First of all, you should use better formatting for your question. The title should describe in short, what the question is about; there should be a language specified in the tags; the code needs to be in the question body and better formatted.
Second, if the code is:
int x = 3, y = 4, z;
z = x++ + ++y - x-- + --y;
then the code produces undefined behaviour, because you are modifying x and y more than once in one expression (sequence point).
See the following question, and the links in it's answers for more info:
https://www.sololearn.com/Discuss/989706/?ref=app
+ 3
As a support for Marvin's answer:
http://en.cppreference.com/w/cpp/language/operator_incdec
Since this code causes Undefined Behaviour (UB) in C++, different compilers can have different ways to handle this code.
These compilers don't treat the code the same way as sololearn compiler:
http://coliru.stacked-crooked.com/
http://rextester.com/l/cpp_online_compiler_gcc
This is a nice question, but try to apply good coding habits by avoiding theoretically confusing statements such as x=x++.
Maybe you can rewrite the code in this way:
// one possible meaning of z = x++ + ++y - x-- + --y;
int x=3, y=4, z;
x++;
z = x;
x--;
z -= x;
--y;
z += y;
++y;
z += y;
std::cout<<"x = "<<x<<"\ny = "<<y<<"\nz = "<<z<<std::endl;
+ 3
@Low Kai Han, Did you manage to find a compiler that produces a result different from (3, 4, 8)? Because I tried to find an example for this question and failed. I even compared the dissassembly, produced by gcc and clang (linked below), and the order of operations was exactly the same there.
https://code.sololearn.com/c5yf9l596Yx4/?ref=app
Anyway, even if all the compilers produced the same result, the fact that you shot yourself in the leg and missed, doesn't make doing it again a good idea.
P.S. For people that are interested in this question but don't want to drill down the links in the question I linked above, here are most relevant direct links:
http://en.cppreference.com/w/cpp/language/eval_order
https://en.wikipedia.org/wiki/Sequence_point
P.P.S. @Gaurav Agrawal, In your claim that z will be calculated as z= 3 + 5 - 4 + 4 you assume that C++ evaluates arithmetic expressions from left-to-right. This assumption is very common but it's not true. The expression may as well be evaluated in right-to-left or any other order. The operands may even be evaluated in parallel, wich will lead to race conditions in side effects. For example, if the expression would be executed right-to left, it will evaluate z as: z = 2 + 4 - 3 + 3.
+ 2
https://code.sololearn.com/cAcEd9MTLkHF/?ref=app
X=3
y=4
z=8
in java working normally