Единственное, что должно работать из коробки - это протестировать версию gcc и надеяться, что это последовательно делается на всех архитектурах.
Это не гарантируется, хотя у меня недавно была похожая проблема не со встроенными функциями, а с __thread
для локального хранилища потоков. Это реализовано на некоторых архитектурах (linux), но не на других (OS X, bsd?), И не было способа выяснить это с помощью макроса.
Если у вас есть gnu make, вы можете сделать что-то подобное, чтобы обнаружить существование определенной функции в вашем Makefile:
__THREAD := $(shell echo '__thread int i;' | ${CC} ${CFLAGS} -xc -c -o /dev/null - 2> /dev/null || echo "NO")
ifeq (${__THREAD},NO)
${warning thread local storage (TLS) with '__thread' is not supported, switching to pthread_getkey}
CFLAGS += -D__GNUC_NO_TLS__
endif
Это позволяет избежать использования более сложных конфигурационных утилит.