|
|
1.1 ! root 1: ! 2: ! 3: C preprocessor Overview C preprocessor ! 4: ! 5: ! 6: ! 7: ! 8: Preprocessing encompasses all tasks that logically precede the ! 9: translation of a program. The preprocessor processes headers, ! 10: expands macros, and conditionally includes or excludes source ! 11: code. ! 12: ! 13: ***** Directives ***** ! 14: ! 15: The C preprocessor recognizes the following directives: ! 16: ! 17: ! 18: #iiff Include code if a condition is true ! 19: #eelliiff Include code if directive is true ! 20: #eellssee Include code if preceding directives fail ! 21: #eennddiiff End of code to be included conditionally ! 22: ! 23: ! 24: ! 25: #iiffddeeff Include code if a given macro is defined ! 26: #iiffnnddeeff Include code if a given macro is not defined ! 27: ! 28: ! 29: ! 30: #ddeeffiinnee Define a macro ! 31: #uunnddeeff Undefine a macro ! 32: #iinncclluuddee Read another file and include it ! 33: #lliinnee Reset current line number ! 34: ! 35: ! 36: A preprocessing directive is always introduced by the `#' charac- ! 37: ter. The `#' must be the first non-white space character on a ! 38: line, but it may be preceded by white space and it may be ! 39: separated from the directive name that follows it by one or more ! 40: white space characters. ! 41: ! 42: ***** Preprocessing Operators ***** ! 43: ! 44: The Standard defines two operators that are recognized by the ! 45: preprocessor: the ``stringize'' operator #, and the ``token- ! 46: paste'' operator ##. ! 47: ! 48: The operator # indicates that the following argument is to be ! 49: replaced by a string literal; this literal names the preproces- ! 50: sing token that replaces the argument. For example, consider the ! 51: macro: ! 52: ! 53: ! 54: #define display(x) show((long)(x), #x) ! 55: ! 56: ! 57: When the preprocessor reads the line ! 58: ! 59: ! 60: ! 61: ! 62: ! 63: ! 64: COHERENT Lexicon Page 1 ! 65: ! 66: ! 67: ! 68: ! 69: C preprocessor Overview C preprocessor ! 70: ! 71: ! 72: ! 73: display(abs(-5)); ! 74: ! 75: ! 76: it replaces it with the following: ! 77: ! 78: ! 79: show((long)(abs(-5)), "abs(-5)"); ! 80: ! 81: ! 82: The ## operator performs ``token pasting'' -- that is, it joins ! 83: two tokens together, to create a single token. For example, con- ! 84: sider the macro: ! 85: ! 86: ! 87: #define printvar(x) printf("%d\n", variable ## x) ! 88: ! 89: ! 90: When the preprocessor reads the line ! 91: ! 92: ! 93: printvar(3); ! 94: ! 95: ! 96: it translates it into: ! 97: ! 98: ! 99: printf("%d\n", variable3); ! 100: ! 101: ! 102: In the past, token pasting had been performed by inserting a ! 103: comment between the tokens to be pasted. This no longer works. ! 104: ! 105: ***** Predefined Macros ***** ! 106: ! 107: The ANSI Standard describes the following macros that must be ! 108: recognized by the preprocessor: ! 109: ! 110: ! 111: _ _DDAATTEE_ _Date of translation ! 112: _ _FFIILLEE_ _Source-file name ! 113: _ _LLIINNEE_ _Current line within source file ! 114: _ _SSTTDDCC_ _Conforming translator and level ! 115: _ _TTIIMMEE_ _Time of translation ! 116: ! 117: ! 118: For more information on any one of these macros, see its entry. ! 119: ! 120: ***** Conditional Inclusion ***** ! 121: ! 122: The preprocessor will conditionally include lines of code within ! 123: a program. The directives that include code conditionally are ! 124: defined in such a way that you can construct a chain of inclusion ! 125: directives to include exactly the material you want. ! 126: ! 127: ! 128: ! 129: ! 130: COHERENT Lexicon Page 2 ! 131: ! 132: ! 133: ! 134: ! 135: C preprocessor Overview C preprocessor ! 136: ! 137: ! 138: ! 139: ***** Macro Definition and Replacement ***** ! 140: ! 141: The preprocessor performs simple types of macro replacement. To ! 142: define a macro, use the preprocessor directive #ddeeffiinnee _i_d_e_n_t_i_f_i_e_r ! 143: _v_a_l_u_e. The preprocessor scans the translation unit for ! 144: preprocessor tokens that match identifier; when one is found, the ! 145: preprocessor substitutes value for it. ! 146: ! 147: ***** cpp ***** ! 148: ! 149: Under COHERENT, C preprocessing is done by the program cpp. The ! 150: cc command runs cpp as the first step in compiling a C program. ! 151: cpp can also be run by itself. ! 152: ! 153: cpp reads each input file; it processes directives, and writes ! 154: its product on ssttddoouutt. ! 155: ! 156: If the -E option is not used, cpp also writes into its output ! 157: statements of the form #lliinnee _n _f_i_l_e_n_a_m_e, so that the parser cc0 ! 158: can connect its error messages and debugger output with the ! 159: original line numbers in your source files. ! 160: ! 161: See the Lexicon entry on cpp for more information. ! 162: ! 163: ***** See Also ***** ! 164: ! 165: C language, cc, cpp ! 166: ! 167: ! 168: ! 169: ! 170: ! 171: ! 172: ! 173: ! 174: ! 175: ! 176: ! 177: ! 178: ! 179: ! 180: ! 181: ! 182: ! 183: ! 184: ! 185: ! 186: ! 187: ! 188: ! 189: ! 190: ! 191: ! 192: ! 193: ! 194: ! 195: ! 196: COHERENT Lexicon Page 3 ! 197: ! 198:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.