Pourquoi préférer les espaces de noms anonymes aux fonctions statiques en C++ ?
Bonjour à tous ! Je suis un développeur C++ débutant, et en étudiant le sujet de la "liaison interne" (internal linkage), je suis tombé sur deux façons de rendre des fonctions ou des variables locales à une unité de traduction (translation unit).
La première méthode consiste à utiliser le mot-clé `static` pour les fonctions et variables globales. Par exemple :
```cpp
// file.cpp
static void helperFunction() {
// ... some implementation
}
static int internalCounter = 0;
```
La deuxième méthode consiste à tout placer dans un espace de noms anonyme (unnamed namespace) :
```cpp
// file.cpp
namespace {
void helperFunction() {
// ... some implementation
}
int internalCounter = 0;
}
```
Je comprends que les deux approches rendent les symboles visibles uniquement à l'intérieur de ce fichier. Mais j'entends souvent de la part de collègues expérimentés que l'utilisation de `static` pour les fonctions est une "pratique obsolète" héritée du C, et qu'en C++ moderne, il faut plutôt utiliser les espaces de noms anonymes.
Pouvez-vous expliquer pourquoi cela est