有没有办法在预处理条件中使用sizeof?

时间:2013-06-20 15:19:18

标签: c sizeof preprocessor-directive

我目前正在更新一些代码,但我遇到了一个代码,假设time_t变量的大小与signed long相同。这段代码适用于我们以前的平台(显然在Coldfire上是真的),但我们正在转向一个新的平台。

现在我知道我们不应该对time_t变量的大小做出假设,因为那是not well defined.但我真的不想重写所有的目前基于此假设工作的代码行。

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

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

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

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

1 个答案:

答案 0 :(得分:3)

如果您遇到编译时故障,那么就这样做

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

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

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