2009-01-14 48 views
0

調用的所有C宏大師變量賦值...C近拍重寫與函數調用

有沒有什麼辦法來寫一個C​​宏,將取代像這樣:

my_var = 5; 

與此:

setVar(&my_var, 5); 

換句話說,我可以寫一個C宏,將覆蓋一個特定的變量賦值(在上述例子中,my_var),並改爲將其傳遞到其工作是,以設置variab的函數樂?如果可能,我希望能夠鉤入特定變量的分配。


編輯:思考這個多一些之後,我不知道這是可以做到。即使你可以想出一個宏來做它,setVar不一定知道它的設置的變量的類型,那麼它的第二個參數的類型是什麼?


編輯:我想鉤特定變量的賦值的原因是爲了在原始的調試器使用了一些專門的嵌入式C代碼。能夠有一個「觀察列表」,就像在IDE中一樣。我的第一本能是嘗試用C宏掛接變量賦值,這樣你就可以將宏放入你的代碼中並讓變量「觀看」,但是再一次,我從來沒有真正寫過調試器,所以也許我要去關於這一切都錯了。

回答

3

不適用於標準預處理器。它不能更改文件的解析,只能用一段代碼替換專用名稱(「=」在名稱中無效)。

如果您覺得冒險,可以嘗試用一個預處理源代碼的小腳本替換可執行文件「cpp」。但是這可能會破壞調試信息(文件名,如果你用幾行代碼替換一行代碼,也可以使用行號信息)。該腳本會叫「sed的」`:

sed -e 's/my_var\s*=\s*([^;]+);/MY_VAR(my_var, $1);/' file.c > file_tmp.c 

但是你最好的選擇可能是把這個變成一個腳本,只需在您所有的源運行它。這將改變代碼,你會看到你的調試器中發生了什麼。

0
#define setVar(_left_, _right_) *(_left_) = _right_ 
+1

我認爲這個問題想要它的另一種方式,用函數調用替換賦值。 – 2012-07-30 18:16:26