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

标签 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 将占用的字节数,以便它可以用于预处理条件?

最佳答案

如果你在编译时失败,那么就做这样的事情

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

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

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

关于c - 有没有办法在预处理条件中使用 sizeof ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217531/

相关文章:

c - 将文件列表合并到另一个文件列表中

C++ - 最佳实践#define 只写一次的值?

c - 与 malloc/free 相比,使用 C99 VLA 是个好主意吗?

C 编程 - 平均

c++ - 从 Visual C++ 中的 unordered_map 继承时,模板参数的 sizeof() 不正确

c - C 中函数类型的大小

c - 取消引用空指针在 sizeof 操作中是否有效

c# - Visual Studio 忽略 #if DEBUG/RELEASE 范围内的代码,并且不检查错误或自动完成

c - 确定 byte 和 vec3_t 是否类型定义

c - while循环中的两个条件是什么?