如果我有一个静态变量my_var
在第一个。c文件和指针ptr_my_var指向这个变量,是正常的访问和使用ptr_my_var
指针从另一个编译单元改变变量my_var
?
// first.c
...
static float my_var;
float *ptr_my_var = &my_var;
...
// second.c
...
extern float *ptr_my_varl;
void bar() {
(*ptr_my_varl) = 777.777;
}
// third.c
extern float *ptr_my_varl;
void foo() {
(*ptr_my_varl) = 1.233;
}
这被广泛认为是非常糟糕的编程实践*)。
将变量声明为静态的全部目的是希望减少变量的作用域,使其对其所在的模块私有。这是实现私有封装的C方法,是面向对象程序设计的基石之一。
*)参见例如CERT C DCL15-C或MISRA-C:2012规则8.8。