在C中使用静态变量的最佳实践

bph*_*bph 10 c variables static

全局变量通常被认为是一种糟糕的编程实践

在C中,静态变量(即模块(文件)范围)是否正常?

我的想法是面向对象语言中的成员变量不能比C中的静态变量危险得多,成员变量似乎被认为是一件好事.

我厌倦了通过多个函数传递参数,并且可以看到静态变量的吸引力,特别是如果它们const.

但是我很想知道这是否令人不悦 - 以及在一个大对象与其几个方法中使用的成员变量和一个包含一些利用的函数的C文件之间的编程顽皮程度是否真的有任何差别一个静态变量?

ibi*_*bid 5

C中的静态(文件范围)变量类似于C++中的静态成员变量.

任何使用非常量静态变量进行函数之间的通信都会使这些函数变得不可靠且线程不安全.因此,通常最好通过参数传递信息.

非静态成员变量的更好模拟是结构成员.只需在结构中收集"成员变量",并将该结构作为"this"参数传递.


Dav*_*nan 1

静态变量可能比全局变量稍微好一些,但也好不了多少。然而,不像全局变量那么邪恶并不是什么值得赞扬的事情!

当您有多个线程或可重入函数时,它们就不够了。更重要的是,使用它们作为参数传递机制将导致代码非常难以阅读和维护。静态变量有用途,但我永远不会将它们用于参数传递。在某些情况下,将参数收集到要传递的结构中可能会更好。