我们可以使用sizeof
运算符在#if
宏?如果是,怎么办?如果没有,为什么?
是否sizeof
预处理器中的操作员工作#if
指令?
No; the sizeof()
运算符在 C 预处理器条件指令中不起作用,例如#if
and #elif
.
原因是 C 预处理器不知道类型的大小。
您可以使用sizeof()
在一个身体里#define
当然,这是因为编译器处理替换文本的分析,而预处理器则不处理。例如,经典宏给出数组中元素的数量;它有不同的名称,但是是:
#define DIM(x) (sizeof(x)/sizeof(*(x)))
这可以与:
static const char *list[] =
{
"...", ...
};
size_t size_list = DIM(list);
你不能做的是:
#if sizeof(long) > sizeof(int) // Invalid, non-working code
...
#endif
(问题是条件被评估为#if 0(0) > 0(0)
在所有可能的情况下,括号都会使表达式无效,即使在预处理器算术的自由规则下也是如此。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)