核心原始碼中遇到不會解析的巨集怎麼辦?

2021-09-24 05:49:38 字數 1074 閱讀 7458

在分析核心原始碼的時候,會碰到各種奇怪的巨集定義,憑自己腦子分析,感覺完全轉不過來,不得不感嘆c語言確實強大。

廢話少說,下面給出乙個例項

分析uboot的時候,遇到這種巨集,完全懵逼

下面給出具體的解決過程

1、找到在**引用這個巨集的

2、將巨集定義和引用巨集的**放到乙個c檔案

3、gcc ***.c -e -o ***.i進行預處理

原始碼是這樣的

/*

遇到不會解析的巨集如何做?

*/struct cmd_tbl_s ;

typedef struct cmd_tbl_s cmd_tbl_t;

#define u_boot_cmd(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_##name struct_section =

int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *ar**)

u_boot_cmd(

boot, 1, 1, do_bootd,

"boot - boot default, i.e., run 'bootcmd'\n",

null

);int main(void)

預處理之後的**

# 1 "test.c"

# 1 ""

# 1 ""

# 1 "/usr/include/stdc-predef.h" 1 3 4

# 1 "" 2

# 1 "test.c"

struct cmd_tbl_s ;

typedef struct cmd_tbl_s cmd_tbl_t;

int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *ar**)

cmd_tbl_t __u_boot_cmd_boot struct_section =

;int main(void)

核心原始碼 查詢 結構體或者巨集的定義

想要檢視一些結構體的定義,比如struct ip mreq,可以檢視標頭檔案,所有的系統預定義的結構體都在核心源 的 include下有定義,ubuntu裡面是 usr include 比如要找上面提到的struct ip mreq,可以這樣 find usr include name h xarg...

js中bind apply的原始碼解析

bind也是處理this指向的,但是它是預處理this的指向,函式呼叫之後,只是預處理了裡面的this,不會像call一樣自動讓fn執行。要想讓fn執行,我們需要再次呼叫它的返回值 let obj function fn x,y 1 2 var res fn.bind obj,1,2 res 也可以...

OC原始碼中的一些巨集

if define cplusplus define foundation extern extern c else define foundation extern extern endif 表示extern全域性變數,此時並沒有分配記憶體,需要在.m檔案中實現,為了支援c和c 混編 cplusp...