有两个库zconf.h
和unistd.h
,它们至少用于获取流程的pid
。我通常会在Mac OSX和Ubuntu 18.04上测试我的代码,如果我忘了添加代码,则最好使用zconf.h
(编译器提供zconf.h
代替unistd.h
),如果我忘记添加代码,那么如果代码有效,没关系。但是,在前一天,我需要在另一台装有Ubuntu 10或12的计算机上测试代码。其编译器抱怨没有zconf.h
。我想知道是否有一种方法可以检查机器是否有zconf.h
,如果没有,请使用unistd.h
。可以使用像这样的预处理器吗?
#ifdef ITS_IF_CONDITION
#include <zconf.h>
#else
#include <unistd.h>
答案 0 :(得分:4)
较新版本的GCC,clang和MSVC编译器实现了__has_include功能。尽管它是C ++ 17的功能,但我相信所有这三个功能也都在纯C语言中支持。
但是传统的(可能是更可移植的)方法是在构建过程之前检查配置脚本中包含文件的存在。 autoconf和cmake都有实现此目标的方法。
#ifdef __has_include
#if __has_include(<zconf.h>)
#include <zconf.h>
#else
#include <unistd.h>
#endif
#else
#include <unistd.h>
#endif