Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用函数调用重写变量赋值的C宏_C_Macros - Fatal编程技术网

用函数调用重写变量赋值的C宏

用函数调用重写变量赋值的C宏,c,macros,C,Macros,正在调用所有C宏专家 有没有办法编写一个C宏来替换如下内容: my_var = 5; 为此: setVar(&my_var, 5); 换句话说,我是否可以编写一个C宏来覆盖特定变量的赋值(在上面的示例中为my_var),并将其传递给一个函数,该函数的任务是设置该变量?如果可能的话,我希望能够钩住一个特定变量的赋值 编辑:再考虑一下这个问题后,我不确定是否可以做到。即使你能想出一个宏来做这件事,setVar也不一定知道变量的类型和它的设置,那么它的第二个参数的类型是什么呢 EDIT

正在调用所有C宏专家

有没有办法编写一个C宏来替换如下内容:

my_var = 5;
为此:

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


编辑:再考虑一下这个问题后,我不确定是否可以做到。即使你能想出一个宏来做这件事,setVar也不一定知道变量的类型和它的设置,那么它的第二个参数的类型是什么呢



EDIT:我之所以要钩住特定变量的赋值,是为了在一些专用嵌入式C代码的基本调试器中使用。如果能够有一个“观察列表”就好了,本质上就像IDE中一样。我的第一反应是尝试用一个C宏钩住变量赋值,这样你就可以把宏放到你的代码中,让变量被“监视”,但是我以前从来没有真正编写过调试器,所以我可能完全搞错了。

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

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


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

我想问题是相反的,用函数调用替换赋值。
#define setVar(_left_, _right_)    *(_left_) = _right_
#define setVar(_left_, _right_)    *(_left_) = _right_