Geoff Chappell - Software Analyst
SKETCH OF HOW RESEARCH MIGHT CONTINUE AND RESULTS BE PRESENTED - PREVIEW ONLY
Macros can be defined and undefined through various mechanisms. The full generality is available through the preprocessor directives #define and #undef in source text (i.e., in a source file or header file). An important special case is supported from the command line, through the /D and /U options.
A handful of macros are defined internally by the compiler and thereafter treated as reserved, so that they cannot be redefined or undefined. These built-in macros conform to the definition discussed here but some behave specially when expanded. Microsoft documents some of these built-in macros as predefined.
For clarity, it is perhaps as well to mention now that other macros said by Microsoft to be predefined are not built-in but are instead defined through /D options generated by CL.EXE either by default, as with /D_MSC_VER=1300, or in response to other options, as with /J implying /D_CHAR_UNSIGNED. To the actual compiler (C1XX.DLL), a macro definition produced internally by CL.EXE is indistinguishable from the same macro definition given explicitly on the CL.EXE command line and passed through to the compiler. These predefined macros therefore receive no significance in these notes. For a list of the known predefined macros, see /u, which is supposed to undefine them all before C1XX can ever see them.
The defining elements of a macro are its name, argument list and body.
The name must be valid as an identifier. The only identifier that cannot name a macro is defined.
The argument list is a set of identifiers that serve as formal parameters for the macro. It is not necessary that a macro have an argument list. It is permitted that the argument list be empty, which is distinct from the argument list being omitted.
TO BE DONE