Duplication of Side Effects
3.10.4 Duplication of Side Effects
Many C programs define a macro min
, for “minimum”, like this:
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
When you use this macro with an argument containing a side effect, as shown here,
next = min (x + y, foo (z));
it expands as follows:
next = ((x + y) < (foo (z)) ? (x + y) : (foo (z)));
where x + y
has been substituted for X
and foo (z)
for Y
.
The function foo
is used only once in the statement as it appears in the program, but the expression foo (z)
has been substituted twice into the macro expansion. As a result, foo
might be called two times when the statement is executed. If it has side effects or if it takes a lon