"Michel Michaud" writes:Dans la norme ok, mais dans la pratique je n'ai vu que des
compilateurs qui avaient un comportement qui faisait que
inline entrainait static, c'est à dire réduction de la portée
de la fonction.
Ça fonctionne comme j'ai décrit avec VC 7.1...
oui mais non.C'est surprenant que ça ne fonctionne pas avec g++
Parce que g++ implémente ce qu'exige la norme sur ce point.
C'est effectivement étrange d'implémenter ce que la norme
stipule, d'ailleurs je ne comprends pas pourquoi on a une norme.
"Michel Michaud" <mm@gdzid.com> writes:
Dans la norme ok, mais dans la pratique je n'ai vu que des
compilateurs qui avaient un comportement qui faisait que
inline entrainait static, c'est à dire réduction de la portée
de la fonction.
Ça fonctionne comme j'ai décrit avec VC 7.1...
oui mais non.
C'est surprenant que ça ne fonctionne pas avec g++
Parce que g++ implémente ce qu'exige la norme sur ce point.
C'est effectivement étrange d'implémenter ce que la norme
stipule, d'ailleurs je ne comprends pas pourquoi on a une norme.
"Michel Michaud" writes:Dans la norme ok, mais dans la pratique je n'ai vu que des
compilateurs qui avaient un comportement qui faisait que
inline entrainait static, c'est à dire réduction de la portée
de la fonction.
Ça fonctionne comme j'ai décrit avec VC 7.1...
oui mais non.C'est surprenant que ça ne fonctionne pas avec g++
Parce que g++ implémente ce qu'exige la norme sur ce point.
C'est effectivement étrange d'implémenter ce que la norme
stipule, d'ailleurs je ne comprends pas pourquoi on a une norme.
"Michel Michaud" writes:Je ne comprends pas pourquoi tu utilises un ton sarcastique au
lieu de clarifier le point en litige.
Je crois que j'ai clairifié le point.
Comme je l'ai indiqué dans
les messages que tu as lus, j'ai l'impression qu'une discussion
sur un forum m'a laissé une impression fausse.
Oui, mais tu ne me dis pas grand chose à part que quelqu'un
aurait dit quelque chose, mais quoi exactement ?
En lisant tes
trois messages, je ne suis toujours pas sûr... En particulier,
ceci me semble contradictoire avec le reste :
Hue???
Mais un des messages que tu as postés containait une erreur.
Si tu déclares une fonction (avec linkage externe) inline dans
le programme, alors toutes ses déclarations doivent contenir
inline.
- les fonctions inline ont quand même un linkage externe, ce
qui assure, entre autres, qu'il n'y a qu'une seule copie des
variables statiques qui y sont définies.
Inline n'affecte pas le linkage.
"Michel Michaud" <mm@gdzid.com> writes:
Je ne comprends pas pourquoi tu utilises un ton sarcastique au
lieu de clarifier le point en litige.
Je crois que j'ai clairifié le point.
Comme je l'ai indiqué dans
les messages que tu as lus, j'ai l'impression qu'une discussion
sur un forum m'a laissé une impression fausse.
Oui, mais tu ne me dis pas grand chose à part que quelqu'un
aurait dit quelque chose, mais quoi exactement ?
En lisant tes
trois messages, je ne suis toujours pas sûr... En particulier,
ceci me semble contradictoire avec le reste :
Hue???
Mais un des messages que tu as postés containait une erreur.
Si tu déclares une fonction (avec linkage externe) inline dans
le programme, alors toutes ses déclarations doivent contenir
inline.
- les fonctions inline ont quand même un linkage externe, ce
qui assure, entre autres, qu'il n'y a qu'une seule copie des
variables statiques qui y sont définies.
Inline n'affecte pas le linkage.
"Michel Michaud" writes:Je ne comprends pas pourquoi tu utilises un ton sarcastique au
lieu de clarifier le point en litige.
Je crois que j'ai clairifié le point.
Comme je l'ai indiqué dans
les messages que tu as lus, j'ai l'impression qu'une discussion
sur un forum m'a laissé une impression fausse.
Oui, mais tu ne me dis pas grand chose à part que quelqu'un
aurait dit quelque chose, mais quoi exactement ?
En lisant tes
trois messages, je ne suis toujours pas sûr... En particulier,
ceci me semble contradictoire avec le reste :
Hue???
Mais un des messages que tu as postés containait une erreur.
Si tu déclares une fonction (avec linkage externe) inline dans
le programme, alors toutes ses déclarations doivent contenir
inline.
- les fonctions inline ont quand même un linkage externe, ce
qui assure, entre autres, qu'il n'y a qu'une seule copie des
variables statiques qui y sont définies.
Inline n'affecte pas le linkage.
Dans news:, Jean-Marc"Michel Michaud" writes:Je n'ai pas le temps de vérifier ce cas dans la
norme, mais à tout le moins, ceci devrait fonctionner :
// A.cpp
inline void A()
{}
// B.cpp
void A();
int main()
{
A();
}
Non. Il faut avoir une définition dans toute unité où la
fonction est utilisée (3.2/3).
C'est ce que je comprenais aussi jusqu'à récemment. Mais j'ai
pris une note disant que ce n'est pas le cas suite à une
discussion vue sur un forum (je n'ai pas noté la référence
exacte). Y aurait-il une correction à la norme (ou un DR) qui
vient changer ce qu'on peut lire à 3.2/3 ?
(ça me ferait plaisir de me tromper, car j'ai pris la note pour
dire que je devais corriger ce que mes livres indiquent !)
Dans news:g40j8c.kh.ln@news.bourguet.org, Jean-Marc
"Michel Michaud" <mm@gdzid.com> writes:
Je n'ai pas le temps de vérifier ce cas dans la
norme, mais à tout le moins, ceci devrait fonctionner :
// A.cpp
inline void A()
{}
// B.cpp
void A();
int main()
{
A();
}
Non. Il faut avoir une définition dans toute unité où la
fonction est utilisée (3.2/3).
C'est ce que je comprenais aussi jusqu'à récemment. Mais j'ai
pris une note disant que ce n'est pas le cas suite à une
discussion vue sur un forum (je n'ai pas noté la référence
exacte). Y aurait-il une correction à la norme (ou un DR) qui
vient changer ce qu'on peut lire à 3.2/3 ?
(ça me ferait plaisir de me tromper, car j'ai pris la note pour
dire que je devais corriger ce que mes livres indiquent !)
Dans news:, Jean-Marc"Michel Michaud" writes:Je n'ai pas le temps de vérifier ce cas dans la
norme, mais à tout le moins, ceci devrait fonctionner :
// A.cpp
inline void A()
{}
// B.cpp
void A();
int main()
{
A();
}
Non. Il faut avoir une définition dans toute unité où la
fonction est utilisée (3.2/3).
C'est ce que je comprenais aussi jusqu'à récemment. Mais j'ai
pris une note disant que ce n'est pas le cas suite à une
discussion vue sur un forum (je n'ai pas noté la référence
exacte). Y aurait-il une correction à la norme (ou un DR) qui
vient changer ce qu'on peut lire à 3.2/3 ?
(ça me ferait plaisir de me tromper, car j'ai pris la note pour
dire que je devais corriger ce que mes livres indiquent !)
Michaël Delva wrote:J'ai testé ;-)
Les implémentations des fonctions sont dans le CPP (Example d'une
fonction)
inline char Base64::Encode(unsigned char uc)
{
Une fonction inline voit sa portée limitée au fichier en cours, donc
il faut qu'elle soit définie dans le .h
Michaël Delva wrote:
J'ai testé ;-)
Les implémentations des fonctions sont dans le CPP (Example d'une
fonction)
inline char Base64::Encode(unsigned char uc)
{
Une fonction inline voit sa portée limitée au fichier en cours, donc
il faut qu'elle soit définie dans le .h
Michaël Delva wrote:J'ai testé ;-)
Les implémentations des fonctions sont dans le CPP (Example d'une
fonction)
inline char Base64::Encode(unsigned char uc)
{
Une fonction inline voit sa portée limitée au fichier en cours, donc
il faut qu'elle soit définie dans le .h
Dans news:40acef68$0$21569$, AnthonyMichaël Delva wrote:J'ai testé ;-)
Les implémentations des fonctions sont dans le CPP (Example d'une
fonction)
inline char Base64::Encode(unsigned char uc)
{
Une fonction inline voit sa portée limitée au fichier en cours, donc
il faut qu'elle soit définie dans le .h
Pas vraiment il me semble, en tout cas pas pour les fonctions libres
où le inline laisse le « external linkage »...
Mais comme ça ne fonctionne pas pour Michaël, soit ce n'est pas le cas
pour les fonctions membres, soit son compilateur n'est pas à jour. Je
n'ai pas le temps de vérifier ce cas dans la norme, mais à tout le
moins, ceci devrait fonctionner :
// A.cpp
inline void A()
{}
// B.cpp
void A();
int main()
{
A();
}
Évidemment, il est possible que le inline ne soit pas respecté au
niveau de la génération du code...
Dans news:40acef68$0$21569$626a14ce@news.free.fr, Anthony
Michaël Delva wrote:
J'ai testé ;-)
Les implémentations des fonctions sont dans le CPP (Example d'une
fonction)
inline char Base64::Encode(unsigned char uc)
{
Une fonction inline voit sa portée limitée au fichier en cours, donc
il faut qu'elle soit définie dans le .h
Pas vraiment il me semble, en tout cas pas pour les fonctions libres
où le inline laisse le « external linkage »...
Mais comme ça ne fonctionne pas pour Michaël, soit ce n'est pas le cas
pour les fonctions membres, soit son compilateur n'est pas à jour. Je
n'ai pas le temps de vérifier ce cas dans la norme, mais à tout le
moins, ceci devrait fonctionner :
// A.cpp
inline void A()
{}
// B.cpp
void A();
int main()
{
A();
}
Évidemment, il est possible que le inline ne soit pas respecté au
niveau de la génération du code...
Dans news:40acef68$0$21569$, AnthonyMichaël Delva wrote:J'ai testé ;-)
Les implémentations des fonctions sont dans le CPP (Example d'une
fonction)
inline char Base64::Encode(unsigned char uc)
{
Une fonction inline voit sa portée limitée au fichier en cours, donc
il faut qu'elle soit définie dans le .h
Pas vraiment il me semble, en tout cas pas pour les fonctions libres
où le inline laisse le « external linkage »...
Mais comme ça ne fonctionne pas pour Michaël, soit ce n'est pas le cas
pour les fonctions membres, soit son compilateur n'est pas à jour. Je
n'ai pas le temps de vérifier ce cas dans la norme, mais à tout le
moins, ceci devrait fonctionner :
// A.cpp
inline void A()
{}
// B.cpp
void A();
int main()
{
A();
}
Évidemment, il est possible que le inline ne soit pas respecté au
niveau de la génération du code...
Anthony Fleury writes:
[...]
| 3.2 point 3 : "An inline function shall be defined in every
| translation unit in which it is used"
| Pourquoi cette restriction ??
Il faut une exigence quelque part. Oui bien tu la mets sur
l'utilisateur ou bien tu la mets sur l'implémenteur (ou parfois les
deux). Cela demande plus d'infrastructure d'inliner trans uniter de
traduction que d'avoir le corps disponible dans chaque unité de
traduction.
Si tu demandes trop de travail aux implémenteurs, ils ne feront qu'à
leurs têtes et il peut arriver qu'ils fassent n'importe quoi.
Et que tu n'aies pas la fonctionnalité que tu veux.
Alors, tu demandes un peu d'effort de la part de l'utilisateur.
N'oublie pas, « inline » a été introduit en C with Classes vers 1981
avec l'exigence que ce soit utile ici et maintenant. 25 ans plus tard,
peu de progrès ont été faits :-(
Anthony Fleury <fleury_anthony@_hotmail_.com> writes:
[...]
| 3.2 point 3 : "An inline function shall be defined in every
| translation unit in which it is used"
| Pourquoi cette restriction ??
Il faut une exigence quelque part. Oui bien tu la mets sur
l'utilisateur ou bien tu la mets sur l'implémenteur (ou parfois les
deux). Cela demande plus d'infrastructure d'inliner trans uniter de
traduction que d'avoir le corps disponible dans chaque unité de
traduction.
Si tu demandes trop de travail aux implémenteurs, ils ne feront qu'à
leurs têtes et il peut arriver qu'ils fassent n'importe quoi.
Et que tu n'aies pas la fonctionnalité que tu veux.
Alors, tu demandes un peu d'effort de la part de l'utilisateur.
N'oublie pas, « inline » a été introduit en C with Classes vers 1981
avec l'exigence que ce soit utile ici et maintenant. 25 ans plus tard,
peu de progrès ont été faits :-(
Anthony Fleury writes:
[...]
| 3.2 point 3 : "An inline function shall be defined in every
| translation unit in which it is used"
| Pourquoi cette restriction ??
Il faut une exigence quelque part. Oui bien tu la mets sur
l'utilisateur ou bien tu la mets sur l'implémenteur (ou parfois les
deux). Cela demande plus d'infrastructure d'inliner trans uniter de
traduction que d'avoir le corps disponible dans chaque unité de
traduction.
Si tu demandes trop de travail aux implémenteurs, ils ne feront qu'à
leurs têtes et il peut arriver qu'ils fassent n'importe quoi.
Et que tu n'aies pas la fonctionnalité que tu veux.
Alors, tu demandes un peu d'effort de la part de l'utilisateur.
N'oublie pas, « inline » a été introduit en C with Classes vers 1981
avec l'exigence que ce soit utile ici et maintenant. 25 ans plus tard,
peu de progrès ont été faits :-(
"Michel Michaud" writes:
[...]
| > Dans la norme ok, mais dans la pratique je n'ai vu que des
| > compilateurs qui avaient un comportement qui faisait que inline
| > entrainait static, c'est à dire réduction de la portée de la
| > fonction.
| Ça fonctionne comme j'ai décrit avec VC 7.1...
oui mais non.
| C'est surprenant que ça ne fonctionne pas avec g++
Parce que g++ implémente ce qu'exige la norme sur ce point.
C'est effectivement étrange d'implémenter ce que la norme stipule,
d'ailleurs je ne comprends pas pourquoi on a une norme.
"Michel Michaud" <mm@gdzid.com> writes:
[...]
| > Dans la norme ok, mais dans la pratique je n'ai vu que des
| > compilateurs qui avaient un comportement qui faisait que inline
| > entrainait static, c'est à dire réduction de la portée de la
| > fonction.
| Ça fonctionne comme j'ai décrit avec VC 7.1...
oui mais non.
| C'est surprenant que ça ne fonctionne pas avec g++
Parce que g++ implémente ce qu'exige la norme sur ce point.
C'est effectivement étrange d'implémenter ce que la norme stipule,
d'ailleurs je ne comprends pas pourquoi on a une norme.
"Michel Michaud" writes:
[...]
| > Dans la norme ok, mais dans la pratique je n'ai vu que des
| > compilateurs qui avaient un comportement qui faisait que inline
| > entrainait static, c'est à dire réduction de la portée de la
| > fonction.
| Ça fonctionne comme j'ai décrit avec VC 7.1...
oui mais non.
| C'est surprenant que ça ne fonctionne pas avec g++
Parce que g++ implémente ce qu'exige la norme sur ce point.
C'est effectivement étrange d'implémenter ce que la norme stipule,
d'ailleurs je ne comprends pas pourquoi on a une norme.