C++ fonction locale statique vs fonction globale

Quelle est l'utilité d'avoir des fonctions statiques dans un fichier ?

En quoi sont-ils différents d'avoir des fonctions globales dans un fichier ?

static int Square(int i)
{
   return i * i;
} 

Vs

int Square(int i)
{
   return i * i;
}
26
demandé sur Arun 2013-02-07 06:45:03

4 réponses

Quelle est l'utilité d'avoir des fonctions statiques dans un fichier?

Vous pouvez utiliser ces fonctions pour fournir une logique d'implémentation partagée à d'autres fonctions dans le même fichier. Diverses fonctions d'assistance spécifiques à un fichier sont de bons candidats pour être déclaré fichier statique.

En quoi sont-ils différents d'avoir des fonctions globales dans un fichier?

Ils sont invisibles à l'éditeur de liens, permettant à d'autres unités de compilation de définir des fonctions avec le même signature. L'utilisation d'espaces de noms atténue ce problème dans une large mesure, mais les fonctions file-static sont antérieures aux espaces de noms, car elles sont une fonctionnalité héritée du langage de programmation C.

32
répondu dasblinkenlight 2013-02-07 03:03:42

Une Fonction static signifie simplement que l'éditeur de liens ne peut pas exporter la fonction (c'est-à-dire la rendre visible aux autres unités de traduction ). Il rend la fonction "privée" à l'Unité de traduction actuelle. C'est la même chose que d'envelopper la fonction dans un espace de noms anonyme.

namespace {

    int Square(int i)
    {
       return i * i;
    } 

}

Généralement, l'utilisation d'un espace de noms anonyme est le Moyen C++ préféré pour y parvenir, au lieu d'utiliser le mot clé static.

11
répondu Charles Salvia 2013-02-07 03:09:39

Les fonctions statiques sont visibles sur le fichier où elles ont été définies uniquement. Vous ne pouvez pas vous y référer en dehors de ce fichier particulier.

Lire la suite ici

3
répondu Leonardo Acevedo 2013-02-07 02:47:06

En un mot, lien. Les fonctions static ont un lien interne, c'est-à-dire qu'elles ne sont pas visibles en dehors de leur unité de traduction.

2
répondu Yuushi 2013-02-07 02:47:42