Проверка на поддержку необязательного функционала станадартов си
В Википедии про стандарт сказано:
Новая ревизия стандарта позволяет реализациям не поддерживать определённые части стандарта, включая те, которые раньше надо было поддерживать обязательно (в C99). Программы могут использовать предопределённые макросы для определения того, поддерживает ли реализация часть стандарта или нет.
И перечислены макросы:
| Возможность | Макрос | Доступность в C99 |
|---|---|---|
| Анализирование (Annex L) | __STDC_ANALYZABLE__ |
Недоступно |
| Действия с дробными числами по стандарту IEC 60559 (Annex F) | __STDC_IEC_559__ |
Выборочно |
| Арифметика комплексных чисел, совместимая со стандартом IEC 60559 (Annex G) | __STDC_IEC_559_COMPLEX__ |
Выборочно |
| Интерфейсы проверки границ массива (Annex K) | __STDC_LIB_EXT1__ |
Недоступно |
Типы комплексных чисел (<complex.h>) |
__STDC_NO_COMPLEX__ |
Обязательно |
Многопоточное программирование (<threads.h>) |
__STDC_NO_THREADS__ |
Недоступно |
Атомарные операции (<stdatomic.h> и квалификатор типа _Atomic) |
__STDC_NO_ATOMICS__ |
Недоступно |
| Массивы переменной длины | __STDC_NO_VLA__ |
Обязательно |
И мне теперь стало неясно, Если данный функционал доступен, макрос должен определяться? Или если недоступно то он определяется?