何时代码与平台相关?

问题描述:

我知道一些算法和行内汇编可以取决于平台。例如,如果你编写了一个编译器,编译器的源代码是否会依赖于平台,并且如果我编译了你的编译器,我必须使用与我的体系结构相对应的相同版本的源代码?何时代码与平台相关?

+1

实际上,您已经将两个问题嵌套在一起,而每个问题都过于宽泛。我确定的问题:1)如何知道我写的代码是否便携。 2)如何编写一个跨平台的编译器。 –

+2

请原谅此评论。只要你的代码做出了不受平台无关标准支持的假设,你就是依赖于平台*。无论这是针对*特定的*平台还是平台的子集,都没有真正的相关性。有很多方法可以进入这个池,坦白地说太多了,但我相信你会看到的一些答案会展示其中的一些。像POSIX这样的标准存在,相信我,取决于你所编码的体系结构,它们可以从微不足道变成非常难以遵守的标准。 – WhozCraig

如果你做任何事情需要理所当然的东西,可以改变语言;包括但不限于:

  • 取特定的字符集(我们都假设ASCII不时)
  • 假设浮如何工作,或者其结构的细节。
  • 编写代码,它假定一些字节序(从hton asside,正确地实现时,其正常工作NTOS)
  • 加入联汇编,以利用某些处理器特征的(SSE/MMX等)
  • 根据一些外部库不是便携式香草C库

编辑:那我忘了是假设整型的大小,charshortintlonglong long最大 一个 - 这些类型由有序大小,但几乎没有保证;而最常见的拱门在长度等方面有所不同......所以c99引入了int8_tint16_t ...等类型。

+3

使用硬件外设,寄存器,中断,时序假设,存储器映射... –