计算 SIZE_MAX 元素的长数组的大小

问题描述 投票:0回答:2

考虑以下代码:

#include <stdio.h>
#include <limits.h>
#include <inttypes.h>
#include <stddef.h>

int main(){
    size_t cnt = ULONG_MAX;
    size_t sz = sizeof(long[cnt]);
    printf("%zu\n", sz);
}

6.5.3.4/p2

如果操作数的类型是变长数组类型,则 操作数被评估;否则,不计算操作数并且 结果是一个整数常量。

问题是这么大的

sizeof
评估是否定义良好?由于
size_t
unsigned
,因此标准保证
unsigned
整数溢出具有明确定义的行为(与可能引发实现定义信号的
signed
不同)。

c sizeof
2个回答
1
投票

size_t
是必须足够大才能容纳实现中最大可能对象的大小的类型。所以它的定义很明确。


1
投票

问题是这么大的评估规模是否能够很好地定义?

是的,定义明确。它在运行时对可变长度数组执行

sizeof(element)*number_of_elements
计算。结果再大也没关系。

Barmar 正确地提到:

虽然它可能定义良好,但可能没有用。

© www.soinside.com 2019 - 2024. All rights reserved.