C语言 使用指针从另一个编译单元访问和修改静态变量



如果我有一个静态变量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。

最新更新