【发布时间】:2011-05-21 12:49:37
【问题描述】:
#if sizeof(int) != 4
/* do something */
在#if 中使用 sizeof 不起作用,而在 #define 中使用它,为什么?
#define size(x) sizeof(x)/sizeof(x[0]) /*works*/
【问题讨论】:
-
为此使用
(u)intptr_t之类的东西。 -
sizeof(int)在预处理器中变成0(0),我相信。 -
无论如何,使用预处理器对
int的大小进行代码测试肯定会非常错误。如果需要 32 位整数,请使用int32_t。如果您需要一个可以保存至少 32 位值的整数类型,请使用int_least32_t或long。在任何情况下您都不需要测试sizeof(int);sizeof(int)的唯一合法用途是确定要分配的内存量(例如,将其传递给calloc)。 -
我会在
sizeof(x)/sizeof(x[0])周围加上括号。 -
你可能想要的是
assert(sizeof(int) == 4)
标签: c c-preprocessor