Si vous définissez et appelez une fonction dans une seule unité de traduction ("a .cpp
"), évitez de déclarer la fonction dans un fichier d'en-tête, à moins que vous ne souhaitiez exposer cette fonctionnalité et avoir de futurs appelants en dehors de votre unité de traduction.
En outre, vous devez placer la fonction dans un espace de nom anonyme (ou la marquer static
), afin que les lecteurs (et le compilateur) sachent que cette fonction est privée à l'unité de traduction (liaison interne). Cela peut impliquer que la fonction ne soit même pas générée du tout (l'optimiseur peut décider de mettre en ligne tous les appelants).
En d'autres termes, faites :
namespace {
void foo() {
// ...
}
}
Voir aussi Espaces de noms non nommés/anonymes et fonctions statiques y Supériorité des espaces de noms non nommés sur les espaces statiques ?