假设我有三个具有外部链接vByte[1000]
,vWord[1000]
和vQword[1000]
的项目范围可变块。而且由于缺少更好的调试解决方案,我希望在运行时看到的每个变量都必须位于这些块中。
现在,我想在一个模块(编译单元)中实现一组函数,该模块具有一些我希望能够监视的重要值。我想出了以下解决方案来更清楚地访问阵列的这些部分,但是我不确定该使用哪个。
首先,我将在模块中声明数组extern vByte[1000];
,然后给该数组的特定变量指定合适的名称。
我可以#define
我要使用的变量:#define importantValue1 vByte[21]
并像这样使用它们。
但是我认为最好将变量封装在模块中,也许像这样:
static byte *importantValue1 = &vByte[21];
这将加强此变量在此模块中的使用。这样做是否有缺点?或者定义只是简单的方法,开销少,没有缺点?
答案 0 :(得分:1)
通常很难回答#define
还是指针是更好的方法。
但是,从减少依赖性和代码复杂性的角度来看,减少全局变量的数量通常会减少函数/单元之间的依赖性,从而降低总体复杂性。
因此,我想说的是#define-或指针方法是否更好不是一个问题。我宁愿争取那些不访问这些全局数组的函数(无论通过哪种“可变”技术),而只能使用函数参数/参数。
BTW:请注意,#define
-“变量”和指针变量的使用方式有所不同,在第一种情况下,您可以编写importantValue1 = 10
,而在第二种情况下,您必须写*importantValue1 = 10
。但是我认为您已经意识到这一点。