int main(void) {
static int=5;
if(--i) {
main();
printf(\"%d\",i);
}
}
the output of above program is---
0000
But I t
i
to 5main
until i
becomes zero.i
being zero.printf
There lies the answer.
You can prove this by using a debugger
[First call: i->4 and call main()]
[Second call: i->3 and call main()]
[Third call: i->2 and call main()]
[Fourth call: i->1 and call main()]
[Fifth call: i->0 and condition false as it gives 0.]
Now it's time for the printing of value of i, which was the next line after main(). Control go back to fourth to first call to print value of i.
[Fourth Call: printing value of i which is 0.]
[Third call: printing value of i which is 0.]
[Second call: printing value of i which is 0.]
[First call: printing value of i which is 0.]
The reason for the zeros is that i
is decremented down to zero before the very first printf
statement is run. As it unwinds, it prints i (which is still zero) each time.
It would be better to use a separate function that main()
calls and passes a parameter to (and then pass the parameter to each call rather than using a static variable).