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 文字...