在結構體中定義巨集定義意義

2021-07-04 21:21:29 字數 934 閱讀 3117

第一次看見在結構體中有巨集定義,開始有點迷糊,想到該結構是如何儲存的?巨集定義會是不會多次編譯?以下是我看的乙個列子:

typedef struct

{#define xcp_authorized_bit      0x01

uint16_t xcpauthorizedbit:1;  

#define block_response          0x02

uint16_t xcpblockresponsebit:1; 

#define xcp_no_c9              0x04

uint16_t xcpnoc9:1;       

#define xcp_modem_auth_bit      0x08

uint16_t xcpmodemauthbit:1;   

#define xcp_sys_subm_bit        0x10

uint16_t xcpsyssubmbit:1;     

#define xcp_in_sequence         0x20   

uint16_t xcpinsequence:1;    

#define xcp_safekey_request     0x40

uint16_t xcpsafekeyrequestbit:1;

uint16_t :0;                

在這裡我們要明白的是預編譯與編譯兩者的區別:巨集定義是在預編譯時就會去找到相應的常量去替換,就是在編譯成目標檔案之前已經進行了替換,所以這裡在結構體中有巨集定義不會被重複編譯,也就不可能為結構體中的巨集定義分配記憶體一說。

作用域還是開始於#define,結束於#undef,沒有什麼只作用於結構體之內。

把巨集定義放在結構體中,按我看的**來看應該是為了更加直觀,讓人一看就知道改結構體中的個標誌位是什麼,被定義在哪一位 ,以便於運算。

定義在結構體裡面的巨集

測試 如下 include struct test void func define st define 20 int main int argc,char ar 輸出 1 10 20總結 1 巨集定義在結構體裡面,只是方便 的閱讀,一般這種情況,大部分是結構體裡面有標誌量,方便閱讀。2 在結構體裡...

定義在結構體裡面的巨集

1 巨集定義在結構體裡面,只是方便 的閱讀,一般這種情況,大部分是結構體裡面有標誌量,方便閱讀。2 在結構體裡面定義乙個巨集,在結構體外面也可以定義同樣的巨集,如果兩個巨集的內容不一樣,那麼在使用的地方,哪個巨集近就使用哪個。編譯會有警告 巨集就是替換,從上面開始,一直往後面替換。如果巨集新定義了,...

結構體和巨集定義

問題 1.define?2.define m y y 3 y 3.巨集定義在 中?4.巨集定義允許巢狀?5.include 和 include 6.條件編譯?7.結構體?8.結構體賦初值?9.引用結構體變數中的成員?10.記憶體位元組對齊?解答 1.define 識別符號 字串 號開頭的都是預處理命...