This article is from the Apple II GNO FAQ, by Devin Reade with numerous contributions by others.
A#10.5: There are four general areas where certain "standard" macros are used ("standard" is quoted because only those explicitly annotated correspond to ISO/ANSI or other standards). Where the macros aren't predefined by current compilers, they should be defined in source, header, or makefiles when necessary: - Architecture: These macros tend to be lower case with double leading- or trailing-underscores, such as "__sun4__" or "__parisc__". No IIgs compilers currently predefine an architecture, but "__appleiigs__" is recommended for Apple IIgs specific code. - Operating System: These macros tend to be upper case and may or may not use underscores. Examples are "_AIX" and "SunOS". No IIgs compilers currently predefine an os macro, but "__GNO__" is recommended for GNO-specific code. - Compiler: These macros tend to be upper case and may or may not use underscores. Examples are "__LCC__" and "__GNUC__". ORCA/C predefines "__ORCAC__". APW/C predefines "APW". - Language and other standards: The "__STDC__" macro may be used for determining ISO/ANSI C compliance. It is the responsibility of the compiler to define (or not define) this macro appropriately. If "_POSIX_SOURCE" source is defined, the source may be written with the assumption that all symbols defined by POSIX Standard 1003.1 are available in the environment. This symbol is expected to be defined by the user as necessary. GNO isn't yet POSIX compliant, but it's getting there. If "_BSD_SOURCE" is defined, all symbols are expected to be 4.3BSD compliant. This implies "_POSIX_SOURCE". Again, GNO isn't there yet but it's progressing. "KERNEL" is defined when building the GNO kernel. You will see this macro in the GNO header files, but you should not define it. "__cplusplus" is predefined by C++ compilers, of which there are none for the IIgs. It is the responsibility of the compiler to define (or not define) this macro appropriately. Explanation of this macro was given since you occasionally see it in GNO header files ... Other macros are defined either by the compiler or in header files, but these are the main ones for user code conditional compilation. See the relevant documentation (compiler manual, ISO/ANSI or POSIX standards, GS/OS reference manual) for more details.
 
Continue to: