In Haskell, by contrast, evaluation is
lazy--expressions are only evaluated when, and as much, as they need to be (in fairness,
C does include shortcutting of Boolean expressions which is a minor kind of laziness).
The definitions of f and g in the example show a simple form of the difference.