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也是。