Ma bibliothèque contient une fonction utilisée à la fois interne et externe. La fonction est si petite que je veux que le compilateur essaie d'utiliser la fonction inline lorsqu'il est appelé internal. Comme la fonction utilise des informations de type incomplet, les appels externes ne peuvent pas être insérés. Donc, mon module devrait également toujours contenir une copie de la fonction avec un lien externe.Comment définir une fonction comme copie interne et externe en ligne dans C99
Je pense avoir trouvé la solution suivante, mais souhaitez que votre conseil:
/* stack.h */
struct stack;
extern bool stack_isempty(struct stack *s);
/* stack.c */
#include "stack.h"
struct stack { [...]; int size; };
inline bool stack_isempty(struct stack *s) { return s->size == 0; }
Habituellement j'utiliser en ligne l'inverse ou seulement mettre une fonction static inline
dans le fichier d'en-tête. Mais comme expliqué, ce n'est pas possible ici.
Cette approche donne-t-elle les résultats escomptés? Quelqu'un voit-il des inconvénients à cette approche (est-ce portable C99)?
Bien que cette question soit valable d'un point de vue linguistique, d'un point de vue pratique, inline n'a pas d'effet sur la capacité d'un compilateur à s'intégrer en interne, vous pouvez donc obtenir les mêmes résultats cela, ce qui simplifie votre code. – Leushenko