Laurent Deniau wrote:Jean-Marc Bourguet wrote:Quand un typedef avait le meme identifieur que le tag d'une struct,
c'etait un typedef sur la struct. Donc pas de probleme.
Si ca compile pas en C++ et c'est legal (voir courant) en C.
Ca m'a pourtant l'air de compiler en C++. En fait je suis dans ma tête
A quels problemes *silencieux* fais-tu allusion?
Pour la plupart ils ne sont pas silencieux mais demande du travail.
cf mon autre post pour les problemes
Je ne sais pas si c'est parce que je me suis mis au C++ un peu plus
sérieusement et donc ne suis plus vraiment objectif sur ce sujet, mais je
trouve que tous les exemples de codes qui ne fonctionnent pas en C++ et
fonctionnent en C sont du « mauvais C ». (mis à part le cast des void*
forcé par le C++)
Laurent Deniau wrote:
Jean-Marc Bourguet wrote:
Quand un typedef avait le meme identifieur que le tag d'une struct,
c'etait un typedef sur la struct. Donc pas de probleme.
Si ca compile pas en C++ et c'est legal (voir courant) en C.
Ca m'a pourtant l'air de compiler en C++. En fait je suis dans ma tête
A quels problemes *silencieux* fais-tu allusion?
Pour la plupart ils ne sont pas silencieux mais demande du travail.
cf mon autre post pour les problemes
Je ne sais pas si c'est parce que je me suis mis au C++ un peu plus
sérieusement et donc ne suis plus vraiment objectif sur ce sujet, mais je
trouve que tous les exemples de codes qui ne fonctionnent pas en C++ et
fonctionnent en C sont du « mauvais C ». (mis à part le cast des void*
forcé par le C++)
Laurent Deniau wrote:Jean-Marc Bourguet wrote:Quand un typedef avait le meme identifieur que le tag d'une struct,
c'etait un typedef sur la struct. Donc pas de probleme.
Si ca compile pas en C++ et c'est legal (voir courant) en C.
Ca m'a pourtant l'air de compiler en C++. En fait je suis dans ma tête
A quels problemes *silencieux* fais-tu allusion?
Pour la plupart ils ne sont pas silencieux mais demande du travail.
cf mon autre post pour les problemes
Je ne sais pas si c'est parce que je me suis mis au C++ un peu plus
sérieusement et donc ne suis plus vraiment objectif sur ce sujet, mais je
trouve que tous les exemples de codes qui ne fonctionnent pas en C++ et
fonctionnent en C sont du « mauvais C ». (mis à part le cast des void*
forcé par le C++)
Charlie Gordon wrote:"Laurent Deniau" wrote in message
news:cmd5a5$hgm$- pas de goto.
s'il y a que le compilateur C++ rejette, c'est sans doute qu'il faut
fixer
le code C aussi.
Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
Charlie Gordon wrote:
"Laurent Deniau" <Laurent.Deniau@cern.ch> wrote in message
news:cmd5a5$hgm$1@sunnews.cern.ch...
- pas de goto.
s'il y a que le compilateur C++ rejette, c'est sans doute qu'il faut
fixer
le code C aussi.
Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
Charlie Gordon wrote:"Laurent Deniau" wrote in message
news:cmd5a5$hgm$- pas de goto.
s'il y a que le compilateur C++ rejette, c'est sans doute qu'il faut
fixer
le code C aussi.
Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
int x[99];
void f()
{
struct x { int a; };
sizeof(x); /* size of the array in C, size of the struct in C++ */
}
ou un typedef (le probleme peut etre silencieux et tres vicieux).
Quand un typedef avait le meme identifieur que le tag d'une struct,
c'etait un typedef sur la struct. Donc pas de probleme.
Si ca compile pas en C++ et c'est legal (voir courant) en C.
Ils ont ete testes dans le details ces millions de lignes de code?
Pas mal. Nos tests (ceux de la R&D) ne couvrent certainement pas
assez, mais quand meme pas mal. Plus les tests de la validation, plus
les tests de beta (mais on n'y est pas encore, le changement a ete
fait il y a 4 ou 5 mois et le produit ne sera pas chez les clients
avant 6 mois -- c'est naturellement quelque chose qui a ete fait au
debut d'un cycle).
Donc c'est un processus long et lourd.
Ce n'est pas une recompilation a la legere...
presentation des arguments par quelqu'un qui n'est pas convaincu et
qui n'a eu connaissance de ces arguments que par des gens non
convaincus n'est vraissemblablement pas significative. Une des
raisons donc est qu'on a remplace un composant d'assez bas niveau par
quelque chose ecrit en C++ et qu'il y a un desir de se passer de la
Il aurait ete peut-etre moins couteux de faire une interface au code C++
specialisee pour le C.
Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
couche presentant l'interface C du composant precedant (pour des
raisons de perf et d'acces a des possibilites supplementaires).
Il y
perf?
restructuration et simplication surement.
a aussi un desir de restructurer des choses en utilisant les
possibilites d'abstraction supplementaires du C++.
il n'y aurait pas un facteur marketing derriere tout ca?
int x[99];
void f()
{
struct x { int a; };
sizeof(x); /* size of the array in C, size of the struct in C++ */
}
ou un typedef (le probleme peut etre silencieux et tres vicieux).
Quand un typedef avait le meme identifieur que le tag d'une struct,
c'etait un typedef sur la struct. Donc pas de probleme.
Si ca compile pas en C++ et c'est legal (voir courant) en C.
Ils ont ete testes dans le details ces millions de lignes de code?
Pas mal. Nos tests (ceux de la R&D) ne couvrent certainement pas
assez, mais quand meme pas mal. Plus les tests de la validation, plus
les tests de beta (mais on n'y est pas encore, le changement a ete
fait il y a 4 ou 5 mois et le produit ne sera pas chez les clients
avant 6 mois -- c'est naturellement quelque chose qui a ete fait au
debut d'un cycle).
Donc c'est un processus long et lourd.
Ce n'est pas une recompilation a la legere...
presentation des arguments par quelqu'un qui n'est pas convaincu et
qui n'a eu connaissance de ces arguments que par des gens non
convaincus n'est vraissemblablement pas significative. Une des
raisons donc est qu'on a remplace un composant d'assez bas niveau par
quelque chose ecrit en C++ et qu'il y a un desir de se passer de la
Il aurait ete peut-etre moins couteux de faire une interface au code C++
specialisee pour le C.
Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
couche presentant l'interface C du composant precedant (pour des
raisons de perf et d'acces a des possibilites supplementaires).
Il y
perf?
restructuration et simplication surement.
a aussi un desir de restructurer des choses en utilisant les
possibilites d'abstraction supplementaires du C++.
il n'y aurait pas un facteur marketing derriere tout ca?
int x[99];
void f()
{
struct x { int a; };
sizeof(x); /* size of the array in C, size of the struct in C++ */
}
ou un typedef (le probleme peut etre silencieux et tres vicieux).
Quand un typedef avait le meme identifieur que le tag d'une struct,
c'etait un typedef sur la struct. Donc pas de probleme.
Si ca compile pas en C++ et c'est legal (voir courant) en C.
Ils ont ete testes dans le details ces millions de lignes de code?
Pas mal. Nos tests (ceux de la R&D) ne couvrent certainement pas
assez, mais quand meme pas mal. Plus les tests de la validation, plus
les tests de beta (mais on n'y est pas encore, le changement a ete
fait il y a 4 ou 5 mois et le produit ne sera pas chez les clients
avant 6 mois -- c'est naturellement quelque chose qui a ete fait au
debut d'un cycle).
Donc c'est un processus long et lourd.
Ce n'est pas une recompilation a la legere...
presentation des arguments par quelqu'un qui n'est pas convaincu et
qui n'a eu connaissance de ces arguments que par des gens non
convaincus n'est vraissemblablement pas significative. Une des
raisons donc est qu'on a remplace un composant d'assez bas niveau par
quelque chose ecrit en C++ et qu'il y a un desir de se passer de la
Il aurait ete peut-etre moins couteux de faire une interface au code C++
specialisee pour le C.
Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
couche presentant l'interface C du composant precedant (pour des
raisons de perf et d'acces a des possibilites supplementaires).
Il y
perf?
restructuration et simplication surement.
a aussi un desir de restructurer des choses en utilisant les
possibilites d'abstraction supplementaires du C++.
il n'y aurait pas un facteur marketing derriere tout ca?
"Anthony Fleury" a écrit dans le message de
news:418a442f$0$4415$Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}
Et le compilateur indique que le 'goto' empeche l'initialisation de B, ce
qui est effectivement néfaste.
Il suffit d'écrire :
{ int B=0; }
pour que tout redevienne OK.
PS : Pour corriger un préjugé sans fondement : l'utilisation de goto dans
du C/C++ est parfaitement justifiable.
"Anthony Fleury" <fleury_anthony@_hotmail.com_> a écrit dans le message de
news:418a442f$0$4415$626a14ce@news.free.fr...
Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}
Et le compilateur indique que le 'goto' empeche l'initialisation de B, ce
qui est effectivement néfaste.
Il suffit d'écrire :
{ int B=0; }
pour que tout redevienne OK.
PS : Pour corriger un préjugé sans fondement : l'utilisation de goto dans
du C/C++ est parfaitement justifiable.
"Anthony Fleury" a écrit dans le message de
news:418a442f$0$4415$Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}
Et le compilateur indique que le 'goto' empeche l'initialisation de B, ce
qui est effectivement néfaste.
Il suffit d'écrire :
{ int B=0; }
pour que tout redevienne OK.
PS : Pour corriger un préjugé sans fondement : l'utilisation de goto dans
du C/C++ est parfaitement justifiable.
Laurent Deniau writes:Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
Simple: si des exceptions s'echappent de la couche d'interface, il y a
un probleme dans celles-ci. Si le code qui se met a utiliser le
composant directement n'est pas modifie pour intercepter les
exceptions possibles, il y a un probleme dans la modif.
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
Simple: si des exceptions s'echappent de la couche d'interface, il y a
un probleme dans celles-ci. Si le code qui se met a utiliser le
composant directement n'est pas modifie pour intercepter les
exceptions possibles, il y a un probleme dans la modif.
Laurent Deniau writes:Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
Simple: si des exceptions s'echappent de la couche d'interface, il y a
un probleme dans celles-ci. Si le code qui se met a utiliser le
composant directement n'est pas modifie pour intercepter les
exceptions possibles, il y a un probleme dans la modif.
K. Ahausse wrote:
"Anthony Fleury" a écrit dans le message
de
news:418a442f$0$4415$Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}
Et le compilateur indique que le 'goto' empeche l'initialisation de B,
ce
qui est effectivement néfaste.
Ah merci je ne savais pas que ca posait problème dans ce cas.Il suffit d'écrire :
{ int B=0; }
pour que tout redevienne OK.
Alors en fait, je ne suis pas sûr de comprendre. Si je ne m'abuse,
d'ailleurs, et si j'ai bien compris, c'est valable aussi en C99 qui
autorise des définitions de variable en milieu de code.
Ce que j'en comprendrais, c'est qu'à la fin de la fonction toto on tente
de
« libérer » (appel du destructeur en C++) la variable B, correct ? C'est
la
seule chose que je vois dans ce code qui pourrait causer problème, et qui
pourrait être résolu par le { int B = 0; }. Cependant, si c'est bien le
cas, d'une part ca rend goto inutilisable en C99 et en C++, à moins de
mettre toutes les variables dans des blocs { }... Et deuxièmement, si
c'est
vraiment le cas, c'est pour moi pas un problème de C++ ou de C99 mais de
compilateur non ? car le programme n'est pas passé par le int B = 0; il
n'a
donc rien à dire.
PS : Pour corriger un préjugé sans fondement : l'utilisation de goto
dans
du C/C++ est parfaitement justifiable.
Oui oui, il manquait un « :-) » derrière les © ® ... Cependant, je pense
que
l'usage qu'il peut en être fait est plus que limité, et que goto n'est
acceptable que dans un nombre très restreint de cas.
K. Ahausse wrote:
"Anthony Fleury" <fleury_anthony@_hotmail.com_> a écrit dans le message
de
news:418a442f$0$4415$626a14ce@news.free.fr...
Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}
Et le compilateur indique que le 'goto' empeche l'initialisation de B,
ce
qui est effectivement néfaste.
Ah merci je ne savais pas que ca posait problème dans ce cas.
Il suffit d'écrire :
{ int B=0; }
pour que tout redevienne OK.
Alors en fait, je ne suis pas sûr de comprendre. Si je ne m'abuse,
d'ailleurs, et si j'ai bien compris, c'est valable aussi en C99 qui
autorise des définitions de variable en milieu de code.
Ce que j'en comprendrais, c'est qu'à la fin de la fonction toto on tente
de
« libérer » (appel du destructeur en C++) la variable B, correct ? C'est
la
seule chose que je vois dans ce code qui pourrait causer problème, et qui
pourrait être résolu par le { int B = 0; }. Cependant, si c'est bien le
cas, d'une part ca rend goto inutilisable en C99 et en C++, à moins de
mettre toutes les variables dans des blocs { }... Et deuxièmement, si
c'est
vraiment le cas, c'est pour moi pas un problème de C++ ou de C99 mais de
compilateur non ? car le programme n'est pas passé par le int B = 0; il
n'a
donc rien à dire.
PS : Pour corriger un préjugé sans fondement : l'utilisation de goto
dans
du C/C++ est parfaitement justifiable.
Oui oui, il manquait un « :-) » derrière les © ® ... Cependant, je pense
que
l'usage qu'il peut en être fait est plus que limité, et que goto n'est
acceptable que dans un nombre très restreint de cas.
K. Ahausse wrote:
"Anthony Fleury" a écrit dans le message
de
news:418a442f$0$4415$Oui et de toute facon les goto en C[++] c'est mal © ® (TM)
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}
Et le compilateur indique que le 'goto' empeche l'initialisation de B,
ce
qui est effectivement néfaste.
Ah merci je ne savais pas que ca posait problème dans ce cas.Il suffit d'écrire :
{ int B=0; }
pour que tout redevienne OK.
Alors en fait, je ne suis pas sûr de comprendre. Si je ne m'abuse,
d'ailleurs, et si j'ai bien compris, c'est valable aussi en C99 qui
autorise des définitions de variable en milieu de code.
Ce que j'en comprendrais, c'est qu'à la fin de la fonction toto on tente
de
« libérer » (appel du destructeur en C++) la variable B, correct ? C'est
la
seule chose que je vois dans ce code qui pourrait causer problème, et qui
pourrait être résolu par le { int B = 0; }. Cependant, si c'est bien le
cas, d'une part ca rend goto inutilisable en C99 et en C++, à moins de
mettre toutes les variables dans des blocs { }... Et deuxièmement, si
c'est
vraiment le cas, c'est pour moi pas un problème de C++ ou de C99 mais de
compilateur non ? car le programme n'est pas passé par le int B = 0; il
n'a
donc rien à dire.
PS : Pour corriger un préjugé sans fondement : l'utilisation de goto
dans
du C/C++ est parfaitement justifiable.
Oui oui, il manquait un « :-) » derrière les © ® ... Cependant, je pense
que
l'usage qu'il peut en être fait est plus que limité, et que goto n'est
acceptable que dans un nombre très restreint de cas.
Jean-Marc Bourguet wrote:Laurent Deniau writes:Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
Simple: si des exceptions s'echappent de la couche d'interface, il y a
un probleme dans celles-ci. Si le code qui se met a utiliser le
composant directement n'est pas modifie pour intercepter les
exceptions possibles, il y a un probleme dans la modif.
Tu veux dire que toutes les methodes C++ de votre couche bas niveau sont
qualifiees avec throw().
Jean-Marc Bourguet wrote:
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
Simple: si des exceptions s'echappent de la couche d'interface, il y a
un probleme dans celles-ci. Si le code qui se met a utiliser le
composant directement n'est pas modifie pour intercepter les
exceptions possibles, il y a un probleme dans la modif.
Tu veux dire que toutes les methodes C++ de votre couche bas niveau sont
qualifiees avec throw().
Jean-Marc Bourguet wrote:Laurent Deniau writes:Une question au hasard. Vous gerez comment les exceptions dans votre
code C avec tous ses pointeurs et ses mallocs (ou wrapper
equivalent) si vous avez du C++ comme couche bas niveau du C?
Simple: si des exceptions s'echappent de la couche d'interface, il y a
un probleme dans celles-ci. Si le code qui se met a utiliser le
composant directement n'est pas modifie pour intercepter les
exceptions possibles, il y a un probleme dans la modif.
Tu veux dire que toutes les methodes C++ de votre couche bas niveau sont
qualifiees avec throw().
- pas de goto.
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}
- pas de goto.
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}
- pas de goto.
le PB en C++ le voilà :
int toto (void)
{
int A=0 ;
goto Fin ;
int B = 0 ;
Fin:
return A ;
}