[C99] gcc et fonctions 'inline'
Le
JKB
Bonjour à tous,
Je suis en train de modifier les sources d'un programme pour le
rendre compilable par un compilo C99 (une en-tête moisie de Solaris
demande C99 dès que _POSIX_C_SOURCE est défini avec une valeur
supérieure ou égale à 200112L, contrairement aux autres systèmes que
j'ai sous la main). J'ai eu quelques problèmes avec 'inline' mais là, ça
compile correctement.
En revanche, j'ai un tas de warnings du type :
rpl.conv.h:2811: warning: inline function ‘librpl_write_atomic’ declared
but never defined
rpl.conv.h:2809: warning: inline function ‘librpl_read_atomic’ declared
but never defined
rpl.conv.h:2589: warning: inline function ‘librpl_scrutation_injection’
declared but never defined
rpl.conv.h:2477: warning: inline function ‘librpl_analyse_instruction’
declared but never defined
et j'en passe qui me polluent allègrement les logs de compilation.
Ça ne correspond pas à une erreur, j'ai un fichier d'en-tête qui
reprend toutes les fonctions 'inlinées', fonctions qui ne sont pas
utilisées dans tous mes fichiers de sources.
Je viens de lire (plusieurs fois) la doc de gcc et je n'ai pas
trouvé d'option empêchant l'affichage de ce genre de warning.
J'aimerais autant ne pas voir ces warnins qui ne sont pas des
erreurs pour mieux voir ce qui pourrait poser problème
Une idée ?
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Je suis en train de modifier les sources d'un programme pour le
rendre compilable par un compilo C99 (une en-tête moisie de Solaris
demande C99 dès que _POSIX_C_SOURCE est défini avec une valeur
supérieure ou égale à 200112L, contrairement aux autres systèmes que
j'ai sous la main). J'ai eu quelques problèmes avec 'inline' mais là, ça
compile correctement.
En revanche, j'ai un tas de warnings du type :
rpl.conv.h:2811: warning: inline function ‘librpl_write_atomic’ declared
but never defined
rpl.conv.h:2809: warning: inline function ‘librpl_read_atomic’ declared
but never defined
rpl.conv.h:2589: warning: inline function ‘librpl_scrutation_injection’
declared but never defined
rpl.conv.h:2477: warning: inline function ‘librpl_analyse_instruction’
declared but never defined
et j'en passe qui me polluent allègrement les logs de compilation.
Ça ne correspond pas à une erreur, j'ai un fichier d'en-tête qui
reprend toutes les fonctions 'inlinées', fonctions qui ne sont pas
utilisées dans tous mes fichiers de sources.
Je viens de lire (plusieurs fois) la doc de gcc et je n'ai pas
trouvé d'option empêchant l'affichage de ce genre de warning.
J'aimerais autant ne pas voir ces warnins qui ne sont pas des
erreurs pour mieux voir ce qui pourrait poser problème
Une idée ?
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

Poser une question


JKB
Salut,
Je n'ai pas connaissance d'options de GCC pour supprimer ce type
d'avertissement. Par contre, je ne sais pas si c'est la bonne idée
que tu attends, mais si tu déportes la définition de tes fonc tions
dans le fichier contenant leurs déclarations «inline», tu ne devrais
plus avoir de problème, hormis un peu plus de boulot... ;-)
Cordialement,
--
Jacques.
Re: [C99] gcc et fonctions 'inline',
Kojak ?crivait dans fr.comp.lang.c :
Je sais, mais dans mon cas, ce n'est vraiment pas simple...
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
En C99, inline implique que la fonction doit etre implementee dans le
fichier. Si tu ajoutes -pedantic-errors, tu devrais te taper une erreur a
la place du warning.
Pour ceux qui veulent une reference: 6.7.4/6 (c'est moi qui souligne avec
** la partie pertinente)
Any function with internal linkage can be an inline function. For a
function with external linkage, the following restrictions apply: *If a
function is declared with an inline function specifier, then it shall also
be defined in the same translation unit*. If all of the file scope
declarations for a function in a translation unit include the inline
function specifier without extern, then the definition in that translation
unit is an inline definition. An inline definition does not provide an
external definition for the function, and does not forbid an external
definition in another translation unit. An inline definition provides an
alternative to an external definition, which a translator may use to
implement any call to the function in the same translation unit. It is
unspecified whether a call to the function uses the inline definition or
the external definition.
(Pour ceux que ca interessent, il y a des differences entre le inline de C
et celui de C++).
A+
--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Par curiosité, quelle fonctionnalité présente dans C89 est manquante
dans C99 pour poser problème ?
Trois solutions (identiques dans leur effet) :
1) déclarer les fonctions sans inline.
2) déclarer les fonctions avec extern inline.
3) déclarer les fonctions avec extern (sans inline).
Si je comprends bien la norme C99, déclarer une fonction inline (sans
extern) implique que la définition de la fonction sera présente dans
l'unité de traduction.
--
Richard
Re: [C99] gcc et fonctions 'inline',
Richard ?crivait dans fr.comp.lang.c :
Dans mes .h, les fonctions sont déclarées comme
inline type fonction();
Les corps des fonctions sont
extern inline type fonction()
{
}
Ajouter extern au prototype ne résout rien. J'aimerais aussi garder
la directive inline. Je suppose que si je vire le inline des
fichiers .h, je n'aurai plus le warning, mais le résultat ne sera
plus le même.
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.