【问题标题】:Storage size of timespec isn't knowntimespec 的存储大小未知
【发布时间】:2017-07-24 16:10:01
【问题描述】:

我已经看到this 解决方案,但我遇到了同样的错误。对于一个类,我们不得不切换到 c99 编译器而不是 gnu,但现在 timespec 似乎被破坏了。除了“timespec 的存储大小未知”之外,我还收到了一堆其他错误,例如“CLOCK_MONOTONIC 未声明”、“取消引用指向不完整类型 'struct timespec' 的指针”和未使用的变量警告,但我认为这些会消失一旦我解决了编译器问题。

我不认为我声明 timespec 变量的方式有什么问题,

struct timespec startTime;

【问题讨论】:

  • “我们不得不切换到 c99 编译器而不是 gnu”——这绝对不是一个正当的理由。 gcc 支持 C99 和 C11,只需了解 -std= 选项即可。另一个问题,为什么你要学习一个 6 年前被取消的 C 版本,现在只有标准 C11。写你的问题:阅读How to Ask 并提供minimal reproducible example。现在看起来,您似乎访问了您不应该使用的struct 的内部。这意味着您的代码被设计破坏了。
  • 在我们的新任务详情中,他专门告诉我们使用标志-std=c99。对不起,我是想把它放在描述中。我没有选择使用它,我们必须这样做。您还可以详细说明尝试访问结构的内部吗?
  • 在您的问题中,您暗示您不使用 gcc,因为它不符合 c99。但是根据您的评论,您确实使用 gcc(与您在问题中的陈述相矛盾),只是使用我推荐的选项。在编程之前,您应该首先了解发生了什么。你应该仔细阅读我之前的评论并尝试理解。这不是喂勺服务!
  • @Olaf "gnu" 是一个 gcc 标志,-std=gnu99。
  • @Olaf 是的 OP 使用了一些草率的术语,但信息很明确,无需完全迂腐模式。扩展的重点。 struct timespec 就是其中之一。

标签: c linux gnu c99 timespec


【解决方案1】:

C dialect 标志设置为 ISO C99 的 GNU 方言:

-std=gnu99

【讨论】:

    【解决方案2】:

    由于这种“时钟”支持不是 C99 而是 POSIX,因此默认不启用。

    要启用它,您需要将选项 -D_POSIX_C_SOURCE=199309L 传递给编译器或放置一个

    #define _POSIX_C_SOURCE 199309L
    

    在相关源文件的开头。

    See also man clock_gettime for reference.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      相关资源
      最近更新 更多