2012-01-17 125 views
2

請幫我理解這段代碼的含義。我已經看到這種用法的首次這段代碼是什麼意思?

typedef enum { 

     E_1_DEFAULT = 0, 
     E_1_1, 
     E_1_2, 
     E_1_3, 
     E_1_4, 
     E_1_5, 
     E_1_255 = 255   //needs at least 8Bit 

} APPLICATION_ENUM_1;       

typedef enum { 

     E_2_DEFAULT = 0, 
     E_2_1, 
     E_2_2, 
     E_2_3     //needs at least 2Bit 

} APPLICATION_ENUM_2;       

typedef enum { 

     E_3_DEFAULT = 0, 
     E_3_1, 
     E_3_2, 
     E_3_3, 
     E_3_4, 
     E_3_5, 
     E_3_666 = 666   //needs at least 10Bit 

} APPLICATION_ENUM_3; 



typedef struct { 

     APPLICATION_ENUM_3  var3:10;    // 10Bit 
     APPLICATION_ENUM_1  var1:8;   // 18Bit 
     APPLICATION_ENUM_2  var2:2;   // 20Bit 
     uint8     unnused_1:4; // fill up the last whole byte -> 24Bit = 3byte 

} APPLICATION_RAM;; 
+1

您可能想要自己寫一本關於C,C++或任何相關語言的入門書籍,並從第一章開始。 – 2012-01-17 15:17:08

+0

@Jesper:是什麼讓你認爲這必然是C++?它看起來更像C,但它也可以是其他的東西,例如Objective-C的。 – 2012-01-17 15:18:20

+1

@PaulR我還沒有找到一本涵蓋第1章中位域的C/C++書籍,如果所有的 – 2012-01-17 15:20:50

回答

6

根據C++標準

基礎類型枚舉的是,可以表示所有在枚舉所定義的枚舉值的整體式。

現在讓我們看一下第一個定義

typedef enum { 

     E_1_DEFAULT = 0, 
     E_1_1, 
     E_1_2, 
     E_1_3, 
     E_1_4, 
     E_1_5, 
     E_1_255 = 255   //needs at least 8Bit 

} APPLICATION_ENUM_1; 

定義E_1_255 = 255確保來自0 to 255所有值可以通過該枚舉類型來表示,你至少需要8位從0 to 255

代表所有值
typedef struct { 

     APPLICATION_ENUM_3  var3:10;    // 10Bit 
     APPLICATION_ENUM_1  var1:8;   // 18Bit 
     APPLICATION_ENUM_2  var2:2;   // 20Bit 
     uint8     unnused_1:4; // 24Bit = 3byte 

} APPLICATION_RAM; 

上述結構使用很少使用的bitfield構造。基本上聲明APPLICATION_RAM作爲具有

  • var3構件是10位
  • 一個結構
  • var1構件是8位
  • var2構件是2個比特
  • unnused_1構件是4位
+0

感謝您花時間回答。 – bubble 2012-01-26 05:04:01