做为一个CBD(code base design基于代码的设计)开发者,如果你维护的程序是以万行为单位来计算,那么你不得不面对一个问题全局变量global variable。在2018版功能安全标准ISO2626-6 Table6 1e中有如下描述(针对ASILB级以上产品):
Avoid global variables or else justify their usage(避免使用全局变量,如果必须使用,请判断并说明)
而 在《The Art of Designing Embedded Systems》一书中作者也写道“If God didn't want us to use global variables, he wouldn't have invented them. Rather than disappoint God, use as many globals as possible假如上帝不希望我们使用全局变量,就不会创造它,如果想让上帝失望,那就尽可能多的使用全局变量.”
为什么大家对全局变量都是如此又爱又恨呢?让我们先看看全局变量会带给我们那些麻烦:
1、全局变量的使用会破坏信息隐藏原则,让你持续违背功能安全标准(ISO2626-6 Table6 1h 中要求No hidden data flow or cnotrol flow没有隐藏的数据流和控制流)如果你的代码足够长、足够复杂的话,最后真的只有天知道什么地方会更改全局变量。
2、全局变量会导致模块之间的强耦合。很不幸,说到这一条,全局变量将再一次违背功能安全标准,( ISO2626-6 Table3 1e 要求 Loose coupling between software components软件组件之间要低耦合 ),设计再好的架构在全局变量面前都像是一坨面条&#x