Use of static variables and functions in global scope

冷暖自知 提交于 2019-11-30 21:45:13

问题


Is there a use for flagging a variable as static, when it lies in the global scope of a .cpp file, not in a function?

Can you use the static keyword for functions as well? If yes, what is their use?


回答1:


In this case, keyword static means the function or variable can only be used by code in the same cpp file. The associated symbol will not be exported and won't be usable by other modules.

This is good practice to avoid name clashing in big software when you know your global functions or variables are not needed in other modules.




回答2:


Yes, if you want to declare file-scope variable, then static keyword is necessary. static variables declared in one translation unit cannot be referred to from another translation unit.


By the way, use of static keyword is deprecated in C++03.

The section $7.3.1.1/2 from the C++ Standard (2003) reads,

The use of the static keyword is deprecated when declaring objects in a namespace scope; the unnamed-namespace provides a superior alternative.

C++ prefers unnamed namespace over static keyword. See this topic:

Superiority of unnamed namespace over static?




回答3:


Taking as an example -

// 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();                   
}

They both cease to exist only when the program terminates/exits.



来源:https://stackoverflow.com/questions/4725204/use-of-static-variables-and-functions-in-global-scope

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!