Les corps de fonction en ligne dans les entités de référence C peuvent-ils être déclarés ultérieurement

StackOverflow https://stackoverflow.com/questions/1817950

  •  10-07-2019
  •  | 
  •  

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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top