Les corps de fonction en ligne dans les entités de référence C peuvent-ils être déclarés ultérieurement
Question
Disons que j'ai deux fonctions en ligne dans mon fichier d'en-tête:
inline int foo() { return bar()+2; }
inline int bar() { return 3; }
puis-je supposer qu'un compilateur C99 entrera en ligne " foo " même si 'bar' est déclaré plus tard? En supposant qu'aucune autre règle interne telle que corps de fonction trop grand ne soit déclenchée.
Les implémentations des compilateurs c le font-elles (les plus courantes disent Intel-C / Sun Studio / MSVC et gcc) même si C99 laisse cela en option?
La solution
Tant que les fonctions sont correctement prototypées, l'ordre dans lequel vous les déclarez n'a pas d'importance.
Autres conseils
inline
n'est qu'un indice pour le compilateur, et le plus souvent, il est ignoré dans les compilateurs d'optimisation modernes. Vous ne pouvez pas supposer que quelque chose soit en ligne ou non. Certains compilateurs fournissent des pragmas qui obligent une fonction particulière à être en ligne si cela est possible (par exemple, MSVC __ forceinline
). Si vous avez absolument besoin de savoir, vous devez regarder le désassemblage de la sortie.
Cela dit, pour un extrait de code donné, tout compilateur d'optimisation correct inclurait cela, avec inline
ou sans, pourvu que ce soit un en-tête unique.