__STDC_VERSION__
에대한 표준 Macro를 정의하였습니다.
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L /* C95 compatible source code. */ #endif
//
로 시작하는 주석을 사용할 수 있습니다.
__STDC_VERSION__
가 199901L로 정의되면 C99 지원이 가능함을 나타냅니다.
#if __STDC_VERSION__ >= 199901L /* C99 supported */ #else /* C99 not supported */ #endif
#define cbrt(X) \ _Generic((X), \ long double: cbrtl, \ default: cbrt, \ float: cbrtf) \ (X)
struct T { int tag; union { float x; int n; }; };
기능 | 기능 감지용 매크로 | C99에 정의됨 |
분석 기능 (Annex L) | __STDC_ANALYZABLE__ | 정의되지 않음 |
메모리 경계 검출 (Annex K) | __STDC_LIB_EXT1__ | 정의되지 않음 |
멀티스레드 (<threads.h>) | __STDC_NO_THREADS__ | 정의되지 않음 |
아토믹 기능 및 형식 (<stdatomic.h> 및 _Atomic 형 지정자) | __STDC_NO_ATOMICS__ | 정의되지 않음 |
IEC 60559 부동소수점 산술 연산자 (Annex F) | __STDC_IEC_559__ | 일부 지원 |
IEC 60559 복소수 산술 연산자 (Annex G) | __STDC_IEC_559_COMPLEX__ | 일부 지원 |
복소수 형 (<complex.h>) | __STDC_NO_COMPLEX__ | 필수 사항 |
가변 길이 배열 | __STDC_NO_VLA__ | 필수 사항 |
__STDC_VERSION__
가 201112L로 정의되면 C11 지원이 가능함을 나타냅니다.
#if __STDC_VERSION__ >= 201112L // C11 지원 #elif __STDC_VERSION__ >= 199901L // C99 지원 #else /* C11, C99 지원하지 않음 */ #endif