C++ static local function vs global function

36,546

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.

Read more here

Share:
36,546

Related videos on Youtube

Arun
Author by

Arun

Updated on July 09, 2022

Comments

  • Arun
    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
    Simon Knapp over 10 years
    It 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
    Cem Kalyoncu about 10 years
    @Simon Knapp they can be used in different transition units by using a prototype.
  • rozina
    rozina almost 8 years
    Why is it preferred? It seems more verbose to me.
  • Volper
    Volper over 3 years
    Yeah 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