What about using builtin symbols defined by the compiler (gcc) itself. For example on Alpha I have : lappa{bussat}(74) echo 'main(){printf("hello world\n";}' |gcc -E -v - Reading specs from /usr/local/lib/gcc-lib/alpha-dec-osf4.0/2.7.2.3/specs gcc version 2.7.2.3 /usr/local/lib/gcc-lib/alpha-dec-osf4.0/2.7.2.3/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=7 -Dunix -D__osf__ -D__alpha -D__alpha__ -D_LONGLONG -DSYSTYPE_BSD -D_SYSTYPE_BSD -D__unix__ -D__osf__ -D__alpha -D__alpha__ -D_LONGLONG -D__SYSTYPE_BSD__ -D_SYSTYPE_BSD -D__unix -D__SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha) -D__LANGUAGE_C__ -D__LANGUAGE_C -DLANGUAGE_C - GNU CPP version 2.7.2.3 #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/local/alpha-dec-osf4.0/include /usr/local/lib/gcc-lib/alpha-dec-osf4.0/2.7.2.3/include /usr/include End of search list. # 1 "" main(){printf("hello world\n";} On HP, this becomes : bussat [21] echo 'main(){printf("hello world\n";}' |gcc -E -v - Reading specs from /opt/gcc/lib/gcc-lib/hppa1.1-hp-hpux10.10/2.7.2.2/specs gcc version 2.7.2.2 /opt/gcc/lib/gcc-lib/hppa1.1-hp-hpux10.10/2.7.2.2/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=7 -Dhppa -Dhp9000s800 -D__hp9000s800 -Dhp9k8 -DPWB -Dhpux -Dunix -D_HPUX_SOURCE -D__hppa__ -D__hp9000s800__ -D__hp9000s800 -D__hp9k8__ -D__PWB__ -D__hpux__ -D__unix__ -D_HPUX_SOURCE -D__hppa -D__hp9000s800 -D__hp9k8 -D__PWB -D__hpux -D__unix -Asystem(unix) -Asystem(hpux) -Acpu(hppa) -Amachine(hppa) -D__hp9000s700 -D_PA_RISC1_1 - GNU CPP version 2.7.2.2 (hppa) #include "..." search starts here: #include <...> search starts here: /opt/gcc/include /opt/gcc/hppa1.1-hp-hpux10.10/include /opt/gcc/lib/gcc-lib/hppa1.1-hp-hpux10.10/2.7.2.2/include /usr/include End of search list. # 1 "" main(){printf("hello world ";} On Sun Solaris2.5 I found lappsun8{bussat}[1]: echo 'main(){printf("hello world\n";}' |gcc -E -v - Reading specs from /opt/FSFgcc/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/specs gcc version 2.7.2 /opt/FSFgcc/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=7 -Dsun -Dsparc -Dunix -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun__ -D__sparc__ -D__unix__ -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun -D__sparc -D__unix -Asystem(unix) -Asystem(svr4) -Acpu(sparc) -Amachine(sparc) - GNU CPP version 2.7.2 (sparc) #include "..." search starts here: #include <...> search starts here: /usr/local/include /opt/FSFgcc/sparc-sun-solaris2.5/include /opt/FSFgcc/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/include /usr/include End of search list. # 1 "" main(){printf("hello world ";} Finally, on Sun with SunOS4.1 the results are : lappsun1{bussat}[1]: echo 'main(){printf("hello world\n";}' |gcc -E -v - Reading specs from /usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3_U1/2.6.0/specs gcc version 2.6.0 /usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3_U1/2.6.0/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=6 -Dsparc -Dsun -Dunix -D__GCC_NEW_VARARGS__ -D__sparc__ -D__sun__ -D__unix__ -D__GCC_NEW_VARARGS__ -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(bsd) -Acpu(sparc) -Amachine(sparc) - GNU CPP version 2.6.0 (sparc) #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/local/sparc-sun-sunos4.1.3_U1/include /usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3_U1/2.6.0/include /usr/include End of search list. # 1 "" main(){printf("hello world ";} on a Linux box there is: mike@kermit:/home/mike > echo 'main(){printf("hello world\n";}' |gcc -E -v - Reading specs from /usr/lib/gcc-lib/i486-linux/2.7.2.1/specs gcc version 2.7.2.1 /usr/lib/gcc-lib/i486-linux/2.7.2.1/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386) -D__i486__ - GNU CPP version 2.7.2.1 (i386 Linux/ELF) #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/i486-linux/include /usr/lib/gcc-lib/i486-linux/2.7.2.1/include /usr/include End of search list. # 1 "" main(){printf("hello world\n";} on digital UNIX V3.2D-1 there is mkropfbe@edusrv(1)$ echo 'main(){printf("hello world\n";}' |gcc -E -v - Reading specs from /usr/local/lib/gcc-lib/alpha-dec-osf3.2/2.7.2/specs gcc version 2.7.2 /usr/local/lib/gcc-lib/alpha-dec-osf3.2/2.7.2/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=7 -Dunix -D__osf__ -D__alpha -D__alpha__ -D_LONGLONG -DSYSTYPE_BSD -D_SYSTYPE_BSD -D__unix__ -D__osf__ -D__alpha -D__alpha__ -D_LONGLONG -D__SYSTYPE_BSD__ -D_SYSTYPE_BSD -D__unix -D__SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha) -D__LANGUAGE_C__ -D__LANGUAGE_C -DLANGUAGE_C - GNU CPP version 2.7.2 #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/local/alpha-dec-osf3.2/include /usr/local/lib/gcc-lib/alpha-dec-osf3.2/2.7.2/include /usr/include End of search list. # 1 "" main(){printf("hello world\n";}