我正在阅读TLDP并注意到所有全局变量和函数都被声明为静态。在进一步阅读之后,我理解变量被声明为静态以减少名称空间污染。
根据this SO帖子,
静态函数是仅对其他函数可见的函数 函数在同一个文件中(更准确地说是相同的翻译单元)。
因此将函数声明为static将减少命名空间污染。但是,就变量而言,根据TLDP:
它会增加命名空间污染。同一翻译单元是否也可以看到全局静态变量?如果是这样,以上引用的陈述如何真实?我似乎错过了一些东西。当模块修改静态变量时,所有其他模块都将 看到新的价值。
答案 0 :(得分:2)
当模块修改静态变量时
我相信你错误地解释了这句话。这可能有点令人困惑。它不是指C static
关键字。它指的是C标准对“静态存储持续时间”的使用。参见C标准第6.2.4节:
1对象具有确定其生命周期的存储持续时间。那里 是三个存储持续时间:静态,自动和已分配。
...
3一个对象,其标识符使用外部或内部链接声明,或者使用 storage-class specifier static具有静态存储持续时间。它的 生命周期是整个程序的执行
也就是说,“静态存储持续时间”变量包括全局变量和使用C static
关键字声明的变量。在TLDP文章中,它指的是前者。