1

我目前正在更新一些代码,我遇到了一个地方,代码假设time_t变量的大小与signed long. 这段代码可以在我们之前的平台上运行(显然在 Coldfire 上确实如此),但我们正在转向一个新平台。

现在我知道我们不应该对time_t变量的大小做出假设,因为这没有很好的定义。但我现在真的不想重写所有基于这个假设工作的代码行。

理想情况下,我想做类似的事情:

#if sizeof(time_t) != sizeof(LONG)
#error size assertion failed
#endif

一次就可以了。我知道sizeof()不能在这样的条件预处理器中使用它,所以这是不可能的。

所以我想知道,有什么方法可以知道 atime_t将占用的字节数,以便可以在预处理条件中使用它?

4

1 回答 1

3

如果您在编译时失败之后,请执行以下操作

{
    char s1[+sizeof(time_t) - sizeof(LONG) + 1];
    char s2[-sizeof(time_t) + sizeof(LONG) + 1];
}

如果尺寸不同,它将无法构建。

您可以将其放入宏中,但错误会相当神秘。

于 2013-06-20T15:22:46.787 回答