|
|
1.1 root 1:
2:
3: # Preprocessing Operator #
4:
5:
6:
7:
8: String-ize operator
9:
10:
11: The preprocessing operator # can be used within the replacement
12: list of a function-like macro. It and its operand are replaced
13: by a string literal, which names the sequence of preprocessing
14: tokens that replaces the operand throughout the macro.
15:
16: For example, the consider the macro:
17:
18:
19: #define display(x) show((long)(x), #x)
20:
21:
22: When the preprocessor reads the following line
23:
24:
25: display(abs(-5));
26:
27:
28: it replaces it with the following:
29:
30:
31: show((long)(abs(-5)), "abs(-5)");
32:
33:
34: Here, the preprocessor replaced #x with a string literal that
35: gives the sequence of token that replaces x.
36:
37: The following rules apply to interpreting the # operator:
38:
39: 11. If a sequence of white-space characters occurs within the
40: preprocessing tokens that replace the argument, it is replaced
41: with one space character.
42:
43: 22. All white-space characters that occur before the first
44: preprocessing token and after the last preprocessing token are
45: deleted.
46:
47: 33. The original spelling of the preprocessing tokens is
48: preserved. This means that you must take care to preserve
49: certain characters: a backslash `\' should be inserted before
50: every quotation mark `"' that marks a string literal, and
51: before every backslash that introduces a character constant.
52:
53: ***** Example *****
54:
55: The following uses the operator # to display the result of
56: several mathematics routines.
57:
58:
59:
60:
61:
62:
63:
64: COHERENT Lexicon Page 1
65:
66:
67:
68:
69: # Preprocessing Operator #
70:
71:
72:
73: #include <errno.h>
74: #include <math.h>
75: #include <stdio.h>
76:
77:
78:
79: void show(value, name)
80: double value, char *name;
81: {
82: if (errno)
83: perror(name);
84: else
85: printf("%10g %s\n", value, name);
86: errno = 0;
87: }
88:
89:
90:
91: #define display(x) show((double)(x), #x)
92:
93:
94:
95: main()
96: {
97: extern char *gets();
98: double x;
99: char string[64];
100:
101:
102:
103: for(;;) {
104: printf("Enter a number: ");
105: fflush(stdout);
106: if(gets(string) == NULL)
107: break;
108:
109:
110:
111: x = atof(string);
112: display(x);
113: display(cos(x));
114: display(sin(x));
115: display(tan(x));
116: display(acos(cos(x)));
117: }
118: }
119:
120:
121: ***** See Also *****
122:
123: ##, #define, C preprocessor
124:
125:
126:
127:
128:
129:
130: COHERENT Lexicon Page 2
131:
132:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.