Funkcje można deklarować/definiować z modyfikatorem static. Znaczenie tego modyfikatora jest jednak zupełnie inne dla funkcji globalnych, a więc nie będących składowymi klas, i dla funkcji składowych klas (ten ostatni przypadek omówimy w rozdziale o klasach ).
Wszystkie funkcje globalne są widoczne nie tylko w module (jednostce translacji), gdzie zostały zdefiniowane, ale we wszystkich tych modułach składających się na program, w których pojawia się ich deklaracja.
Natomiast funkcja globalna zadeklarowana/zdefiniowana w pewnym module z modyfikatorem static nie jest „eksportowana”: może być użyta tylko w tym module, podobnie jak to miało miejsce dla globalnych zmiennych statycznych — patrz rozdział o klasach pamięci . Dzięki temu w innym module programu można użyć tej samej nazwy dla zupełnie innej funkcji statycznej: kolizji nazw nie będzie, bo w każdym module znana będzie tylko jedna funkcja o tej nazwie — ta pochodząca z tego modułu. Z tego mechanizmu praktycznie rzadko się korzysta; jeśli chodzi nam o zabezpieczenie się przed przypadkowymi kolizjami nazw, to lepszym i bardziej elastycznym mechanizmem są przestrzenie nazw (patrz rozdział o przestrzeniach nazw ).
T.R. Werner, 21 lutego 2016; 20:17