Where Are C11 Optional Feature Macros?

Where Are C11 Optional Feature Macros?

In the C11 standard is written that compilers should provide some macros to test for optional feature presence. In what headers do I find them?

For example where is located __STDC_NO_VLA__?

With GCC, i.e., if I try to find __STDC_NO_COMPLEX__ into complex.h I don't find it there...

1

2 Answers

They are not defined in any header, a compiler will define them itself.

You can dump all of the preprocessor defines. For example for gcc write:

gcc -dM -E - < /dev/null

For example for me:

bob@bob-fedora:~/trunk/software$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

bob@bob-fedora:~/trunk/software$ gcc -std=gnu11 -dM -E - < /dev/null | grep STDC
#define __STDC_HOSTED__ 1
#define __STDC_UTF_16__ 1
#define __STDC_VERSION__ 201112L
#define __GNUC_STDC_INLINE__ 1
#define __STDC_UTF_32__ 1
#define __STDC__ 1

In the example you gave, __STDC_NO_VLA__ the presence of this means that the compiler does not supported variable length arrays. You could write:

#ifdef __STDC_NO_VLA__
#error Your compiler does not support VLAs! Please use a supported compiler.
#endif

Or

#ifndef __STDC_NO_VLA__
// code using variable length arrays
#else
// fallback code for when they are not supported
#endif
2

if STDC_NO_COMPLEX is defined, it indicates that there is is no complex.h

STDC_NO_COMPLEX is defined by the compiler, not by header file

source:

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Elena Rostova
Author

Elena Rostova

Elena Rostova holds a Master's degree in Public Health Journalism. She covers groundbreaking medical research, holistic wellness trends, mental health awareness, and nutritional science.