2017-08-01 69 views
-1

我知道一些算法和行內彙編可以取決於平臺。例如,如果你編寫了一個編譯器,編譯器的源代碼是否會依賴於平臺,並且如果我編譯了你的編譯器,我必須使用與我的體系結構相對應的相同版本的源代碼?何時代碼與平臺相關?

+1

實際上,您已經將兩個問題嵌套在一起,而每個問題都過於寬泛。我確定的問題:1)如何知道我寫的代碼是否便攜。 2)如何編寫一個跨平臺的編譯器。 –

+2

請原諒此評論。只要你的代碼做出了不受平臺無關標準支持的假設,你就是依賴於平臺*。無論這是針對*特定的*平臺還是平臺的子集,都沒有真正的相關性。有很多方法可以進入這個池,坦白地說太多了,但我相信你會看到的一些答案會展示其中的一些。像POSIX這樣的標準存在,相信我,取決於你所編碼的體系結構,它們可以從微不足道變成非常難以遵守的標準。 – WhozCraig

回答

4

如果你做任何事情需要理所當然的東西,可以改變語言;包括但不限於:

  • 取特定的字符集(我們都假設ASCII不時)
  • 假設浮如何工作,或者其結構的細節。
  • 編寫代碼,它假定一些字節序(從hton asside,正確地實現時,其正常工作NTOS)
  • 加入聯彙編,以利用某些處理器特徵的(SSE/MMX等)
  • 根據一些外部庫不是便攜式香草C庫

編輯:那我忘了是假設整型的大小,charshortintlonglong long最大 一個 - 這些類型由有序大小,但幾乎沒有保證;而最常見的拱門在長度等方面有所不同......所以c99引入了int8_tint16_t ...等類型。

+3

使用硬件外設,寄存器,中斷,時序假設,存儲器映射... –