[Redirected to gcc-help] Jason Baron wrote: > While working on some Linux kernel code, I've found that functions that > are declared as 'static inline' are having their arguments evaluated > well before they are used. For example I have a function: > > static inline void trace(arg1, arg2) > { > if (unlikely(enabled)) { > <use the arguments> > } > } > > If i call 'trace(ptr->arg1, ptr->arg2)', then the pointers are > dereferenced before the 'if' is executed. Is there any way to delay the > argument evaluation until they are used? I don't think so. Expanding this inline function is the same as arg1 = ptr->arg1; arg2 = ptr->arg2; if (unlikely(enabled)) { <use the arguments> } You want a macro: #define trace(arg1, arg2) \ { \ if (unlikely(enabled)) { \ <use the arguments> \ } \ Andrew.