2

呼叫所有 C 宏大师...

有什么方法可以编写一个 C 宏来代替这样的东西:

my_var = 5;

有了这个:

setVar(&my_var, 5);

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


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


编辑:我想挂钩特定变量的赋值的原因是为了在一些专门的嵌入式 C 代码的原始调试器中使用。能够拥有一个“监视列表”会很好,就像您在 IDE 中一样。我的第一直觉是尝试用 C 宏挂钩变量赋值,这样您就可以将宏放入代码中并“监视”该变量,但话说回来,我以前从未真正编写过调试器,所以也许我要去关于这一切都错了。

4

2 回答 2

3

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

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

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

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

于 2009-01-14T12:45:36.060 回答
0
#define setVar(_left_, _right_)    *(_left_) = _right_
于 2012-07-30T16:43:24.330 回答