5 ms·
Off-topic, but nested functions are one of my favorite gcc extensions.
by kkylin 9y ago
Off-topic, but nested functions are one of my favorite gcc extensions.
- WalterBright 9y agoI discovered with C and C++ compilers, if an extension was added that was not in the Standard, nobody would use it - not even the people who requested the extension. It wasn't like the Pascal community, where nobody would use the compiler unless it had a boatload of extensions :-)
- pjmlp 9y agoThey tried to fix that with ISO Extended Pascal, but by then compatibility with Turbo Pascal extensions was more relevant.
- kkylin 9y agoI think you're onto something (about C extensions). There was a time, before clang became default on osx, when Apple deprecated nested functions (and perhaps others) in their version of gcc, and afaik no one complained. So I may well be one of the very few. Oh well.
- anthay 9y agoIn the past I've sometimes used standard C++ local structs to nest functions. E.g.: int f() { struct local { static int nested_func() { return 123; } }; return local::nested_func(); }
- WalterBright 9y agoI've done that, too. It's clumsy and only does half the job (doesn't provide access to locals). At some point one just gets tired of the workarounds :-)
- anthay 9y agoIt's probably a bit late for this reply, but... Another clumsy workaround is to use operator(). Again, standard C++ and this one has access to local variables: int g() { int x, y; struct local { int & a_; int & b_; local(int & a, int & b) : a_(a), b_(b) {} int operator()() { return a_ + b_; } } nested(x, y); x = 99; y = 1; return nested(); } assert(g() == 100);