【问题标题】:C Macro to Override Variable Assignment with Function Call用函数调用覆盖变量赋值的 C 宏
【发布时间】:2009-01-14 12:11:30
【问题描述】:

呼叫所有 C 宏大师...

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

my_var = 5;

用这个:

setVar(&my_var, 5);

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


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


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

【问题讨论】:

    标签: c macros


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:
      #define setVar(_left_, _right_)    *(_left_) = _right_
      

      【讨论】:

      • 我认为问题是反过来的,用函数调用替换分配。
      猜你喜欢
      • 2013-11-27
      • 2018-09-01
      • 2010-10-11
      • 2016-02-29
      • 2020-07-17
      • 2010-10-25
      • 2021-06-11
      相关资源
      最近更新 更多