没有; 该sizeof()运营商并不在C预处理条件指令工作,如#if和#elif.
原因是C预处理器不知道类型的大小.
当然,您可以sizeof()在#define'd宏的主体中使用,因为编译器处理替换文本的分析而预处理器不处理.例如,经典宏给出了数组中元素的数量; 它有各种各样的名字,但是:
#define DIM(x) (sizeof(x)/sizeof(*(x)))
Run Code Online (Sandbox Code Playgroud)
这可以用于:
static const char *list[] =
{
"...", ...
};
size_t size_list = DIM(list);
Run Code Online (Sandbox Code Playgroud)
你不能做的是:
#if sizeof(long) > sizeof(int) // Invalid, non-working code
...
#endif
Run Code Online (Sandbox Code Playgroud)
(问题是#if 0(0) > 0(0)在所有合理的情况下评估条件,并且括号使表达式无效,即使在预处理器算术的自由规则下也是如此.)
甲的sizeof()操作者不能在使用#if和#elif指令线,因为预处理器不分析类型的名称.
但#define中的表达式不由预处理器评估; 因此在#define案例中它是合法的.
#include <stdio.h>
#include <limits.h>
//#if sizeof(int) == 4
#if UINT_MAX == 0xffffffffU
typedef int int32;
#endif
//#if sizeof(long) > sizeof(int)
#if ULONG_MAX > UINT_MAX
typedef long int64;
#elif ULLONG_MAX > ULONG_MAX
typedef long long int64;
#endif
int main(void) {
int64 i64;
int32 i32;
printf("%u, %u\n", (unsigned)sizeof(i64), (unsigned)sizeof(i32));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6945 次 |
| 最近记录: |