time.h和linux/time.h之间的声明冲突阻止我使用CLOCK_TAI
我想用time.h和linux/time.h之间的声明冲突阻止我使用CLOCK_TAI,c,linux,time,time.h,C,Linux,Time,Time.h,我想用 #include <time.h> clock_gettime(CLOCK_TAI, &...); 它起作用了,但与itimerspecredclaration存在另一个冲突,它在两个标题中都是无条件声明的,并且没有任何include-guard的定义。所以我决定禁止隐式时间。h包括: #include <linux/time.h> #ifndef _TIME_H #define _TIME_H #endif 好的,但是这也删除了重要的基本声明
#include <time.h>
clock_gettime(CLOCK_TAI, &...);
它起作用了,但与itimerspec
redclaration存在另一个冲突,它在两个标题中都是无条件声明的,并且没有任何include-guard的定义。所以我决定禁止隐式时间。h包括:
#include <linux/time.h>
#ifndef _TIME_H
#define _TIME_H
#endif
好的,但是这也删除了重要的基本声明,像size\t
这样的常见类型都是基于这些声明的。因此,我尝试朝相反的方向去禁用linux/types.h包含:
#ifndef _LINUX_TYPES_H
#define _LINUX_TYPES_H
#endif
#include <linux/time.h>
#ifndef _TIME_H
#define _TIME_H
#endif
\ifndef\u LINUX\u类型\u H
#定义LINUX类型
#恩迪夫
#包括
#如果没有时间
#定义时间
#恩迪夫
正如您所猜测的,它导致系统特定的类型丢失,如\uu kernel\u time\t
,这导致无法声明timespec
等等
因此我想知道:是否可以将linux/…头文件与stdlib.h和其他常用文件结合使用?是否有其他方法访问特定于系统的
CLOCK\u TAI
值?如果无法更新glibc,请自行定义它()(如果已定义(\uuuuu linux\uuuuuuuu)&&!已定义(CLOCK\u TAI)
)。我怀疑它的价值(11
)会改变。但也许其他人有更好的解决办法。@cremno我也认为CLOCK\u xxx
值是通用不变量-直到在Cygwin上认识到,例如,CLOCK\u REALTIME==1
和CLOCK\u MONOTONIC==4
,而通常(在*nix系统上)CLOCK\u REALTIME==0
,时钟单调==1
和时钟单调原始==4
。因此,对枚举值进行假设并不是一种可移植的方法。只是为了澄清一下,CLOCK_TAI
是没有在time.h中定义,还是有条件地在time.h中定义?如果是有条件的,并且失败了,你可以继续走这条路。@donjuedo这是个好主意,但不幸的是,它们都是在一个单独的\ifdef\uuu USE\u POSIX199309
块中定义的,那里只有代码0到9。如果不可能更新glibc,那么就自己定义它(\u35;如果定义了(\uu linux\uuuuu)&!定义了(CLOCK\u TAI)
)。我怀疑它的价值(11
)会改变。但也许其他人有更好的解决办法。@cremno我也认为CLOCK\u xxx
值是通用不变量-直到在Cygwin上认识到,例如,CLOCK\u REALTIME==1
和CLOCK\u MONOTONIC==4
,而通常(在*nix系统上)CLOCK\u REALTIME==0
,时钟单调==1
和时钟单调原始==4
。因此,对枚举值进行假设并不是一种可移植的方法。只是为了澄清一下,CLOCK_TAI
是没有在time.h中定义,还是有条件地在time.h中定义?如果是有条件的,并且失败了,你可以继续走这条路。@donjuedo好主意,但不幸的是,它们都是在一个\ifdef\uuuu USE\u POSIX199309
块中定义的,那里只有代码0到9。
#include <linux/time.h>
#ifndef _TIME_H
#define _TIME_H
#endif
#ifndef _BITS_TYPES_H
#define _BITS_TYPES_H
#endif
#ifndef _LINUX_TYPES_H
#define _LINUX_TYPES_H
#endif
#include <linux/time.h>
#ifndef _TIME_H
#define _TIME_H
#endif