GNU C Extensions
GNU C extends the C langauge with several features that are not standard
compliant. However, they are supported by GCC, Clang, and any compiler that
defines the macro __GNUC__. The compiler switch -pedantic will warn about the
usage of these extensions.
Statement Expressions
GNU C (and C++) has an extension for having statements and declarations inside an expression:
// computes expressions a and b only once #define max(a,b) ((a) > (b) ? (a) : (b)) #define max_safe(a,b) ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) int a = 4, b = 4; printf("Normal macro: %i\n", max(++a, b)); a = 4, b = 4; printf("State expr: %i\n", max_safe(++a, b));
This extension is implemented on:
gcc,g++,clang,clang++clang-cl.exe,clang.exe,clang++.exetcc