根据C11标准(7.27.2.5),time.h
中指定了一个函数timespec_get
,我试过几个编译器,包括clang和几个版本的gcc,它们应该支持C11,但这个函数总是缺失,宏TIME_UTC
也缺失。
下面是一个测试文件mytime.c
:
#include <time.h>
#include <stdio.h>
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,操作系统为10.11.6。
2条答案
按热度按时间avwztpqn1#
Mac OS X标准库不符合任何现代版本的C或POSIX,它停留在C99和POSIX 2001,即使在这些方面也存在一致性问题。
drnojrws2#
MacOS 10.15支持
timespec_get
。这是从/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/time.h
:当包含
time.h
时,您需要使用C11或C++17或更新版本进行构建。我还没有做任何时间或其他调查是否
gettimeofday
或timespec_get
是更好的为这个目的在Mac10.15上,只有timespec_get
成为可用的。