代码之家  ›  专栏  ›  技术社区  ›  Bob Somers

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

  •  1
  • Bob Somers  · 技术社区  · 17 年前

    正在调用所有C宏大师…

    是否有任何方法可以编写将替换如下内容的C宏:

    my_var = 5;
    

    用这个:

    setVar(&my_var, 5);
    

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


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


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

    2 回复  |  直到 14 年前
        1
  •  3
  •   Aaron Digulla    17 年前

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

    如果您觉得很冒险,可以尝试用一个预处理源代码的小脚本替换可执行文件“cpp”。但这可能会破坏调试信息(文件名,如果用多行代码替换一行代码,也可以用行号信息)的破坏。脚本将称为“sed”`:

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

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

        2
  •  0
  •   Bo Persson Touseef    14 年前
    #define setVar(_left_, _right_)    *(_left_) = _right_