我的工作與源基地,以不清楚,我對指針類型定義規則:使用_ PTR _宏而不是*。所以,所有的函數原型和typedefs看起來像:_PTR_背後的理由是什麼?
extern FILE_PTR _io_fopen(const char _PTR_, const char _PTR_);
我不知道可能是什麼原因背後,因爲對我來說這似乎過分。
編輯
順便說一句,雙間接,我發現:
_io_strtod(char _PTR_, char _PTR_ _PTR_);
我的工作與源基地,以不清楚,我對指針類型定義規則:使用_ PTR _宏而不是*。所以,所有的函數原型和typedefs看起來像:_PTR_背後的理由是什麼?
extern FILE_PTR _io_fopen(const char _PTR_, const char _PTR_);
我不知道可能是什麼原因背後,因爲對我來說這似乎過分。
編輯
順便說一句,雙間接,我發現:
_io_strtod(char _PTR_, char _PTR_ _PTR_);
這是可能的定義是與DOS的兼容性。
#ifdef DOS
#define _PTR_ far *
#else
#define _PTR_ *
#endif
的far
/near
關鍵字允許指針來解決內存內/當前段外,允許程序解決內存超過64個昆明植物研究所,同時仍保持的16位指針的好處了更快的代碼/使用更少的內存。
從定義中排除*
更爲典型。例如,在libpng的,你可以看到的定義,如:
typedef png_color FAR * png_colorp;
typedef png_color FAR * FAR * png_colorpp;
在大多數平臺上,FAR
將#defined
不了了之。
儘管DOS早已過去,但一些現代嵌入式架構也存在類似的問題。對於哈佛架構處理器來說,程序和數據存儲器的指針必須使用不同的指令來訪問,因此它們有不同的類型。其他處理器具有不同的「數據模型」,並且在2^24,2^16或2^8以下看到指針的特殊指針類型並不少見。
嗯,也許,但我可以看到的是它是#define _PTR_ *和部分與平臺相關的特定代碼(代碼不適用於在DOS下構建,實際上這是在RTOS內部)。所以,他們可能希望將代碼保存到遠處(ha = ha)未來...... – pmod
@pmod:許多嵌入式體系結構都具有不同類型的指針,就像DOS一樣,所以可以解釋它。 –
我不認爲這個答案是有道理的。如果你想讓所有指針遠離DOS,你可以使用大型/大型內存模型。如果你只希望SOME指針遠,那麼調用宏_PTR_'沒有意義... –
這是一個好習慣輕鬆(對於足夠小的定義容易)乘法和間接
int _PTR_ arr = malloc(42 * sizeof _PTR_ arr);
問得好區分。我真的很好奇,看看有沒有人對這個問題有很好的回答。你是否也看到'__PTR__ __PTR__'雙重間接? :S –
大聲笑...也許程序員提出了這個問題,它有視覺問題,難以識別典型源文件中所有其他符號中的小星號。 – pmg
@Michael Mior哈哈 - 有:) – pmod