Skip to content

Comment on Write a program that makes 2 + 2 = 5parent

Comments

It's only likely, but not certain that a or b get overwritten. How your stack is laid out is entirely up to the compiler. arr[1] is already out of bounds, however, we don't know for certain what's immediately above the array.

With compiler optimizations turned on, it's almost guaranteed not to happen, because a and b are very likely to be stored in CPU registers.

Or rather, a and b will be constant folded so that the printf call is optimized to "push #4; push ptrFmt; call printf"

A truly good compiler would replace that printf by a call to putchar or pass a constant string to 'write' (gcc almost (?) does that. See http://www.ciselant.de/projects/gcc_printf/gcc_printf.html)

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.