我正在实现一个全局调试模块,一个模块包含一个结构来保存C中的所有全局变量,我们的代码同时包含C和C ++模块。如果在某处设置现有变量,有没有办法,也会导致更新结构中的调试全局变量。 我在考虑setter函数,但是这需要在每个模块中进行修改。而且还有一种方法可以像使用C或C ++在JSF中复制valuechangeevent这样的功能。
答案 0 :(得分:0)
你可以用一些预处理器技巧来做到这一点:
#ifdef DEBUG
#define myvar global_debug_thingy->myvar
#else
int myvar;
#endif
我不认为你可以这样做访问器函数或通知器,因为它需要不同的代码进行读写,而预处理器不能这样做。
答案 1 :(得分: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中没有值更改的事件注册。