C99 fonction inline dans .fichier c
J'ai défini ma fonction dans les .c (sans en-tête de déclaration) comme ici:
inline int func(int i) {
return i+1;
}
Puis, dans le même fichier ci-dessous je l'utilise:
...
i = func(i);
Et durant le lien que j'ai obtenu "undefined reference to 'func'". Pourquoi?
- Soit faire
static
ou de fournir un non-inline définition que l'éditeur de liens peut trouver. - Voir aussi stackoverflow.com/questions/6312597
Vous devez vous connecter pour publier un commentaire.
La
inline
modèle en C99 est un peu différent que la plupart des gens pensent, et, en particulier, différent de celui utilisé par le C++inline
est qu'une indication telle que le compilateur ne vous plaignez pas de doublement des symboles définis. Il ne garantit pas qu'une fonction inline, ni le fait qu'un symbole est généré, si c'est nécessaire. Pour forcer la génération d'un symbole vous aurais à ajouter une sorte de instanciation après lainline
définition:Vous devez généralement le
inline
définition dans un fichier d'en-tête, qui est ensuite inclus dans plusieurs .c fichiers (unités de compilation). Et que vous souhaitez seulement avoir la ligne ci-dessus exactement dans l'une des unités de compilation. Vous aurez probablement voir le problème que vous avez, parce que vous n'êtes pas à l'aide de l'optimisation de votre compilateur exécuter.Donc, votre cas d'utilisation, d'avoir la
inline
dans le .c fichier n'a pas beaucoup de sens, mieux d'utiliser seulementstatic
pour que, même supplémentairesinline
ne pas acheter de vous.extern
fichier-champ d'application de la déclaration sansinline
t de la force de la définition de ne pas être un en ligne un-O0
, je suppose que vous dire que, gcc n'a généralement pas d'inline n'importe quelle fonction. Vous avez alors le doit ont les symboles définis quelque part, sinon il ne serait pas trouver un de lainline
déclarer des fonctions définies.