the return value of level++
will be level
and therefore
pass level
into DoStuff
. This could be a fairly nasty bug as the recursion will never end (from what is shown DoStuff
is always being passed with the same value). Perhaps ++level
or level + 1
is meant instead?
level + 1
will pass level + 1
into DoStuff
and leave level
unchanged for the rest of the function.
The post-increment operator (variable++) is precisely equivalent to the function
int post_increment(ref int value)
{
int temp = value;
value = value + 1
return temp;
}
while the pre-increment operator (++variable) is precisely equivalent to the function
int pre_increment(ref int value)
{
value = value + 1;
return value;
}
Therefore, if you expand the operator inline into the code, the operators are equivalent to:
DoStuff(a + 1)
int temp = a + 1;
DoStuff(temp);
DoStuff(++a)
a = a + 1;
DoStuff(a);
DoStuff(a++);
int temp = a;
a = a + 1;
DoStuff(temp);
It is important to note that post-increment is not equivalent to:
DoStuff(a);
a = a + 1;
and looking at the stack traces for the various behavior:
// level++
DoStuff(int level = 1) //original call
DoStuff(int level = 1) //level = 2 after call
DoStuff(int level = 1) //level = 2 after call
DoStuff(int level = 1) //level = 2 after call
// ++level
DoStuff(int level = 1) //original call
DoStuff(int level = 2) //level = 2 after call
DoStuff(int level = 3) //level = 3 after call
DoStuff(int level = 4) //level = 4 after call
// level + 1
DoStuff(int level = 1) //original call
DoStuff(int level = 2) //level = 1 after call
DoStuff(int level = 3) //level = 2 after call
DoStuff(int level = 4) //level = 3 after call
Additionally, as a point of style, one shouldn't increment a value unless the intention is to use the incremented value (a specific version of the rule, "don't assign a value to a variable unless you plan on using that value"). If the value i + 1
is never used again, then the preferred usage should be DoStuff(i + 1)
and not DoStuff(++i)
.