2009-11-30 7 views
2

Disons que j'ai deux fonctions en ligne dans mon fichier d'en-tête:peut-corps de fonctions en ligne dans des entités de référence C déclarés plus tard

inline int foo() { return bar()+2; } 
inline int bar() { return 3; } 

puis-je supposer qu'un compilateur C99 sera en ligne « foo » même si « bar » est déclaré plus tard? En supposant qu'aucune autre règle interne comme le corps de la fonction à grande n'est déclenchée.

Est-ce que les implémentations de compilateurs c le font (les plus répandues disent Intel-C/Sun Studio/MSVC et gcc) même si C99 le laisse en option?

Répondre

3

Tant que les fonctions sont correctement prototypées, l'ordre dans lequel vous les déclarez n'aura aucune importance.

3

inline est juste un indice pour le compilateur, et le plus souvent il est ignoré dans les compilateurs d'optimisation modernes. Vous ne pouvez pas supposer quoi que ce soit à propos de si quelque chose s'inline ou non. Certains compilateurs fournissent des pragmas qui forcent une fonction particulière à être inline si cela est possible (par exemple MSVC __forceinline). Si vous avez absolument besoin de savoir, vous devez regarder le démontage de la sortie. Cela dit, pour un extrait donné, tout compilateur d'optimisation décent serait aligné avec inline ou sans, tant qu'il s'agit d'un seul en-tête.