[英]__PTRDIFF_TYPE__ vs. ptrdiff_t
ptrdiff_t
不是宏,它是由stddef.h
定義的typedef名稱。 它在C標准中指定為兩個指針之間的差異類型。
__PTRDIFF_TYPE__
是GCC的stddef.h
的實現細節。 除非您正在編寫C運行時庫,否則不應使用它。
存在的原因是不允許C編譯器無條件地定義ptrdiff_t
。 如果包含stddef.h
,該名稱僅獲取其標准指定的含義; 它可以用於其他應用程序。 (請注意,與C ++,C中的標准庫頭不允許 [表現為-如果他們]包括彼此。) __PTRDIFF_TYPE__
,在另一方面,是出了名,編譯器允許無條件地限定,因為它開始有兩個下划線。 因此__PTRDIFF_TYPE__
是無條件預定義的, stddef.h
在適當時使用它來定義ptrdiff_t
。
而stddef.h
的原因是通過這個間接,而不是裸露
typedef long int ptrdiff_t; /* or whatever */
是因為定義可能需要根據編譯模式而變化。 例如,在x86-64 / Linux上, ptrdiff_t
在默認模式下為long int
,在-m32
模式下為int
。 編譯器必須知道哪個整數類型用於兩個指針的差異,因此它也可以公開該信息,而不是使stddef.h
重復所有相同的邏輯。
(您引用的GCC文檔非常清楚,只要您閱讀整個段落:
這些宏被定義為[一堆標准指定的typedef名稱]的正確底層類型。 它們的存在使標准頭文件
stddef.h
,stdint.h
和wchar.h
正常工作。 你不應該直接使用這些宏; 相反,包括適當的標頭並使用typedef。
強調我的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.