Per impostazione predefinita, le funzioni hanno linkage esterno e possono essere chiamate da qualsiasi altro file del progetto.
Per saperne di più sul linkage, vedi il concetto di linkage.
Una funzione static può essere chiamata solo all'interno del file sorgente in cui è definita.
Per esempio
// file scope, internal linkage
// can only be called from within this file
static void some_function()
{
// code snipped
}
// file scope, external linkage by default
// can be called from any other file in the project
int main()
{
// code snipped
}
Anche se una funzione è dichiarata in un header, se è definita come static non potrà essere chiamata dall'esterno del suo file sorgente.
Un file sorgente potrebbe includere l'header, chiamare la funzione static dichiarata nell'header e compilare, ma il linker non riuscirà a trovare la definizione della funzione static.
Una funzione contrassegnata come static in un file sorgente non dovrebbe essere dichiarata nel suo header.