lwip 有趣的陣列定義 預處理

2021-06-19 09:09:41 字數 2120 閱讀 8390

alignment

struct

tcpinclude

output

在全域性定義的巨集和在乙個函式內部定義的巨集有什麼不同?是不是和變數的定義含義差不多,作用域不同?還是有其他的什麼差別?

巨集定義的作用域是同檔案內從定義開始起作用 直到取消定義

static u8_t memp_memory[mem_alignment - 1

#define lwip_mempool(name,num,size,desc) + ( (num) * (memp_size + memp_align_size(size) ) )

#include "lwip/memp_std.h"

];上面紅色部分的即是乙個巨集定義,可單獨拿開

等同下面

#define lwip_mempool(name,num,size,desc) + ( (num) * (memp_size + memp_align_size(size) ) )

static u8_t memp_memory[mem_alignment - 1

#include "lwip/memp_std.h"];

memp_std.h檔案中部分**

#if lwip_raw

lwip_mempool(raw_pcb,        memp_num_raw_pcb,         sizeof(struct raw_pcb),        "raw_pcb")

#endif /* lwip_raw */

#if lwip_udp

lwip_mempool(udp_pcb,        memp_num_udp_pcb,         sizeof(struct udp_pcb),        "udp_pcb")

#endif /* lwip_udp */

#if lwip_tcp

lwip_mempool(tcp_pcb,        memp_num_tcp_pcb,         sizeof(struct tcp_pcb),        "tcp_pcb")

lwip_mempool(tcp_pcb_listen, memp_num_tcp_pcb_listen,  sizeof(struct tcp_pcb_listen), "tcp_pcb_listen")

lwip_mempool(tcp_seg,        memp_num_tcp_seg,         sizeof(struct tcp_seg),        "tcp_seg")

#endif /* lwip_tcp */

#undef lwip_mempool

陣列中的巨集定義,可單獨拿出來,與陣列無關,因為用#define定義的巨集是在預處理階段進行處理的,而非編譯時期進行

預處理,後面的include也是預處理。可以根據前面進行展開。

如果lwip_raw定義了

memp_memory[[mem_alignment - 1+ ( (memp_num_raw_pcb) * (memp_size + memp_align_size(sizeof(struct raw_pcb)) ) )]

如果lwip_udp定義了

memp_memory[[mem_alignment - 1+ ( (memp_num_udp_pcb) * (memp_size + memp_align_size(sizeof(struct udp_pcb)) ) )]

如果兩者都定義了

memp_memory[[mem_alignment - 1+ ( (memp_num_raw_pcb) * (memp_size + memp_align_size(sizeof(struct raw_pcb)) ) ) + ( (memp_num_udp_pcb) * (memp_size + memp_align_size(sizeof(struct udp_pcb)) ) )]

說明這個陣列根據你是否定義lwip_raw等巨集(這些巨集實際可看做tcpip的各個模組,根據需要選擇),陣列的長度是可變的。

#define  min( x, y ) ( ((x) < (y)) ? (x) : (y) )

#ifdefine min  (正確)

#ifdefine min(x,y)  (錯誤)

unsigned char a=;

lwip 有趣的陣列定義 預處理 轉

lwip 有趣的陣列定義 預處理 轉 該陣列存放tcpip各個模組的記憶體快取。每個不同模組又分解為多個包,每個包的尺寸相同。當接到到資料報之後,根據不同記憶體模式,將包分解儲存到相應的模組快取中,傳送也一樣。詳見 low level input和low level output兩個函式 stati...

有趣的C語言預處理

分類解釋 在編譯器編譯之前,會首先搜尋預處理指令,按照指令完成編譯,預處理又分為 檔案包含 條件編譯 布局控制 雜注 和巨集替換。檔案包含 include 和 include 前者是和該c檔案相同目錄下的.h,如 include os cfg.h 或指明路徑的.h,如 include softwar...

預處理定義

預處理也稱為預編譯,它為編譯做預備工作,主要進行 文字的替換工作,用於處理 開頭的指令,其中預處理器產生編譯器的輸出。經過預處理器處理的源程式會有所不同,在預處理階段所進行的工作只是純粹的替換和展開,沒有任何計算功能。常見指令如下 define 巨集定義 undef 未定義巨集 include 文字...