Home > Net >  How to check the state of #pragma STDC?
How to check the state of #pragma STDC?

Time:12-30

Consider this code:

/* t0.c */
#pragma STDC FENV_ACCESS ON
#include "t0.h"

Then in t0.h how to check the state of STDC FENV_ACCESS?

/* t0.h */
/* how to check the state of STDC FENV_ACCESS? */
/* something like: #if STDC FENV_ACCESS == ON */

If not possible, then:

  1. Why not possible?
  2. Will it be useful to add this feature to the C standard?

CodePudding user response:

(1) Why not possible?

It is possible with a custom cpp as rryker's answer mentioned. Otherwise, I would have said "no" because the compiler uses the pragmas and that comes after the cpp pass/stage.

(2) Will it be useful to add this feature to the C standard?

No, probably not. For the above mentioned reason.

And, because, drawing a leaf from what is already common (e.g. autoconf), we can reverse the problem to get the desired results without changing existing compilers.

Define (e.g.) a features.h:

#ifdef STDC_FENV_ACCESS_ON
#if STDC_FENV_ACCESS_ON
#pragma STDC FENV_ACCESS ON
#else
#pragma STDC FENV_ACCESS OFF
#endif
#endif

CodePudding user response:

In addition to the other answers, and if t0.c is actually under your control, you may define appropriate macros whenever a #pragma is used.

/* t0.c */
#pragma STDC FENV_ACCESS ON
#define PRAG_FENV_ACCESS_ON
#include "t0.h"

This works independently of toolchain vendor. It's a variation of the same theme used to check the presence of typedefs in the preprocessor.

  • Related