|
|
coherent
# 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:
11. If a sequence of white-space characters occurs within the
preprocessing tokens that replace the argument, it is replaced
with one space character.
22. All white-space characters that occur before the first
preprocessing token and after the last preprocessing token are
deleted.
33. 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.
COHERENT Lexicon Page 1
# Preprocessing Operator #
#include <errno.h>
#include <math.h>
#include <stdio.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
COHERENT Lexicon Page 2
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.