我与这个答案的印象相同,size_t
标准总是保证它足够大以容纳给定系统的最大可能类型。
但是,此代码无法在 gcc/Mingw 上编译:
#include <stdint.h>
#include <stddef.h>
typedef uint8_t array_t [SIZE_MAX];
错误:数组“array_t”的大小太大
我在这里的标准中有什么误解吗?对于给定的实现是否size_t
允许太大?或者这是Mingw中的另一个错误?
编辑:进一步的研究表明
typedef uint8_t array_t [SIZE_MAX/2]; // does compile
typedef uint8_t array_t [SIZE_MAX/2+1]; // does not compile
这恰好与
#include <limits.h>
typedef uint8_t array_t [LLONG_MAX]; // does compile
typedef uint8_t array_t [LLONG_MAX+(size_t)1]; // does not compile
所以我现在倾向于认为这是 Mingw 中的一个错误,因为基于有符号整数类型设置最大允许大小没有任何意义。