天天看點

c語言中.h檔案中的宏定義,endian.h這個頭檔案裡面的宏可以直接用麼?

該樓層疑似違規已被系統折疊 隐藏此樓檢視此樓

endian.h頭檔案中以宏的形式定義了大端位元組序、小端位元組序和混合位元組序

#define __LITTLE_ENDIAN 1234

#define __BIG_ENDIAN   4321

#define __PDP_ENDIAN   3412

并且宏__BYTE_ORDER确定了當下機器所采用的位元組序,根據描述,這個宏定義在頭檔案bits/endian.h中

#include 

但是在glibc源碼中,bits/endian.h檔案中,__BYTE_ORDER并沒有提及。

對__BYTE_ORDER的定義是在類似./glibc-version/sysdeps/[...]/bits/endian.h的檔案中的。

貌似是針對不同的平台情況分别進行定義。比如在./sysdeps/hppa/bits/endian.h中:

#define __BYTE_ORDER  __BIG_ENDIAN

可是,在我的紅帽系統中,一系列的sysdeps目錄沒了,取而代之的是bits/endian.h中的定義:

#define __BYTE_ORDER  __LITTLE_ENDIAN

這裡有兩個不明白的地方:

1、源碼中無内容的bits/endian,為什麼在具體系統裡面就有了具體内容?是通過定制,然後人工修改的麼?

2、endian.h中的__BYTE_ORDER、__BIG_ENDIAN之類的宏我們可以自由使用麼?雖然說用到的機會并不多。

盡管這個頭檔案是公開的,但是總感覺這東西好像隻有編譯器才能用的樣子……

而且在中講到了位元組序的内容,但并沒有提及endian.h頭檔案。