如何在<;中启用clock_gettime()的声明;时间;在CYGWIN中编译-std=c90时?

如何在<;中启用clock_gettime()的声明;时间;在CYGWIN中编译-std=c90时?,c,time,cygwin,posix,C,Time,Cygwin,Posix,在我的CYGWIN安装中的中,如果已定义(\u POSIX\u TIMERS),则在检查#下定义了clock\u gettime()。现在,我的文件中仅在以下条件下定义了\u POSIX\u定时器: 如果定义了\uuu rtems\uuuu,或 如果满足以下条件- #如果!已定义(uuu STRICT_uuansi_uuuu)|已定义(uu cplusplus)| uuuu STDC_uuuu版本uuu>=199901L 很明显,我的情况不能满足条件2 是否有一种(好的)方法可以设置\uu rt

在我的CYGWIN安装中的
中,如果已定义(\u POSIX\u TIMERS),则在检查
#下定义了
clock\u gettime()
。现在,我的
文件中仅在以下条件下定义了\u POSIX\u定时器

  • 如果定义了
    \uuu rtems\uuuu
    ,或
  • 如果满足以下条件-
    #如果!已定义(uuu STRICT_uuansi_uuuu)|已定义(uu cplusplus)| uuuu STDC_uuuu版本uuu>=199901L
  • 很明显,我的情况不能满足条件2


    是否有一种(好的)方法可以设置
    \uu rtems\uuu
    或任何其他方法可以确保在我的情况下启用\u POSIX\u计时器(即-std=c90-pedantic)?

    您需要删除c90声明,因为之后定义了clock\u gettime


    其他任何东西都可能失败。

    使用古老的C90标准而不是C99或C11有什么具体原因吗?更新的标准将通过
    \uu STDC\u VERSION\uu
    满足第二个条件,以最大限度地提高可移植性。除非您有一个需要C90的特定遗留平台,否则我认为从可移植性的角度来看,不使用C99会适得其反。与C90相比,C99是一个大大改进的标准,它具有一些简单但重要的特性,可以提高可移植性,例如固定宽度整数类型,对于处理通信协议或嵌入式系统的任何人都非常有用。很明显,Cygwin希望您使用C99,因此解决这一问题可能会对您不利<代码>\uuuu任何东西\uuuuu
    都是为C实现保留的,它会刺痛你的领地。永远不要弄乱系统标题!OP应该使用标准C,如果不可能,则使用C99。@Olaf I指的是gcc调用。不建议触摸系统标题文件不清楚您的意思。1) 标题不应包括定义(内联功能除外)2)修改标题所需的任何修改。3) 标准严格禁止更改标准宏(定义为
    #define
    d,未声明)。Olaf在gcc调用中不使用“-std=c90”。这既不是声明,也不是定义,而是告诉编译器使用特定版本标准的编译器选项。由于gcc默认在不同的gc版本中使用不同版本的C标准(4.x使用C90,因为5.x是C11),所以最好告诉它。所以,如果你想说“编译为C11或C99”,为什么不直接写呢?(OP清楚地说明了如何仍然编译为C90)。