Joe Perches writes: > I know that gcc preserves stack slots for statement expressions. > > http://gcc.gnu.org/ml/gcc-patches/2002-02/msg00958.html > > What about statement expressions that return arrays? > When does GCC free stack used by statement expression array returns? > > For instance: > > #define itoa(i) \ > ({ char tmp[16]; sprintf(tmp, "%d", i); tmp; }) > > printf("%s %s\n", itoa(1), itoa(2)); > > is the printf output guaranteed to be "1 2" or is it undefined? ISO/IEC 9899:1999 (E) 6.2.1 Scopes of identifiers 2 For each different entity that an identifier designates, the identifier is visible (i.e., can be used) only within a region of program text called its scope. Unless you see some gcc documentation to the contary, that's the rule. Andrew.