clockid_t 宏的数值是多少?
What are the numerical values for clockid_t macros?
我想传入 clockid_t 宏作为编译时参数 (gcc -D CLOCK=CLOCK_REALTIME file.c
),以在我的代码中定义宏 CLOCK。如何找出它们各自的整数值以便我可以这样做?
我需要的 4 个 clockid_t 是手册页中列出的那些:https://linux.die.net/man/3/clock_gettime
系统为Linux。
查看 <time.h>
以获得实际值。
但是请注意,系统定义的时钟 ID 的值可能因平台而异。例如,CLOCK_MONOTONIC
在 Linux 上是 1
,但在 FreeBSD 上是 4
。
因此,您最好定义自己的宏值,然后使用 <time.h>
中的常量将它们映射到代码中适当的时钟 ID,这些常量基于您编译的平台对于.
#include <time.h>
clockid_t GetDefinedClock()
{
#if CLOCK == 1
return CLOCK_REALTIME;
#elif CLOCK == 2
return CLOCK_MONOTONIC;
#elif CLOCK == 3
return CLOCK_PROCESS_CPUTIME_ID;
#elif CLOCK == 4
return CLOCK_THREAD_CPUTIME_ID;
#else
#error "NO CLOCK DEFINED!"
return 0;
#endif
}
clockid_t clock = GetDefinedClock();
// use clock as needed...
您什么都不用做! -DCLOCK=CLOCK_REALTIME
,或者其他什么,在命令行上就可以了。
这是因为宏的主体是宏展开的在宏展开之后,而不是在定义宏时。因此,只要在 CLOCK
使用 之前包含 time.h
, 就会扩展 CLOCK
,然后扩展 CLOCK_REALTIME
也是。
我想传入 clockid_t 宏作为编译时参数 (gcc -D CLOCK=CLOCK_REALTIME file.c
),以在我的代码中定义宏 CLOCK。如何找出它们各自的整数值以便我可以这样做?
我需要的 4 个 clockid_t 是手册页中列出的那些:https://linux.die.net/man/3/clock_gettime
系统为Linux。
查看 <time.h>
以获得实际值。
但是请注意,系统定义的时钟 ID 的值可能因平台而异。例如,CLOCK_MONOTONIC
在 Linux 上是 1
,但在 FreeBSD 上是 4
。
因此,您最好定义自己的宏值,然后使用 <time.h>
中的常量将它们映射到代码中适当的时钟 ID,这些常量基于您编译的平台对于.
#include <time.h>
clockid_t GetDefinedClock()
{
#if CLOCK == 1
return CLOCK_REALTIME;
#elif CLOCK == 2
return CLOCK_MONOTONIC;
#elif CLOCK == 3
return CLOCK_PROCESS_CPUTIME_ID;
#elif CLOCK == 4
return CLOCK_THREAD_CPUTIME_ID;
#else
#error "NO CLOCK DEFINED!"
return 0;
#endif
}
clockid_t clock = GetDefinedClock();
// use clock as needed...
您什么都不用做! -DCLOCK=CLOCK_REALTIME
,或者其他什么,在命令行上就可以了。
这是因为宏的主体是宏展开的在宏展开之后,而不是在定义宏时。因此,只要在 CLOCK
使用 之前包含 time.h
, 就会扩展 CLOCK
,然后扩展 CLOCK_REALTIME
也是。