pragmas vs preprocessors

Henry Spencer henry at zoo.toronto.edu
Sat Jan 12 05:07:05 AEST 1991


In article <1991Jan10.153117.29024 at fs7.ece.cmu.edu> nydick at psc.edu (Dan Nydick) writes:
>I have an application where I'd like to have a macro expand into
>a #pragma...

Can't be done.  The wording of the standard could use a bit of cleanup,
but 3.8.3 refers you to 3.8.3.4 for rescanning of both kinds of macros,
and 3.8.3.4 is quite explicit:  "The resulting completely macro-replaced
preprocessing token sequence is not processed as a preprocessing directive
even if it resembles one."

>... Or even, how
>could one write a conditional expression so the pragma
>only appears if certain symbols are defined (plain ifdefs
>around the pragma are not good enough since some non-ansi
>compilers will complain about #pragma even inside a "false"
>condition)?

Try indenting the #pragma; most pre-ANSI compilers will not "see" a
directive unless the `#' is the first character on the line:

	#ifdef foobar
	   #pragma pre-ANSI compilers probably will not see this
	#endif

>Is a #pragma supposed to be significant to the
>compiler or to the pre-processor?

Yes. :-)  The standard does not require the separation between compiler
and preprocessor; indeed, there are many implementations which integrate
the preprocessor into the compiler's scanner.
-- 
If the Space Shuttle was the answer,   | Henry Spencer at U of Toronto Zoology
what was the question?                 |  henry at zoo.toronto.edu   utzoo!henry



More information about the Comp.std.c mailing list