在C中,检查功能宏是否有效的正确方法是什么?
例如,如果configure.ac
包含宏AC_USE_SYSTEM_EXTENSIONS
,则它将在任何操作系统上定义_GNU_SOURCE
。但是,如果我们在OSX上编译,则_GNU_SOURCE
将不会产生任何影响。但是在GNU系统上它确实如此,那么如何检查_GNU_SOURCE是否启用了一个功能,例如qsort_r
?
man feature_test_macros
说我不应该包含features.h
,因为它可能在每个系统上都有所不同,这意味着我无法使用__USE_GNU
。
另一种选择是检查是否定义了__GNUC__
,或者是否定义了__GNUC__
和_GNU_SOURCE
?