2015-02-24 65 views

回答

2

這取決於你的「與衆不同」的定義,因爲我覺得至少在三個層次區別的:

  • 接口差異
  • 高級代碼差異
  • 機代碼差異

C標準提出了一個接口,並且該接口應該在整個板上受到尊重。這意味着對於任何帶有C標準庫的操作系統,操作系統都應該向您的程序展示一個名爲printf的插座,並且如果您的程序插入其中,則可以期望它的行爲與文檔相同。這意味着,對於你所關心的全部,printf是一樣的。

這並不意味着printf必須是每個標準庫中相同的一段代碼。如果有人告訴我寫一個printf函數,並告訴你編寫一個printf函數,我們可以採用不同的方法,只要我們都尊重記錄的行爲,那也可以。事實上,出於版權原因,您可以確定Windows的代碼printf與Linux的代碼printf不同。

最後,即使使用相同的源代碼,printf必須有所不同才能適應平臺差異。例如,您不能指望x86 printf在ARM上工作。正如您所指出的,由於平臺約定和系統調用差異,您不能指望Linux在Windows上工作。

因此,printf插座背後的機器代碼將有所不同,但標準的重點是使其工作相同。

+0

所以在現實中,我們有不同的代碼在Windows和Linux中的printf()函數? – 2015-02-24 15:44:23

+0

是的他們的實現是不同的。 – 2015-02-24 15:55:53

1

如果你「在不同的操作系統printf行爲不同」的意思,那麼答案是:

  • 外部(從功能觀點的用戶)沒有,它的語義是標準化的。這意味着對這樣一個函數的一個特定的調用會導致相同的結果,不管操作系統是什麼。
  • 內部可能,其實現是免費的。這意味着,這樣一個函數真正能夠產生結果的計算可能是不同的。