【发布时间】:2010-12-14 01:56:58
【问题描述】:
我们可以在 C 中更改 size_t 的大小吗?
【问题讨论】:
-
这是针对“与其他程序员玩的恶作剧”问题之一的设置吗?
我们可以在 C 中更改 size_t 的大小吗?
【问题讨论】:
没有。但是你为什么还要这样做呢?
【讨论】:
size_t 是 typedef-name,而不是宏。
size_t 不是宏。它是一个typedef 用于合适的无符号整数类型。
size_t 在<stddef.h>(和其他标头)中定义。
可能是typedef unsigned long long size_t;,您真的甚至不应该考虑更改它。 标准库按照标准库的定义使用它。如果你改变它,因为你不能改变标准库,你会得到各种各样的错误,因为你的程序size_t 使用与标准库不同的大小。你不能再打电话给malloc(),strncpy(),snprintf(),...
【讨论】:
unsigned int、unsigned long 或unsigned long long,具体取决于编译器支持的最大对象大小。
虽然您可以重新定义宏,但这可能是 typedef。
如果您要定义一个环境,那么指定size_t 是完全合理的。然后,您将负责符合代码的所有 C99 标准函数 size_t。
所以,这取决于你的情况。如果您正在为现有平台开发应用程序,那么答案是否。
但如果您使用一个或多个编译器定义原始环境,那么答案是是的,但您的工作已经完成。您将需要使用size_t 的 API 元素实现所有库例程,可以使用新的size_t typedef 与其余代码一起编译。所以,如果你 fork NetBSD 或 Linux,也许是为了一个嵌入式系统,那就去吧。否则,你很可能会觉得“不值得”。
【讨论】: