测试 x_np pthread 函数的可用性 - C/C++

Test Availability of x_np pthread Functions - C/C++

我正在编写一个基于 pthread API 的 C 线程辅助库。有许多非标准 GNU 扩展的 pthread 函数,例如 pthread_set_affinity_nppthread_clear_exit_nppthread_set_qos_class_self_np

有没有什么方法可以使用宏来测试这些不可移植的功能是否可用,而无需查找哪些操作系统定义了什么?

这正是人们使用 Autoconf 解决的问题。例如,在您的 configure.ac 文件中有这样一个 sinppet:

AC_CHECK_DECLS(
  [pthread_attr_setaffinity_np, pthread_clear_exit_np, pthread_set_qos_class_self_np],
  [], [], [[#include <pthread.h>]])

将定义宏 HAVE_DECL_PTHREAD_ATTR_SETAFFINITY_NPHAVE_DECL_PTHREAD_CLEAR_EXIT_NPHAVE_DECL_PTHREAD_SET_QOS_CLASS_SELF_NP,如果声明不存在则定义为 0,如果声明存在则定义为 1