我最近阅读了对 Lua 联合创始人 Luiz H. de Figueredo 和 Roberto Ierusalimschy 的采访,他们讨论了 Lua 的设计和实现。至少可以说非常有趣。然而,讨论的一部分让我想到了一些事情。Roberto 将 Lua 称为“独立应用程序”(也就是说,它是纯粹的 ANSI C,不使用操作系统中的任何内容。)他说,Lua 的核心是完全可移植的,并且由于它的纯洁性,它可以被大量移植更容易,甚至从未考虑过的平台(例如机器人和嵌入式设备)。
现在这让我想知道。C 通常是一种非常可移植的语言。那么,C 的哪些部分(即标准库中的部分)是最不可移植的?哪些可以在大多数平台上运行?是否应该只使用一组有限的数据类型(例如避免short
和可能float
)?FILE
和stdio
系统呢?malloc
和free
?Lua 似乎避免了所有这些。这是把事情推向极端吗?还是它们是可移植性问题的根源?除此之外,还可以做哪些其他事情来使代码具有极强的可移植性?
我问所有这些的原因是因为我目前正在用纯 C89 编写一个应用程序,并且它尽可能便携是最佳选择。我愿意在实现它时采取中间道路(足够便携,但没有那么多我必须从头开始编写所有内容。)无论如何,我只是想看看一般来说什么是编写最好的 C 代码的关键。
最后一点,所有这些讨论都只与 C89 相关。