Hello,
jusqu'à aujourd'hui je pensais naivement qu'une fonction inlinée
avait l'amabilité d'etre inlinée lorsque le compilo le pouvait, et
non inlinée autrement... mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé 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 à 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 ça que ça se passe ?
Je viens de coder une floppée de petites fonctions de calculs de
volumes et d'aires d'objets géométriques, un véritable 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 ça marche plus trop :D
J'ai pensé à un "workaround" simpliste :
a chaque fonction inlinée ai() j'associerai une non inlinée
bi() { return ai(); }
dont je fournirai la signature dans le .h
C'est valable ?
Hello,
jusqu'à aujourd'hui je pensais naivement qu'une fonction inlinée
avait l'amabilité d'etre inlinée lorsque le compilo le pouvait, et
non inlinée autrement... mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé 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 à 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 ça que ça se passe ?
Je viens de coder une floppée de petites fonctions de calculs de
volumes et d'aires d'objets géométriques, un véritable 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 ça marche plus trop :D
J'ai pensé à un "workaround" simpliste :
a chaque fonction inlinée ai() j'associerai une non inlinée
bi() { return ai(); }
dont je fournirai la signature dans le .h
C'est valable ?
Hello,
jusqu'à aujourd'hui je pensais naivement qu'une fonction inlinée
avait l'amabilité d'etre inlinée lorsque le compilo le pouvait, et
non inlinée autrement... mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé 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 à 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 ça que ça se passe ?
Je viens de coder une floppée de petites fonctions de calculs de
volumes et d'aires d'objets géométriques, un véritable 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 ça marche plus trop :D
J'ai pensé à un "workaround" simpliste :
a chaque fonction inlinée ai() j'associerai une non inlinée
bi() { return ai(); }
dont je fournirai la signature dans le .h
C'est valable ?
Hello,
jusqu'à aujourd'hui je pensais naivement qu'une fonction inlinée
avait l'amabilité d'etre inlinée lorsque le compilo le pouvait, et
non inlinée autrement... mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : leur
nom n'existe pas dans le .o
mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé 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 à a()
Hello,
jusqu'à aujourd'hui je pensais naivement qu'une fonction inlinée
avait l'amabilité d'etre inlinée lorsque le compilo le pouvait, et
non inlinée autrement... mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : leur
nom n'existe pas dans le .o
mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé 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 à a()
Hello,
jusqu'à aujourd'hui je pensais naivement qu'une fonction inlinée
avait l'amabilité d'etre inlinée lorsque le compilo le pouvait, et
non inlinée autrement... mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : leur
nom n'existe pas dans le .o
mais il semblerait qu'il n'en soit rien, mon
compilo semble ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé 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 à a()
jusqu'à aujourd'hui je pensais naivement qu'une fonction
inlinée avait l'amabilité d'etre inlinée lorsque le
compilo le pouvait, et non inlinée autrement... mais il
semblerait qu'il n'en soit rien, mon compilo semble ne pas
générer le code des fonctions inlinées : leur nom n'existe
pas dans le .o
Pas tout à fait. Une fonction déclarée inline est réellement
inlinée si le compilateur le peut et s'il le veut bien, mais
rien ne l'y oblige. En particulier, si il trouve que la
fonction est trop grosse et appelée trop souvent, il risque de
ne pas l'inliner.
mais il semblerait qu'il n'en soit rien, mon compilo semble
ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé par le co de
de a()
fichier 2.C
#include "fichier1.h"
c(){ code de b dans lequel on appelle a() }
le code de c() fait un appel à a()
Le mot clé inline doit être mis au niveau de la déclaration
(le .h), pas dans le .C, et la définition de la fonction doit
être présente dans toutes les unités de compilations
(autrement dit il faut la mettre aussi dans le .h).
jusqu'à aujourd'hui je pensais naivement qu'une fonction
inlinée avait l'amabilité d'etre inlinée lorsque le
compilo le pouvait, et non inlinée autrement... mais il
semblerait qu'il n'en soit rien, mon compilo semble ne pas
générer le code des fonctions inlinées : leur nom n'existe
pas dans le .o
Pas tout à fait. Une fonction déclarée inline est réellement
inlinée si le compilateur le peut et s'il le veut bien, mais
rien ne l'y oblige. En particulier, si il trouve que la
fonction est trop grosse et appelée trop souvent, il risque de
ne pas l'inliner.
mais il semblerait qu'il n'en soit rien, mon compilo semble
ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé par le co de
de a()
fichier 2.C
#include "fichier1.h"
c(){ code de b dans lequel on appelle a() }
le code de c() fait un appel à a()
Le mot clé inline doit être mis au niveau de la déclaration
(le .h), pas dans le .C, et la définition de la fonction doit
être présente dans toutes les unités de compilations
(autrement dit il faut la mettre aussi dans le .h).
jusqu'à aujourd'hui je pensais naivement qu'une fonction
inlinée avait l'amabilité d'etre inlinée lorsque le
compilo le pouvait, et non inlinée autrement... mais il
semblerait qu'il n'en soit rien, mon compilo semble ne pas
générer le code des fonctions inlinées : leur nom n'existe
pas dans le .o
Pas tout à fait. Une fonction déclarée inline est réellement
inlinée si le compilateur le peut et s'il le veut bien, mais
rien ne l'y oblige. En particulier, si il trouve que la
fonction est trop grosse et appelée trop souvent, il risque de
ne pas l'inliner.
mais il semblerait qu'il n'en soit rien, mon compilo semble
ne pas générer le code des fonctions inlinées : 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 à a() serait remplacé par le co de
de a()
fichier 2.C
#include "fichier1.h"
c(){ code de b dans lequel on appelle a() }
le code de c() fait un appel à a()
Le mot clé inline doit être mis au niveau de la déclaration
(le .h), pas dans le .C, et la définition de la fonction doit
être présente dans toutes les unités de compilations
(autrement dit il faut la mettre aussi dans le .h).
extern void g() ;
euh... il sert vraiment à quelque chose le "extern" ? Je veux dire :
Dans la pratique, en tout cas -- selon la norme, il suffit de les décla rer export, et ce n'est
plus nécessaire.)
export... Je ne suis pas certain de comprendre la sémantique de ce mot
extern void g() ;
euh... il sert vraiment à quelque chose le "extern" ? Je veux dire :
Dans la pratique, en tout cas -- selon la norme, il suffit de les décla rer export, et ce n'est
plus nécessaire.)
export... Je ne suis pas certain de comprendre la sémantique de ce mot
extern void g() ;
euh... il sert vraiment à quelque chose le "extern" ? Je veux dire :
Dans la pratique, en tout cas -- selon la norme, il suffit de les décla rer export, et ce n'est
plus nécessaire.)
export... Je ne suis pas certain de comprendre la sémantique de ce mot
Merci à tous pour vos réponses. Je retiens donc que :
- La norme dit qu'une fonction inlinée doit etre *définie* partout
où elle est utilisée, donc on aura tendance à les placer dans des .h
- le mot clé inline porte sur la *déclaration* de la fonction, et
d'après Kanze, sur nimporte laquelle de ces déclarations.
Juste pour etre certain de bien comprendre le terme : "translation
unit" ~ unité de traduction ~ nimporte quel machin qui va générer un
.o, par exemple un .c avec tous ses includes mis bout à bout.
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 ...?
Merci à tous pour vos réponses. Je retiens donc que :
- La norme dit qu'une fonction inlinée doit etre *définie* partout
où elle est utilisée, donc on aura tendance à les placer dans des .h
- le mot clé inline porte sur la *déclaration* de la fonction, et
d'après Kanze, sur nimporte laquelle de ces déclarations.
Juste pour etre certain de bien comprendre le terme : "translation
unit" ~ unité de traduction ~ nimporte quel machin qui va générer un
.o, par exemple un .c avec tous ses includes mis bout à bout.
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 ...?
Merci à tous pour vos réponses. Je retiens donc que :
- La norme dit qu'une fonction inlinée doit etre *définie* partout
où elle est utilisée, donc on aura tendance à les placer dans des .h
- le mot clé inline porte sur la *déclaration* de la fonction, et
d'après Kanze, sur nimporte laquelle de ces déclarations.
Juste pour etre certain de bien comprendre le terme : "translation
unit" ~ unité de traduction ~ nimporte quel machin qui va générer un
.o, par exemple un .c avec tous ses includes mis bout à bout.
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.
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.
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.
Julien Lamy wrote: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.
En fait, c'est surtout Microsoft qui voudrait que cela ne fasse plus
partie de la norme afin de ne pas avoir à l'implémenter.
Il est évident que les gens de Comeau ne sont pas d'accord, eux qui se
sont donné la peine de l'implémenter.
Par ailleurs, il y a beaucoup de demande de la part des utilisateurs
pour une fonctionnalité de ce type, permettant de ne pas livrer le code
source des templates. Il serait donc fort dommage que cela disparaisse
de la norme, surtout pour les mauvaises raisons invoquées par Microsoft
(raisons de faisabilité, je crois, niées par Comeau qui est un peu mieux
placé pour en parler).
Julien Lamy wrote:
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.
En fait, c'est surtout Microsoft qui voudrait que cela ne fasse plus
partie de la norme afin de ne pas avoir à l'implémenter.
Il est évident que les gens de Comeau ne sont pas d'accord, eux qui se
sont donné la peine de l'implémenter.
Par ailleurs, il y a beaucoup de demande de la part des utilisateurs
pour une fonctionnalité de ce type, permettant de ne pas livrer le code
source des templates. Il serait donc fort dommage que cela disparaisse
de la norme, surtout pour les mauvaises raisons invoquées par Microsoft
(raisons de faisabilité, je crois, niées par Comeau qui est un peu mieux
placé pour en parler).
Julien Lamy wrote: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.
En fait, c'est surtout Microsoft qui voudrait que cela ne fasse plus
partie de la norme afin de ne pas avoir à l'implémenter.
Il est évident que les gens de Comeau ne sont pas d'accord, eux qui se
sont donné la peine de l'implémenter.
Par ailleurs, il y a beaucoup de demande de la part des utilisateurs
pour une fonctionnalité de ce type, permettant de ne pas livrer le code
source des templates. Il serait donc fort dommage que cela disparaisse
de la norme, surtout pour les mauvaises raisons invoquées par Microsoft
(raisons de faisabilité, je crois, niées par Comeau qui est un peu mieux
placé pour en parler).
Certes, elle provient de Sutter bossant actuellement chez Microsoft,
Certes, elle provient de Sutter bossant actuellement chez Microsoft,
Certes, elle provient de Sutter bossant actuellement chez Microsoft,
Julien Lamy wrote: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.
En fait, c'est surtout Microsoft qui voudrait que cela ne fasse plus
partie de la norme afin de ne pas avoir à l'implémenter.
Il est évident que les gens de Comeau ne sont pas d'accord, eux qui se
sont donné la peine de l'implémenter.
Par ailleurs, il y a beaucoup de demande de la part des utilisateurs
pour une fonctionnalité de ce type, permettant de ne pas livrer le code
source des templates. Il serait donc fort dommage que cela disparaisse
de la norme, surtout pour les mauvaises raisons invoquées par Microsoft
(raisons de faisabilité, je crois, niées par Comeau qui est un peu mieux
placé pour en parler).
Je me référais à cette note
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1426.pdf
Certes, elle provient de Sutter bossant actuellement chez Microsoft, mais
les remarques en page 3 des gens de EDG (qui ont implanté export) semblent
aller vers la suppression. Y'a plus qu'à attendre la prochaine version du
standard, ou l'avis éclairé de quelqu'un fréquentant de près le comité.
Julien Lamy wrote:
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.
En fait, c'est surtout Microsoft qui voudrait que cela ne fasse plus
partie de la norme afin de ne pas avoir à l'implémenter.
Il est évident que les gens de Comeau ne sont pas d'accord, eux qui se
sont donné la peine de l'implémenter.
Par ailleurs, il y a beaucoup de demande de la part des utilisateurs
pour une fonctionnalité de ce type, permettant de ne pas livrer le code
source des templates. Il serait donc fort dommage que cela disparaisse
de la norme, surtout pour les mauvaises raisons invoquées par Microsoft
(raisons de faisabilité, je crois, niées par Comeau qui est un peu mieux
placé pour en parler).
Je me référais à cette note
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1426.pdf
Certes, elle provient de Sutter bossant actuellement chez Microsoft, mais
les remarques en page 3 des gens de EDG (qui ont implanté export) semblent
aller vers la suppression. Y'a plus qu'à attendre la prochaine version du
standard, ou l'avis éclairé de quelqu'un fréquentant de près le comité.
Julien Lamy wrote: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.
En fait, c'est surtout Microsoft qui voudrait que cela ne fasse plus
partie de la norme afin de ne pas avoir à l'implémenter.
Il est évident que les gens de Comeau ne sont pas d'accord, eux qui se
sont donné la peine de l'implémenter.
Par ailleurs, il y a beaucoup de demande de la part des utilisateurs
pour une fonctionnalité de ce type, permettant de ne pas livrer le code
source des templates. Il serait donc fort dommage que cela disparaisse
de la norme, surtout pour les mauvaises raisons invoquées par Microsoft
(raisons de faisabilité, je crois, niées par Comeau qui est un peu mieux
placé pour en parler).
Je me référais à cette note
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1426.pdf
Certes, elle provient de Sutter bossant actuellement chez Microsoft, mais
les remarques en page 3 des gens de EDG (qui ont implanté export) semblent
aller vers la suppression. Y'a plus qu'à attendre la prochaine version du
standard, ou l'avis éclairé de quelqu'un fréquentant de près le comité.
Merci à tous pour vos réponses. Je retiens donc que :
- La norme dit qu'une fonction inlinée doit etre *définie* partout
où elle est utilisée, donc on aura tendance à les placer dans des .h
- le mot clé inline porte sur la *déclaration* de la fonction, et
d'après Kanze, sur nimporte laquelle de ces déclarations.
Juste pour etre certain de bien comprendre le terme :
"translation unit" ~ unité de traduction ~ nimporte quel
machin qui va générer un .o, par exemple un .c avec tous ses
includes mis bout à bout.
@Kanzeextern void g() ;
euh... il sert vraiment à quelque chose le "extern" ? Je veux dire :
extern int x;
ok, ça sert à proteger la valeur de x : on précise que ce x là est
défini ailleur et qu'on l'aura à l'édition de lien, sans quoi le
compilo aurait la mauvaise idée de prendre cette déclaration pour une
définition d'un x local et de valeur 0... Mais dans le cas d'une
fonction ??? O_o
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...
Merci à tous pour vos réponses. Je retiens donc que :
- La norme dit qu'une fonction inlinée doit etre *définie* partout
où elle est utilisée, donc on aura tendance à les placer dans des .h
- le mot clé inline porte sur la *déclaration* de la fonction, et
d'après Kanze, sur nimporte laquelle de ces déclarations.
Juste pour etre certain de bien comprendre le terme :
"translation unit" ~ unité de traduction ~ nimporte quel
machin qui va générer un .o, par exemple un .c avec tous ses
includes mis bout à bout.
@Kanze
extern void g() ;
euh... il sert vraiment à quelque chose le "extern" ? Je veux dire :
extern int x;
ok, ça sert à proteger la valeur de x : on précise que ce x là est
défini ailleur et qu'on l'aura à l'édition de lien, sans quoi le
compilo aurait la mauvaise idée de prendre cette déclaration pour une
définition d'un x local et de valeur 0... Mais dans le cas d'une
fonction ??? O_o
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...
Merci à tous pour vos réponses. Je retiens donc que :
- La norme dit qu'une fonction inlinée doit etre *définie* partout
où elle est utilisée, donc on aura tendance à les placer dans des .h
- le mot clé inline porte sur la *déclaration* de la fonction, et
d'après Kanze, sur nimporte laquelle de ces déclarations.
Juste pour etre certain de bien comprendre le terme :
"translation unit" ~ unité de traduction ~ nimporte quel
machin qui va générer un .o, par exemple un .c avec tous ses
includes mis bout à bout.
@Kanzeextern void g() ;
euh... il sert vraiment à quelque chose le "extern" ? Je veux dire :
extern int x;
ok, ça sert à proteger la valeur de x : on précise que ce x là est
défini ailleur et qu'on l'aura à l'édition de lien, sans quoi le
compilo aurait la mauvaise idée de prendre cette déclaration pour une
définition d'un x local et de valeur 0... Mais dans le cas d'une
fonction ??? O_o
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...