2017-10-11 42 views
0

我們希望使用某種預處理器指令在C中編寫與排序無關的代碼。我們能否定義一個預處理器指令來幫助我們在編譯時檢查機器的字節順序?我們想要下面的示例代碼。任何幫助,將不勝感激。有條件的預處理器指令,用於確定機器的排列順序

#if(some conditions) 
#define LITTLE_ENDIAN 1 
#else 
#define LITTLE_ENDIAN 0 
#endif 

我知道有幾種解決方案,但這些解決方案都不符合我的要求。我不想在大型機器中編譯小端特定的代碼,反之亦然。例如

#if LITTLE_ENDIAN 

line1.. 
line2.. 
line3.. 

#else 

line4.. 
line5.. 
line6.. 

#endif 

在大端機器,我不想編譯行1,2和3這三個行應禁用。

+1

如果您使用C語言編程,那麼請僅添加C標記(即使問題可能適用於C和C++)。特別是,除非你的問題是關於該語言的特定版本,否則不要添加特定於版本的語言標記(如'C++ 14')。 –

+0

至於你的問題,有*許多*開源項目在那裏有相同的需求,並已解決它。試着環顧一下。 –

+0

@Someprogrammerdude我發現了一些解決方案,但那些不適合編譯時檢查。請分享解決方案。 –

回答

0

我不確定這是可能的。我在Android NDK中使用CMake,並且有一個CMake小部件來執行此測試。

不幸的是,它運行在主機(Windows)計算機上,而不是理解目標(android)設備。

需要有一個發佈的機制(例如編譯器提供的值)才能正常工作,而且我不知道任何這樣的全局值。

將鏈接添加到潛在副本SO : detect endianness。有些方法看起來似乎合理。