代码何时依赖于平台?
When is code platform-dependent?
我了解某些算法和内联汇编可能是平台相关的。例如,如果您编写一个编译器,编译器的源代码是否会依赖于平台?如果我编译您的编译器,我必须使用与我的体系结构对应的相同版本的源代码吗?
如果您做的任何事情都是理所当然的,那么语言可能会发生变化,这将取决于平台;包括但不限于:
- 假设一个特定的字符集(我们不时都假设为 ascii)
- 假设浮动的工作方式或其结构的细节。
- 编写假定某些字节序的代码(除了 hton 和 ntos,如果正确实施则可以正常工作)
- 添加内联汇编以利用某些处理器功能(sse/mmx 等)
- 取决于一些不是可移植的 vanilla C 库的外部库
编辑:
我忘记的最大的一个是假设整数类型的大小,char
、short
、int
、long
、long long
- 这些类型按大小,但几乎不能保证;最常见的拱门在长是什么等方面有所不同...因此 c99 引入了 int8_t
int16_t
... 等类型。
我了解某些算法和内联汇编可能是平台相关的。例如,如果您编写一个编译器,编译器的源代码是否会依赖于平台?如果我编译您的编译器,我必须使用与我的体系结构对应的相同版本的源代码吗?
如果您做的任何事情都是理所当然的,那么语言可能会发生变化,这将取决于平台;包括但不限于:
- 假设一个特定的字符集(我们不时都假设为 ascii)
- 假设浮动的工作方式或其结构的细节。
- 编写假定某些字节序的代码(除了 hton 和 ntos,如果正确实施则可以正常工作)
- 添加内联汇编以利用某些处理器功能(sse/mmx 等)
- 取决于一些不是可移植的 vanilla C 库的外部库
编辑:
我忘记的最大的一个是假设整数类型的大小,char
、short
、int
、long
、long long
- 这些类型按大小,但几乎不能保证;最常见的拱门在长是什么等方面有所不同...因此 c99 引入了 int8_t
int16_t
... 等类型。