File:  [MW Coherent from dump] / coherent / a / usr / man / ALL / _23
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Wed May 29 04:56:34 2019 UTC (7 years ago) by root
Branches: MarkWilliams, MAIN
CVS tags: relic, HEAD
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



unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.