【问题标题】:What are the numerical values for clockid_t macros?clockid_t 宏的数值是多少?
【发布时间】:2021-12-03 06:23:26
【问题描述】:

我想传入 clockid_t 宏作为编译时参数 (gcc -D CLOCK=CLOCK_REALTIME file.c ),以在我的代码中定义宏 CLOCK。如何找出它们各自的整数值以便我可以做到这一点?

我需要的 4 个clockid_t 是手册页上列出的那些:https://linux.die.net/man/3/clock_gettime

系统是Linux。

【问题讨论】:

  • 你可以编写一个小程序来学习它们:printf("CLOCK_REALTIME = %d\n", CLOCK_REALTIME);
  • 感谢 Steve,我应该想到这一点 - 尽管 Remy 指出宏的值可能会因平台而异。
  • 您确实意识到-D 不必采用整数,对吧?

标签: c linux gcc


【解决方案1】:

您无需做任何事情! -DCLOCK=CLOCK_REALTIME 或其他任何东西,在命令行上都可以正常工作。

这是因为宏的主体是在宏展开后宏展开,而不是在定义宏时。因此,只要在CLOCK使用之前包含time.hCLOCK 就会被扩展,然后CLOCK_REALTIME 也会被扩展。

【讨论】:

    【解决方案2】:

    查看<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...
    

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2015-06-28
      • 2011-01-24
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多