C語言 利用同名巨集函式確定函式的被呼叫位置

2021-09-24 19:40:53 字數 1518 閱讀 8089

【問題】

乙個大型專案中,通用庫中的對外介面函式經常會被上層業務多次呼叫,甚至在同乙個上層業務原始檔中被多次呼叫。此時,假設你需要對被呼叫介面做改動,為了確定所影響的範圍,我們需要明確哪些上層業務呼叫了該介面。也即當前專案中有哪些原始檔呼叫了需要改動的介面函式。

【解決方法】

/*

* common_util.h

*/#ifndef _common_util_h_

#define _common_util_h_

char

*parameter_parser

(char

*str,

int num)

;#endif

/*

* common_util.c

*/#include

"common_util.h"

#include

char

*parmeter_parser

(char

*str,

int num)

/*

* main.c

*/#include

"common_util.h"

#include

#include

intmain()

為了確認函式parameter_parser()在哪些原始檔的哪些地方被呼叫,需要完成以下兩個步驟:

在標頭檔案common_util.h中定義下面的巨集函式:

/*

* common_util.h

* note: 因為巨集定義不做型別檢查(不安全),故無需關心原始函式的返回值型別及引數型別。

* 針對函式引數,只需要使用相應個數的佔位符即可,此處用a和b來佔位原始函式中的char*和int型別入參。

*/#define parameter_parser(a, b) (printf("function is invokded in source file: '%s' at line '%d'\h", __file__, __line__));

在原始檔common_util.c中注釋掉原始函式parameter_parser()

/*

* common_util.c

*/#include

"common_util.h"

#include

//char *parmeter_parser(char *str, int num)

//

更改完成,再次編譯,執行即可以通過標準輸出檢視到函式parameter_parser()具體的被呼叫資訊。

【結束語】

本文所述的問題定位方法其實和部落格中前期文章《**重構示例 1 – 最小影響原則》有異曲同工之處,感興趣的同學可以參看。若有其他高見,敬請分享之!☺

c 處理同名函式

ypedef void pf goto hell void typedef struct ibm func ibm func typedef struct sun func sun func ibm func fibm sun func fsun fibm.goto hell fsun.goto h...

C語言基礎 巨集函式

函式式巨集 巨集函式 和函式模擬會更加靈活,我們通過兩個例子來看一下。函式 include intsqr int int x double sqr double double x intmain int argc char ar 函式式巨集 include define sqr x x x intm...

C 語言 巨集定義和巨集函式

在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。我們來看乙個例子,比較兩個數或者表示式大小,首先我們把它寫成巨集定義 define max a,b a b a b 其次,把它...