有两个库zconf.h
and unistd.h
至少习惯于得到pid
的过程。我通常在 Mac OSX 和 Ubuntu 18.04 上测试我的代码,他们使用zconf.h
最好(编译器提供zconf.h
替代unistd.h
)如果我忘记添加,那么如果代码有效,那就没问题。然而,在前一天,我需要在另一台机器上测试代码,AFAIR 它有 Ubuntu 10 或 12。它的编译器抱怨没有zconf.h
。我想知道是否有办法检查机器是否有zconf.h
,如果没有,则使用unistd.h
。可以使用像这样的预处理器来完成吗?
#ifdef ITS_IF_CONDITION
#include <zconf.h>
#else
#include <unistd.h>
较新版本的 GCC、clang 和 MSVC 编译器实现了__has_include https://en.cppreference.com/w/cpp/experimental/feature_test特征。尽管它是 C++ 17 的功能,但我相信这三个功能也都以纯 C 形式支持它。
但传统的(可能更便携)方法是在构建过程之前检查配置脚本中是否存在包含文件。两个都autoconf https://www.gnu.org/software/autoconf/manual/autoconf-2.64/html_node/Header-Files.html and cmake https://cmake.org/cmake/help/v3.0/module/CheckIncludeFile.html有办法实现这一点。
#ifdef __has_include
#if __has_include(<zconf.h>)
#include <zconf.h>
#else
#include <unistd.h>
#endif
#else
#include <unistd.h>
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)