11.9 Funkcje statyczne

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, 23 lutego 2019; 23:59