我正在基于pthread API为C语言编写一个帮助程序库。有许多pthread函数是非标准GNU扩展,例如pthread_set_affinity_np
,pthread_clear_exit_np
,pthread_set_qos_class_self_np
等。
有没有办法可以使用宏来测试这些非便携式功能是否可用,而无需查找哪些操作系统定义了什么?
答案 0 :(得分:1)
这正是人们使用Autoconf解决的问题。例如,configure.ac
文件中有这样的错误:
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_NP
,HAVE_DECL_PTHREAD_CLEAR_EXIT_NP
和HAVE_DECL_PTHREAD_SET_QOS_CLASS_SELF_NP
,定义为0
,如果声明不存在,则定义为1
。