2011-10-28 38 views
2

我發現下面的代碼來檢查字節順序狀態。它適用於VS C++:使用預處理器檢查字節順序

#if '1234' != 0x31323334 
# define BIG_ENDIAN 
#endif 

我不知道它是否可以與其他編譯器一起工作。我會問,如果它是一個標準的代碼?

+0

的可能重複的[C宏定義,以確定大端或小端機器?](http://stackoverflow.com/questions/2100331/c-macro-definition-to-determine-big-endian-or-little -ndian-machine) –

+0

寫這個宏的人很困惑。 1234'== 0x31323334'在大多數小端**和**大端實現中都是如此。 (對於大多數C實現,它們只是編寫相同編號的不同方式,而字節順序根本不包括在內。) –

回答

2

具有多個字符的字符常量(例如'1234')具有實現定義的值。關於'1234'的值與系統的字節順序之間的關係絕對不能保證。

預處理器只是沒有足夠的信息來確定目標系統的字節順序。

請記住,大端和小端不是唯一的可能性。對於4字節的整數類型,有24(4階乘)可能的字節排序。所有這些語言都是允許的,至少至少有其中3個已被真機使用。

+0

+1對於PDP-11中端編碼器。 –