GNT sans publicité, site mobile, fonctionnalitées exclusives...

[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.
Lire les 33 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 7
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Kojak
Le #22095741
Le Mon, 10 May 2010 08:28:40 +0000 (UTC),
JKB
[...]
rpl.conv.h:2811: warning: inline function
‘librpl_write_atomic’ declared but never defined
[...]
J'aimerais autant ne pas voir ces warnins qui ne sont pas des
erreurs pour mieux voir ce qui pourrait poser problème...



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.
JKB
Le #22095921
Le 10-05-2010, ? propos de
Re: [C99] gcc et fonctions 'inline',
Kojak ?crivait dans fr.comp.lang.c :
Le Mon, 10 May 2010 08:28:40 +0000 (UTC),
JKB
[...]
rpl.conv.h:2811: warning: inline function
‘librpl_write_atomic’ declared but never defined
[...]
J'aimerais autant ne pas voir ces warnins qui ne sont pas des
erreurs pour mieux voir ce qui pourrait poser problème...



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 fonctions
dans le fichier contenant leurs déclarations «inline», tu ne devrais
plus avoir de problème, hormis un peu plus de boulot... ;-)



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.
Jean-Marc Bourguet
Le #22096021
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 s ystè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_inje ction’
declared but never defined
rpl.conv.h:2477: warning: inline function ‘librpl_analyse_instruc tion’
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 ?



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
Richard
Le #22096011
Le 10/05/2010 10:28, JKB a écrit :
Bonjour à tous,

Je suis en train de modifier les sources d'un programme pour le
rendre compilable par un compilo C99



Par curiosité, quelle fonctionnalité présente dans C89 est manquante
dans C99 pour poser problème ?

(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 ?



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
JKB
Le #22096271
Le 10-05-2010, ? propos de
Re: [C99] gcc et fonctions 'inline',
Richard ?crivait dans fr.comp.lang.c :
Le 10/05/2010 10:28, JKB a écrit :
Bonjour à tous,

Je suis en train de modifier les sources d'un programme pour le
rendre compilable par un compilo C99



Par curiosité, quelle fonctionnalité présente dans C89 est manquante
dans C99 pour poser problème ?

(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 ?



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).



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.
Publicité
Suivre les réponses
Poster une réponse
Anonyme