代码之家  ›  专栏  ›  技术社区  ›  Kami Kaze

我应该重新声明外部数组的一部分以便在模块中使用吗

c89 c
  •  -1
  • Kami Kaze  · 技术社区  · 6 年前

    假设我有一个带有外部链接的项目范围可变块 vByte[1000] , vWord[1000] vQword[1000] . 由于缺乏更好的调试解决方案,我希望在运行时看到的每个变量都必须在这些块中。

    现在,我想在一个模块(编译单元)中实现一组函数,该模块有几个重要的值,我希望能够监视这些值。我提出了以下解决方案,以便更清楚地访问阵列的这些部分,但我不确定使用哪种方法。

    一开始我会声明数组 extern vByte[1000]; 在我的模块中,我想给数组的一个特定变量一个合适的名称。

    我可以 #define 我要使用的变量: #define importantValue1 vByte[21] 像这样使用它们。

    但我认为最好将变量封装在模块中,可能如下所示:

    static byte *importantValue1 = &vByte[21]; 
    

    这将加强此变量在该模块中的使用。这种方法有缺点吗?或者定义只是一种直接的方法,开销较小,没有缺点吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Stephan Lechner    6 年前

    很难回答 #define 或者指针通常是更好的方法。

    然而,从减少依赖性和代码复杂性的角度来看,减少全局变量的数量通常会减少函数/单元之间的依赖性,从而降低总体复杂性。

    所以我想说,这不是一个关于“定义”或指针方法是否更好的问题;我宁愿寻找那些不访问这些全局数组(不管通过哪种“变量”技术)但只使用函数参数/参数的函数。

    顺便说一句:请注意 α定义 -“variable”和指针变量的用法需要不同,就像在第一种情况下可以编写 importantValue1 = 10 ,而在第二种情况下,你必须写 *importantValue1 = 10 . 但我想你已经意识到了。