gpt4 book ai didi

c - C 的哪些部分最便携?

转载 作者:太空狗 更新时间:2023-10-29 16:33:19 25 4
gpt4 key购买 nike

我最近阅读了对 Luiz H. de Figueredo 和 Roberto Ierusalimschy 的采访,他们在采访中讨论了 Lua 的设计和实现。至少可以说这很有趣。但是,讨论的一部分让我想起了一些事情。 Roberto 将 Lua 称为“独立应用程序”(也就是说,它是纯 ANSI C,不使用操作系统中的任何内容。)他说,Lua 的核心是完全可移植的,并且由于其 < em>purity 已经能够更轻松地移植到甚至从未考虑过的平台(例如机器人和嵌入式设备)。

现在这让我想知道。 C 通常是一种非常便携的语言。那么,C 的哪些部分(即标准库中的部分)最不可移植?哪些是可以预期在大多数平台上运行的?是否应该只使用一组有限的数据类型(例如,避免 shortfloat)? FILEstdio 系统呢? mallocfree? Lua 似乎避免了所有这些。这是把事情推向了极端吗?或者它们是可移植性问题的根源?除此之外,还可以做哪些其他事情来使代码具有极强的可移植性?

我问所有这些的原因是因为我目前正在用纯 C89 编写应用程序,并且它尽可能可移植是最佳选择。我愿意在实现它时采取中间道路(足够便携,但没有那么多以至于我必须从头开始编写所有内容。)无论如何,我只是想看看通常什么是编写最佳 C 代码的关键。

最后一点,所有这些讨论都只与 C89 有关。

最佳答案

就 Lua 而言,我们对 C 语言本身没有什么可提示的,但我们发现 C 标准库包含许多看似无害且易于使用的函数,直到您认为它们确实如此不检查他们输入的有效性(如果不方便也可以)。 C 标准规定处理错误输入是未定义的行为,允许这些函数为所欲为,甚至使宿主程序崩溃。例如,考虑 strftime。一些 libc 会简单地忽略无效的格式说明符,但其他 libc(例如,在 Windows 中)会崩溃!现在,strftime 不是关键函数。为什么崩溃而不是做一些明智的事情?因此,Lua 必须在调用 strftime 之前对输入进行自己的验证,并将 strftime 导出到 Lua 程序成为一件苦差事。因此,我们试图通过以独立为核心来避免 Lua 核心中的这些问题。但是 Lua 标准库无法做到这一点,因为它们的目标是将设施导出到 Lua 程序,包括 C 标准库中可用的设施。

关于c - C 的哪些部分最便携?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com