我想知道爲什麼在某些源代碼中有像FAR和PASCAL這樣的宏。他們是什麼意思? 謝謝什麼是FAR PASCAL?
回答
PASCAL:它與calling convention有關。參數按照從左到右的順序(與cdecl相反)推入堆棧,被調用者負責在返回之前平衡堆棧。
此調用約定在以下16位API中很常見:OS/2 1.x和Microsoft Windows 3.x. Borland Delphi 1.x是否使用它有一些爭議
FAR:在分段體系結構計算機中,far pointer是一個包含段選擇器的指針,可以指向當前段之外的地址。
爲了完整,FAR和PASCAL是prepreocessor宏,編爲16位系統時,擴大到了需要聲明調用約定和指針大小的關鍵字。在32位系統上,它們通常擴展到無(除非你有一個奇怪的默認調用約定)。這些宏被保留用於向後兼容{hat/tip:Comment from Adrian McCarthy}
我很確定默認的Delphi調用約定一直是* register *。它只使用* pascal *函數從Windows API和其他DLL。 – 2010-05-05 14:49:47
爲了完整性,'FAR'和'PASCAL'是預先宏,當爲16位系統編譯時,擴展爲聲明調用約定和指針大小所需的關鍵字。在32位系統上,它們通常擴展到無(除非你有一個奇怪的默認調用約定)。爲了向後兼容,這些宏被保留。 – 2010-05-05 17:17:12
FAR
是從16位時代,當我們有近(16位)和遠(32位)指針保持。
PASCAL
是一個調用約定。我相信現在相當於stdcall
。
通過內存怎麼回事,
FAR是回落到16位的天,當堆內存中被分割。 NEAR數據的大小和速度都有限,FAR允許更大但更昂貴。
據我所知,在32位的土地上,它是一個崩潰到無爲的宏。
PASCAL是一個調用約定,在16位時間內也大量使用。它已被替換爲stdcall。
兩者都保留爲了向後兼容。
這可能是16位時代剩下的一些冗餘/過時的編碼。
在16位應用程序中使用FAR來指示地址需要超過16位。 PASCAL(altion)是一種轉換類型,它可以讓編譯器知道如何安排堆棧(使用PASCAL調用約定),以便編譯器可以將適當的參數傳遞給函數以及從函數傳遞函數。
HTH
這是一個古老的調用約定...
FAR從時繼承時,處理器寄存器,其中太小,無法容納一個跳轉目標的完整地址。所以,處理器有兩種類型的跳轉,取決於目標來自當前程序計數器的「遠」程度。
PASCAL描述堆棧中的參數順序,它告訴函數使用Pascal編程語言描述的順序,這與C語言不同(非常老版本的操作系統,如使用Pascal開發的MacOS和Windows) 。
FAR已過時;它在16位代碼中用來表示可以指向整個地址空間的指針,而不是指向當前段的16位偏移量。
PASCAL是一個調用約定。作爲Wikipedia這樣描述的:
的參數在堆棧上在左到右的順序(CDECL相反)推動,並且被叫方是負責返回之前平衡堆棧。
此調用約定在以下16位API中很常見:OS/2 1.x,Microsoft Windows 3.x和Borland Delphi 1.x.
Mark,我是C++的新手,並被要求將一些舊的C/C++代碼轉換爲C++ 11。數據類型'短FAR *'被大量採用,並且不會在VS2013中解決 - 我應該替換它們嗎?如果是這樣的話? – MoonKnight 2014-07-03 09:08:43
@Killercam你應該能夠在你找到它們的地方放下'FAR'和'NEAR'。雖然我很驚訝他們還沒有被Microsoft標頭定義爲空宏,但它們是向後兼容的王者。 – 2014-07-03 12:15:20
具體PASCAL說的論據中從左到右的順序傳遞的功能,這樣可以減少代碼的大小(因爲調用者知道堆有多大,因此可以清理)
C stdcall將參數從右向左傳遞,這意味着您可以擁有可變數量的參數,但需要更多代碼才能清除。
- 1. 更換FAR通過什麼和PASCAL通過__stdcall
- 2. Pascal中的^ I是什麼?
- 3. 什麼是const TAB =^I pascal?
- 4. 是什麼Pascal語法意味着
- 5. JMP FAR
- 6. cocos2d,near-far
- 7. PInvoke signiture BSTR FAR *
- 8. 這個Pascal語法有什麼問題?
- 9. 什麼是pascal三角形算法的時間複雜度
- 10. 「更改DATA_ROOT指向PASCAL圖像」的含義是什麼
- 11. 什麼是等效於pascal IO追加(F)的TFileStream?
- 12. 什麼是Free Pascal相當於Delphi的TStopWatch?
- 13. Free Pascal中的文字數組的語法是什麼?
- 14. pascal語法錯誤;預期但是。發現了什麼?
- 15. 什麼是首選的Pascal文件擴展名?
- 16. 爲什麼Pascal常量數組實際上不是常量?
- 17. pascal中使用的套件的實現是什麼?
- 18. Sublime Text 2 Lines too far Right
- 19. flot multibar chart - bars too far away
- 20. jQuery's .Closest(Top/Far-Most?)對面
- 21. While loop is too too far
- 22. Colourbox loading too far down頁面
- 23. 「@far int * @near IntegerPointer;」的含義
- 24. Pascal功能是循環的
- 25. Pascal Max_Heapify
- 26. 在Pascal文件中組織程序的標準做法是什麼?
- 27. 什麼是WinTypes,WinProcs和SW_NORMAL?
- 28. Pascal error with array
- 29. Nexus DB報表設計器中使用了什麼Object Pascal?
- 30. 爲什麼我的雙向鏈表不起作用? (Pascal)
他們調用時間機器,然後一個30歲的比爾蓋茨彈出並要求他回到640k。 – 2010-09-20 03:35:57