是否适当地声明许多函数使用的变量?

时间:2014-10-09 10:34:57

标签: c

我多年来一直在写C,但我从未学过如何构建事物。我刚刚在一个文件中创建了巨型程序,并将全局作用域用于由多个函数修改的变量。我试图脱离这个并将我的功能分组到单独的文件中。我遇到的最大问题是可变范围。

例如,一个变量需要由不同文件中的两个单独函数写入,另外两个函数读取。我可以在main.c中声明它并使其成为其他人的外部,但我知道全局变得不受欢迎并且看起来很草率。

那么,是否有一个合乎逻辑的“正确”的地方来宣布它?它应该具有类似get / set函数吗?或者这个问题是否表明我的职能分工不佳?

感谢。

2 个答案:

答案 0 :(得分:1)

停止考虑变量并开始考虑。将值传递给需要它们的函数,将它们传递给所需的函数,并在结构中收集相关值以在需要时减少参数的数量。让函数返回结果而不是将其写入全局。这是用任何语言组织程序的方法,包括C.(参见Pike's Notes,尤其是规则5:"数据支配"。)

在全局变量上使用getter和setter可以为你带来一定的安全性,但它并没有解决全局状态的真正问题。您仍然需要确定程序的哪些部分正在使用哪些数据,并确保它们以正确的顺序触摸数据。

答案 1 :(得分:1)

使用malloc动态分配变量,并将指针传递给函数的变量(如果使用的是C ++,则通过引用传递)。 您可以在头文件中将变量定义为extern,并在需要的地方包含该文件,如@pala所述。

对于只读取指针指向的值的函数,可以将其定义为指向常量'的指针。这将避免该功能意外更新内容。 如果您确定内存位置的地址在函数中也将保持不变,则可以定义常量指针“常量”。检查this page是否有const指针和指向常量的指针。

返回函数的更新值也没问题,但如果有许多函数更新变量,则很难管理。

如果您有多个线程更新公共变量,请确保使用互斥锁或信号量来避免同步问题。