【问题标题】:Can we change the size of size_t in C?我们可以改变 C 中 size_t 的大小吗?
【发布时间】:2010-12-14 01:56:58
【问题描述】:

我们可以在 C 中更改 size_t 的大小吗?

【问题讨论】:

  • 这是针对“与其他程序员玩的恶作剧”问题之一的设置吗?

标签: c size-t


【解决方案1】:

没有。但是你为什么还要这样做呢?

【讨论】:

  • 我想定位 size_t 宏在哪里,看看它是如何实现的
  • @tsubasa:那么这完全是一个不同的问题。
  • 可能是 typedef 而不是宏。
  • size_t 是 typedef-name,而不是宏。
【解决方案2】:

size_t 不是宏。它是一个typedef 用于合适的无符号整数类型。

size_t<stddef.h>(和其他标头)中定义。

可能是typedef unsigned long long size_t;,您真的甚至不应该考虑更改它。 标准库按照标准库的定义使用它。如果你改变它,因为你不能改变标准库,你会得到各种各样的错误,因为你的程序size_t 使用与标准库不同的大小。你不能再打电话给malloc()strncpy()snprintf(),...

【讨论】:

  • 可能是unsigned intunsigned longunsigned long long,具体取决于编译器支持的最大对象大小。
【解决方案3】:

如果你想 fork Linux 或 NetBSD,那么“是”

虽然您可以重新定义宏,但这可能是 typedef。

如果您要定义一个环境,那么指定size_t 是完全合理的。然后,您将负责符合代码的所有 C99 标准函数 size_t

所以,这取决于你的情况。如果您正在为现有平台开发应用程序,那么答案是

但如果您使用一个或多个编译器定义原始环境,那么答案是是的,但您的工作已经完成。您将需要使用size_t 的 API 元素实现所有库例程,可以使用新的size_t typedef 与其余代码一起编译。所以,如果你 fork NetBSD 或 Linux,也许是为了一个嵌入式系统,那就去吧。否则,你很可能会觉得“不值得”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2012-05-18
    • 2011-04-08
    • 2022-11-12
    相关资源
    最近更新 更多