0

我正在实现一个全局调试模块,一个模块包含一个结构来保存 C 中的所有全局变量,我们的代码同时具有 C 和 C++ 模块。如果在某处设置了现有变量,是否有办法也将导致更新结构中的调试全局变量。我在考虑 setter 函数,但这需要在每个模块中进行修改。相反,有没有一种方法可以使用 C 或 C++ 在 JSF 中复制 valuechangeevent 之类的功能。

4

2 回答 2

0

您可能可以使用一些预处理器技巧来做到这一点:

#ifdef DEBUG
#define myvar global_debug_thingy->myvar
#else
int myvar;
#endif

我认为您不能以这种方式执行访问器函数或通知器,因为它需要不同的代码来读写,而预处理器无法做到这一点。

于 2012-10-25T18:46:06.147 回答
0

您可以使调试模块包含指向您正在监视的变量的所有指针。

struct debug {
  int * pointer_to_var_1;
};

struct debug __debug__;
__debug__.pointer_to_var_1 = &var_1;

现在假设var_1在某处发生了变化,您可以__debug__通过访问直接看到:

*(__debug__.pointer_to_var_1)  //This is up to date

否则,您将不得不使用 setter 并更改模块中的所有内容,或者使用无限循环或计时器来监视所有变量。C中没有值变化的事件登记。

于 2012-10-25T18:55:54.257 回答