作者:碎蜂CYM夜一 | 来源:互联网 | 2022-12-06 16:29
根据C11标准(7.27.2.5),有一个timespec_get
指定的功能time.h
.我已经尝试了几个编译器,包括clang和几个版本的gcc,它们应该支持C11,但是这个函数总是缺失.宏TIME_UTC
也缺失了.
这是一个测试文件mytime.c
:
#include
#include
int main() {
printf("C version: %ld\n", __STDC_VERSION__);
fflush(stdout);
struct timespec ts;
timespec_get(&ts, TIME_UTC);
}
和使用Clang的输出:
$ cc --version
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ cc -std=c11 mytime.c
mytime.c:9:3: warning: implicit declaration of function 'timespec_get' is invalid in C99
[-Wimplicit-function-declaration]
timespec_get(&ts, TIME_UTC);
^
mytime.c:9:21: error: use of undeclared identifier 'TIME_UTC'
timespec_get(&ts, TIME_UTC);
^
1 warning and 1 error generated.
timespec_get
为了确保我使用的是C11,我注释掉了这条线,我就是.
对于gcc版本4.8,5和6,我得到的结果基本相同.
我使用的是Mac,OS 10.11.6.
1> R....:
Mac OS X标准库不符合任何现代版本的C或POSIX.它停留在C99和POSIX 2001并且即使对于那些也存在一致性问题.
@ lockcmpxchg8b:我认为这是一个误导,并且在编译器问题(MSVC是垃圾邮件)中混淆了*library*问题(这个问题与此有关).编译器方面,基本上每个现代相关平台都支持C99和C11(GCC和clang/llvm支持几乎所有东西)和现代MSVC甚至*有点*旨在支持现代标准(它们声称现代C++;现代C不太可靠) .