2 votes

Est-il nécessaire de déclarer une fonction dans le fichier .h si vous n'en avez besoin que dans le fichier .cpp ?

Est-il nécessaire de déclarer une fonction dans le fichier .h si je n'ai besoin de cette fonction que pour travailler sur un seul ordinateur ? .cpp fichier ? Déclarer la fonction dans un fichier .cpp semble fonctionner également.

Y a-t-il des différences de performances, et est-il possible de le faire ? Pourquoi est-ce une pratique inhabituelle ? (du moins, je ne l'ai pas vu)

3voto

Vlad from Moscow Points 36219

En général, les fonctions sont définies pour pouvoir les utiliser plusieurs fois et dans différentes unités de compilation.

Si une fonction ne doit être utilisée que dans une seule unité de compilation, vous pouvez la définir dans un fichier de type cpp module. De plus, il est souhaitable de le faire avec un lien interne. Sinon, quelqu'un peut définir une fonction similaire avec le même type dans son propre module et la fonction ODR la règle sera brisée.

Il n'y a pas de différence de performance car le compilateur traite des des unités de compilation qui incluent tous les en-têtes listés ; pas un module sans ses en-têtes.

1voto

Acorn Points 6838

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 ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X