C++ static local function vs global function
Solution 1
What is the utility of having static functions in a file?
You can use these functions to provide shared implementation logic to other functions within the same file. Various helper functions specific to a file are good candidates to be declared file-static.
How are they different from having global functions in a file?
They are invisible to the linker, allowing other compilation units to define functions with the same signature. Using namespaces alleviates this problem to a large degree, but file-static
functions predate namespaces, because they are a feature inherited from the C programming language.
Solution 2
A static
function simply means that the linker cannot export the function (i.e. make it visible to other translation units). It makes the function "private" to the current translation unit. It is the same as wrapping the function in an anonymous namespace.
namespace {
int Square(int i)
{
return i * i;
}
}
Generally, using an anonymous namespace is the preferred C++ way of achieving this, instead of using the static
keyword.
Solution 3
In a word, linkage. static
functions have internal linkage, that is, they aren't visible outside of their translation unit.
Solution 4
Static functions are visible on the file where they were defined only. You can't refer to them outside of that particular file.
Related videos on Youtube
![Arun](https://i.stack.imgur.com/2KGux.jpg?s=256&g=1)
Arun
Updated on July 09, 2022Comments
-
Arun almost 2 years
What is the utility of having static functions in a file ?
How are they different from having global functions in a file ?
static int Square(int i) { return i * i; }
vs
int Square(int i) { return i * i; }
-
Simon Knapp over 10 yearsIt all became clear to me when I read that global functions are external by default, that is "void fun() {}" is identical to "extern void fun() {}"... still, if you don't put them in a header they can only be used within implementation file in which they are defined (below the point at which they are defined).
-
Cem Kalyoncu about 10 years@Simon Knapp they can be used in different transition units by using a prototype.
-
rozina almost 8 yearsWhy is it preferred? It seems more verbose to me.
-
Volper over 3 yearsYeah if you were in the middle of a 1000 line file it's easier to check whether a function is static than whether it's in a namespace, especially if you don't indent namespaces