2010-12-03 62 views
3

全部 我正在做一些初步檢查,看看我的系統是big-endian還是little-endian。 在LInux中,默認情況下它應該是little-endian,但我只是想仔細檢查一下。 我用2使用boost端支持 帶有增強功能的endianess-check與小代碼的結果相比有所不同

  • 使用一些代碼,我在
  • 我用下面的靜態斷言

    BOOST_STATIC_ASSERT(!BIG_ENDIAN); 
    

    在編譯時失敗從網絡上找到接近

    1. ,所以我雖然... mmhh ...是我的系統大端? 這是錯誤我

      error: invalid application of ‘sizeof’ to incomplete type 
      boost::STATIC_ASSERTION_FAILURE<false>’ 
      

      如果我使用類似下面的一些代碼測試,它確認系統是小端。 你知道我做錯了什麼,它正確使用Boost宏嗎?

       
      bool is_big_endian_v3(){ 
      
          long x = 0x34333231; 
          char *y = (char *) &x; 
      
          if(std::strncmp(y,"1234",4)){ 
           printf("Big Endian"); 
           return true; 
          }else{ 
           printf("Little Endian"); 
           return false; 
          } 
          std::runtime_error ex("I cannot be here"); 
          throw ex; 
      
      } 
      

    回答

    4

    BIG_ENDIAN未由Boost定義。如果你看一下這個文件

    #include <boost/detail/endian.hpp> 
    

    ,你會看到,宏定義有BOOST_BIG_ENDIANBOOST_LITTLE_ENDIAN,或BOOST_PDP_ENDIAN。這意味着你需要修改你的支票是:

    BOOST_STATIC_ASSERT(!defined(BOOST_BIG_ENDIAN)); 
    

    ,或者更好:

    BOOST_STATIC_ASSERT(defined(BOOST_LITTLE_ENDIAN)); 
    

    編輯:

    上面沒有宏觀擴張如我所料,所以我建議使用

    #if !defined(BOOST_BIG_ENDIAN) 
    BOOST_STATIC_ASSERT(false); 
    #endif 
    

    代替。對困惑感到抱歉。

    +0

    對不起再次打擾你,但是當我編寫代碼時,編譯器告訴我以下錯誤:'BOOST_BIG_ENDIAN'未在此範圍內聲明。函數調用不能出現在常量表達式中 模板參數1無效。我也找不到任何定義的關鍵字 – 2010-12-03 14:05:42

    相關問題