gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:28 25 4
gpt4 key购买 nike

召集所有 C 宏专家...

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

my_var = 5;

用这个:

setVar(&my_var, 5);

换句话说,我能否编写一个 C 宏来覆盖对特定变量(在上面的示例中为 my_var)的赋值,而不是将其传递给一个函数,该函数的任务是设置该变量?如果可能,我希望能够 Hook 到特定变量的赋值。


编辑: 在进一步考虑之后,我不确定它是否可以完成。即使您可以想出一个宏来执行此操作,setVar 也不一定知道其设置的变量类型,那么它的第二个参数的类型是什么?


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

最佳答案

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

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

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

但最好的办法可能是将其放入脚本中并在所有源上运行它。这将更改代码,您将看到调试器中发生了什么。

关于用函数调用覆盖变量赋值的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com