在全局范围内使用静态变量和函数

时间:2011-01-18 14:29:47

标签: c++ static global-variables global static-variables

当变量位于.cpp文件的全局范围内而不是函数中时,是否可以将变量标记为static

你也可以为函数使用static关键字吗?如果是,他们的用途是什么?

3 个答案:

答案 0 :(得分:18)

是的,如果要声明文件范围变量,则需要static关键字。在一个翻译单元中声明的static个变量不能从另一个翻译单元中引用。


顺便说一下,在C ++ 03中不推荐使用static关键字。

C ++标准(2003)中的$ 7.3.1.1 / 2部分读取,

  

使用static关键字是   在声明对象时不推荐使用   名称范围;该   unnamed-namespace提供了一个优越的   替代品。

C ++优先于static关键字未命名命名空间。请参阅此主题:

Superiority of unnamed namespace over static?

答案 1 :(得分:15)

在这种情况下,关键字static表示函数或变量只能由同一cpp文件中的代码使用。相关符号不会被导出,也不会被其他模块使用。

当您知道其他模块中不需要全局函数或变量时,这是避免大软件中名称冲突的好习惯。

答案 2 :(得分:1)

以身作为例 -

// At global scope
int globalVar; // Equivalent to static int globalVar;
               // They share the same scope
               // Static variables are guaranteed to be initialized to zero even though
               //    you don't explicitly initialize them.


// At function/local scope

void foo()
{
    static int staticVar ;  // staticVar retains it's value during various function
                            // function calls to foo();                   
}

只有在程序终止/退出时它们才会停止存在。