当我试图编译这个SSCCE代码时(在Ubuntu 16.04内核4.15上)
// defines and include needed according to openat manpage at man7.org
#define _POSIX_C_SOURCE 200809L
#define _ATFILE_SOURCE
#include <sys/types.h> // additional include according to die.net , but not man7.org
#include <sys/stat.h> // additional include according to die.net , but not man7.org
#include <fcntl.h>
int main() {
openat(3, "foobar", O_NOATIME, 0);
}
我明白
error: âO_NOATIMEâ undeclared
我不是真的在找人告诉我:“它在文件里
<xxx.h>
,包括它”。我可以发现它恰好在我的系统中。
我正在编写的代码不仅我必须在这个系统上编译,我很高兴,而且会由其他人或其他系统编译。我必须根据一些信誉良好的来源(如man7或die.net,但他们的文档对我不起作用)中的文档编写所有代码。这样做的原因是“似是而非的否认”——如果他们不能编译,我不能只说“它对我有用”——那将是站不住脚的;我需要能够说“它在某个神圣的来源中说它应该起作用”,“我检查过了”。