C宏用函数调用覆盖变量赋值

时间:2009-01-14 12:11:30

标签: c macros

调用所有C宏专家......

有没有办法编写一个C宏来代替这样的东西:

my_var = 5;

用这个:

setVar(&my_var, 5);

换句话说,我可以编写一个C宏来覆盖特定变量的赋值(在上面的例子中,my_var),而是将它传递给一个函数,该函数的作用是设置该变量吗?如果可能的话,我希望能够挂钩特定变量的分配。


编辑:在考虑了这个之后,我不确定是否可以做到。即使你可以想出一个宏来做它,setVar也不一定知道它的设置变量的类型,那么它的第二个参数的类型是什么?


编辑:我想挂钩特定变量赋值的原因是在原始调试器中用于某些专用嵌入式C代码。能够拥有一个“监视列表”会很高兴,就像你在IDE中一样。我的第一个本能是试图用C宏挂钩变量赋值,这样你就可以将宏放入代码中并让变量“看了”,但是我再也没有真正编写过调试器,所以也许我要去关于那一切都错了。

2 个答案:

答案 0 :(得分:3)

不使用标准预处理器。它不能更改文件的解析,只能用一段代码替换正确的名称(并且“=”在名称中无效)。

如果您喜欢冒险,可以尝试使用预处理源代码的小脚本替换可执行文件“cpp”。但这可能会破坏调试信息(文件名,如果你用一些代码替换一行代码,也有线号信息)。该脚本将调用“sed”`:

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

但你最好的选择可能就是把它放到一个脚本中,只需在你的所有来源上运行它。这将更改代码,您将看到调试器中发生了什么。

答案 1 :(得分:0)

#define setVar(_left_, _right_)    *(_left_) = _right_