COHERENT manpages
This page displays the COHERENT manpage for # [String-ize operator].
List of available manpages
Index
# -- Preprocessing Operator String-ize operator The preprocessing operator # can be used within the replacement list of a function-like macro. It and its operand are replaced by a string literal, which names the sequence of preprocessing tokens that replaces the operand throughout the macro. For example, the consider the macro: #define display(x) show((long)(x), #x) When the preprocessor reads the following line display(abs(-5)); it replaces it with the following: show((long)(abs(-5)), "abs(-5)"); Here, the preprocessor replaced #x with a string literal that gives the sequence of token that replaces x. The following rules apply to interpreting the # operator: 1. If a sequence of white-space characters occurs within the preprocessing tokens that replace the argument, it is replaced with one space character. 2. All white-space characters that occur before the first preprocessing token and after the last preprocessing token are deleted. 3. The original spelling of the preprocessing tokens is preserved. This means that you must take care to preserve certain characters: a backslash `\' should be inserted before every quotation mark `"' that marks a string literal, and before every backslash that introduces a character constant. Example The following uses the operator # to display the result of several mathematics routines. #include <errno.h> #include <math.h> #include <stdio.h> #include <stdlib.h> void show(value, name) double value, char *name; { if (errno) perror(name); else printf("%10g %s\n", value, name); errno = 0; } #define display(x) show((double)(x), #x) main() { extern char *gets(); double x; char string[64]; for(;;) { printf("Enter a number: "); fflush(stdout); if(gets(string) == NULL) break; x = atof(string); display(x); display(cos(x)); display(sin(x)); display(tan(x)); display(acos(cos(x))); } } See Also ## #define, C preprocessor ANSI Standard, §6.8.3.2