#### 22.1.3 Static Functions ¶

The keyword `static` in a function definition limits the visibility of the name to the current compilation module. (That’s the same thing `static` does in variable declarations; see File-Scope Variables.) For instance, if one compilation module contains this code:

    static int
    foo (void)
    {
      ...
    }

then the code of that compilation module can call `foo` anywhere after the definition, but other compilation modules cannot refer to it at all.

To call `foo` before its definition, it needs a forward declaration, which should use `static` since the function definition does. For this function, it looks like this:

    static int foo (void);

It is generally wise to use `static` on the definitions of functions that won’t be called from outside the same compilation module. This makes sure that calls are not added in other modules. If programmers decide to change the function’s calling convention, or understand all the consequences of its use, they will only have to check for calls in the same compilation module.