我不太熟悉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 是静态的(在模块范围内),为什么其他模块会访问它?
答案 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,则只能在此文件中访问它,其他任何文件都无法访问它。