OVH Cloud OVH Cloud

inline de fonctions hors classe

13 réponses
Avatar
meow
Hello,

jusqu'=E0 aujourd'hui je pensais naivement qu'une fonction inlin=E9e
avait l'amabilit=E9 d'etre inlin=E9e lorsque le compilo le pouvait, et
non inlin=E9e autrement... mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas g=E9n=E9rer le code des fonctions inlin=E9es : leur
nom n'existe pas dans le .o

je m'esplique :
Je pensais :

fichier 1.C
inline int a(){code de a}
b(){ code de b dans lequel on appelle a() }

le fichier 1.h contiendrait les signatures de a() et de b(), le .o
contiendrait le code de a()
et celui de b() dans lequel l'appel =E0 a() serait remplac=E9 par le code
de a()


fichier 2.C
#include "fichier1.h"
c(){ code de b dans lequel on appelle a() }

le code de c() fait un appel =E0 a()


je crois compendre :
b() contient le code de a(), mais le .o ne contient pas de fonction
a(), du coup c() n'a que ses yeux pour pleurer...
C'est y bien comme =E7a que =E7a se passe ?

Je viens de coder une flopp=E9e de petites fonctions de calculs de
volumes et d'aires d'objets g=E9om=E9triques, un v=E9ritable plat de
spaghettis (enfin, c'est un arbre, y'a pas de cycle dans les appels)
d'appels de ces fonctions entre elle... Du coup, pour gagner en temps
je pensais les inliner... Mais du coup =E7a marche plus trop :D
J'ai pens=E9 =E0 un "workaround" simpliste :
a chaque fonction inlin=E9e ai() j'associerai une non inlin=E9e
bi() { return ai(); }
dont je fournirai la signature dans le .h
C'est valable ?

3 réponses

1 2
Avatar
kanze
Julien Lamy wrote:
Dans la pratique, en tout cas -- selon la norme, il suffit
de les déclarer export, et ce n'est plus nécessaire.)


export... Je ne suis pas certain de comprendre la sémantique de ce mot
clé... Visiblement ça sert à signifier que le modèle (template) sur
lequel porte export est rendu accessible à toute autre unité de
traduction...
Si je comprends bien, ça me permet entre autre, de "masquer" la
définition de fonctions (ou de classes ?) templates en les faisant
dans un .C au lieu d'un .h ...?


Oui, si j'ai aussi bien compris. Peu de compilateurs
l'implantent (à ma connaissance, Comeau est le seul), et je
crois bien que le comité parlait de le supprimer dans la
prochaine version du langage.


Il y a Intel aussi.

Microsoft a proposé au comité de le supprimer, mais le comité
n'était pas du tout d'accord.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
kanze
Fabien LE LEZ wrote:
On Fri, 28 Jul 2006 10:34:25 -0400, Julien Lamy :

Certes, elle provient de Sutter bossant actuellement chez
Microsoft,


Il me semble avoir entendu dire que Sutter a raconté pas mal
de conneries à propos d'export.

Si j'ai bien compris, quand Comeau a commencé à essayer
d'implémenter export, il a eu un peu de mal, et a fait part de
ses doutes à Sutter. Entre-temps, Comeau s'est aperçu que ses
craintes étaient infondées, et que export est bien
implémentable, et fonctionne bien une fois implémenté. Mais
Sutter ne s'est pas mis à la page, et continue à clamer que
export est un très mauvaise idée, qui ne marchera jamais.


C'est à peu près ça. Ce qui importe, au fond, c'est que quand le
comité a discuté cette papière, pratiquement personne n'en était
d'accord avec le contenu.

Note que je ne fais que répéter ce que j'ai entendu ici ou là
(principalement ici, d'ailleurs).

Je ne sais pas bien quel est le niveau d'indépendance entre
Sutter et Microsoft[*] ; quelqu'un pourrait-il me renseigner ?

[*] Dans les deux sens, d'ailleurs : la politique commerciale
de MS peut influer sur les propos de Sutter, mais l'avis
(éventuellement erroné) de Sutter peut influer sur les
décisions de MS.


Il y a un rapport employeur/employé, au moins. Ce qui est
certain, c'est donc que si Microsoft dit qu'il ne faut pas dire
quelque chose, Sutter ne le dirait pas. Et qu'ils le paient bien
pour quelque chose, et je doute que ce soit des lignes de code.
S'ils ne l'écoutent pas, c'est qu'ils jettent de l'argent par la
fenêtre, ce qui m'étonnerait un peu d'eux.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On Fri, 28 Jul 2006 10:34:25 -0400, Julien Lamy :
|
| >Certes, elle provient de Sutter bossant actuellement chez Microsoft,
|
| Il me semble avoir entendu dire que Sutter a raconté pas mal de
| conneries à propos d'export.
| Si j'ai bien compris, quand Comeau a commencé à essayer d'implémenter
| export,

En réalité, Comeau est un « packager » de EDG

http://www.edg.com/

« export » a été implémenté par trois personnes -- qui ont *en même*
implémenté le front-end de Java et autres bricoles.

-- Gaby
1 2