I had tried to debug but no luck I can\'t understand why the second printf() is call increment() thrice but the first one call twice as expected.
#include &l
( (a) > (b) ? (a) : (b) )
In this statement, if b stands for a function, it will be called just once if (a > b) is true, but twice if (a > b) is false: one to give parameters for the comparison(b in "(a) > (b)"), the other to return a value for the whole statement(b in the latter part of the macro).
In your case, there's an extra call of "b"(increment) to provide the second integer parameter in each test.
Altogether, its twice and thrice.