如何从另一个模块访问静态变量(模块范围中的静态)?在C.

时间:2015-08-24 09:45:57

标签: c

我不太熟悉C编程的模块化结构,所以我决定向你寻求帮助。 假装我有两个模块进入项目。一个是sx1272.c,另一个是sx1272_ll.c。变量 radio_is_on 在sx1272_ll.c中声明如下:

static uint8_t volatile radio_is_on;

然后通过sx1272.c中的函数访问,如下所示:

foo(){
   ...............
   if(radio_is_on){
      blablabla...
      ............
   }
   ...............
}

因此,如果 radio_is_on 是静态的(在模块范围内),为什么其他模块会访问它?

sx1272_ll.c

sx1272.c

2 个答案:

答案 0 :(得分:3)

在我看来,你包括

 #include "sx1272_ll.c"

你的源文件sx1272.c

因此,文件sx1272_ll.c的全部内容只是复制粘贴到sx1272.c中,位于您在预处理阶段编写#include "sx1272_ll.c"的位置。

请参阅此链接:https://en.wikipedia.org/wiki/C_preprocessor#Including_files

答案 1 :(得分:2)

你不能声明变量static并从另一个模块访问它。

static有3个用法:

1)如果变量声明为静态whithin块(例如函数),它将在调用期间将其值作为主要值。

int add(void){
        static int var = 0;
        var++;
        return var; 
}
int main(void){
        printf("Var = %d", add());    // Here var = 1 
        printf("Var = %d", add());    // Here var = 2
        return 0;
}

2)如果变量在文件中声明为static,则只能在此文件中访问它,并且其他任何文件都无法访问它。 如果我们宣布     文件X中的static uint8_t volatile radio_is_on;,在文件Y中无法访问。

3)如果函数在文件中声明为static,则只能在此文件中访问它,其他任何文件都无法访问它。