Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1392 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  ordre d'initialisation des membres et warnings visual studio

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ordre d'initialisation des membres et warnings visual studio

n°1451654
taoa
Posté le 03-10-2006 à 17:29:12  profilanswer
 

L'ordre de declaration des membres d'une classe va avoir de l'importance si l'on veut les initialiser dans une liste lors de l'appel du constructeur:
 

Code :
  1. class T
  2. {
  3. int b, a;
  4. T(int a, int b) : a(a), b(b) {}
  5. };


 
Ce code va générer un warning lors de la compilation avec gcc parce que b est declaré avant a en tant que membre, mais il est initialisé apres dans le constructeur.
 
Je souhaiterais que cl, le compilateur de visual studio, me lance le meme warning, ce qu'il ne fait pas par defaut.
 
Quelqu'un saurait-il a quel code (C4XXX) ce warning correspond, ou ce qu'il faut faire pour l'obtenir?
 
Merci.

mood
Publicité
Posté le 03-10-2006 à 17:29:12  profilanswer
 

n°1452841
taoa
Posté le 05-10-2006 à 15:27:14  profilanswer
 

eh ben? personne?

n°1452857
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-10-2006 à 15:54:49  profilanswer
 

question sans doute très con, mais pourquoi GCC gueule pour ça [:petrus dei]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1452859
_darkalt3_
Proctopathe
Posté le 05-10-2006 à 16:03:13  profilanswer
 

Quel est l'interêt d'avoir un tel warning ?


Message édité par _darkalt3_ le 05-10-2006 à 16:03:31

---------------
Töp of the plöp
n°1453038
jesus_chri​st
votre nouveau dieu
Posté le 05-10-2006 à 19:32:30  profilanswer
 

visual c++, au moins 2003 (7.1) le fait, et par défaut il me semble.
vc6 ne fait pas de warning pour ça

n°1453039
jesus_chri​st
votre nouveau dieu
Posté le 05-10-2006 à 19:33:46  profilanswer
 

Harkonnen a écrit :

question sans doute très con, mais pourquoi GCC gueule pour ça [:petrus dei]


par ce l'ordre d'execution est forcément celle de déclaration des membres (ici : b puis a)
or ça ne correspond pas à ce qui est écris, donc le comportement réel risque d'être différent de ce à quoi s'attend le programmeur => warning

n°1453046
++fab
victime du syndrome IH
Posté le 05-10-2006 à 19:46:12  profilanswer
 

Code :
  1. #include <iostream>
  2. struct A { A() { std::cout << 'O'; } };
  3. struct B { B() { std::cout << 'K'; } };
  4. struct C
  5. {
  6.     C() : a(), b() {}
  7.     B b;
  8.     A a;
  9. };
  10. int main()
  11. {
  12.     C c;
  13. }


 
KO

n°1453235
taoa
Posté le 06-10-2006 à 10:35:33  profilanswer
 

jesus_christ a écrit :

visual c++, au moins 2003 (7.1) le fait, et par défaut il me semble.
vc6 ne fait pas de warning pour ça


 
 
Mmmh, je bosse sur Visual 2005, et y a pas de warning, c'est d'ailleurs tout le probleme...
On a des machines windows et linux qui compilent le meme projet. Les machines linux utilisent bien evidemment gcc et les machines windows utilisent cl.exe. Or on a defini gcc sous linux pour qu'il considere les warnings comme des erreurs afin d'avoir un code le plus propre possible etant donnée la taille du projet.
Sauf que cl n'émets pas les memes warnings que gcc... et donc des developpeurs sous windows vont envoyer un code qui pourrait ne pas compiler sous linux et c'est un vrai probleme.
 
Le warning que je cherche ici en est un parmi d'autres. Il s'avere que ces derniers temps il a ete plus problematique que d'autre d'ou ma question.
 
Merci de vos reponses en tous cas.

n°1453621
jesus_chri​st
votre nouveau dieu
Posté le 06-10-2006 à 19:36:21  profilanswer
 

il me semble avoir vu ce warning sous visual 2003, comme j'utilise aussi gcc, j'ai peut-être confondu, désolé :D

n°1453625
0x90
Posté le 06-10-2006 à 19:39:28  profilanswer
 

taoa a écrit :

Mmmh, je bosse sur Visual 2005, et y a pas de warning, c'est d'ailleurs tout le probleme...
On a des machines windows et linux qui compilent le meme projet. Les machines linux utilisent bien evidemment gcc et les machines windows utilisent cl.exe. Or on a defini gcc sous linux pour qu'il considere les warnings comme des erreurs afin d'avoir un code le plus propre possible etant donnée la taille du projet.
Sauf que cl n'émets pas les memes warnings que gcc... et donc des developpeurs sous windows vont envoyer un code qui pourrait ne pas compiler sous linux et c'est un vrai probleme.
 
Le warning que je cherche ici en est un parmi d'autres. Il s'avere que ces derniers temps il a ete plus problematique que d'autre d'ou ma question.
 
Merci de vos reponses en tous cas.


 
C'est pas la solution à la question posée, mais utiliser gcc avec cygwin ca irait pas ?

Message cité 1 fois
Message édité par 0x90 le 06-10-2006 à 19:39:44
mood
Publicité
Posté le 06-10-2006 à 19:39:28  profilanswer
 

n°1453653
++fab
victime du syndrome IH
Posté le 06-10-2006 à 22:26:07  profilanswer
 

taoa a écrit :

On a des machines windows et linux qui compilent le meme projet. Les machines linux utilisent bien evidemment gcc et les machines windows utilisent cl.exe. Or on a defini gcc sous linux pour qu'il considere les warnings comme des erreurs afin d'avoir un code le plus propre possible etant donnée la taille du projet.
Sauf que cl n'émets pas les memes warnings que gcc... et donc des developpeurs sous windows vont envoyer un code qui pourrait ne pas compiler sous linux et c'est un vrai probleme.


Quelle est votre procédure avant de faire un commit ? Si vous utilisez deux compilateurs pour développer, il faut s'assurer que le code à comiter compile sans erreurs avec les deux compilateurs. Ce qui implique (grosso modo): les développeurs ont accès aux deux compilateurs, et ne comitent que si tout se passe bien avec les 2 compilateurs. Ou alors, il y a un gus à qui l' on envoi les patch, et qui se charge d'intégrer les modifications.
 

Citation :

Le warning que je cherche ici en est un parmi d'autres. Il s'avere que ces derniers temps il a ete plus problematique que d'autre d'ou ma question.


Ce warning est bien un cas particulier, tu peux aussi avoir un bug sur l'un des compilateurs, etc.
J'ai l'impression que c'est la procédure de commit qui est mal définie, et qui est l'origine du problème -- je pré-suppose qu'il y avait bien un intérêt majeur à utiliser deux compilateurs différents.
 

n°1453894
taoa
Posté le 07-10-2006 à 22:14:39  profilanswer
 

0x90 a écrit :

C'est pas la solution à la question posée, mais utiliser gcc avec cygwin ca irait pas ?


 
hé non pasque pas moyen de débugguer sous visual studio si c'est compilé avec gcc ;)


Message édité par taoa le 07-10-2006 à 22:15:22
n°1453895
taoa
Posté le 07-10-2006 à 22:19:33  profilanswer
 

++fab a écrit :

Quelle est votre procédure avant de faire un commit ? Si vous utilisez deux compilateurs pour développer, il faut s'assurer que le code à comiter compile sans erreurs avec les deux compilateurs. Ce qui implique (grosso modo): les développeurs ont accès aux deux compilateurs, et ne comitent que si tout se passe bien avec les 2 compilateurs. Ou alors, il y a un gus à qui l' on envoi les patch, et qui se charge d'intégrer les modifications.
 


 
c'est bien la tout le probleme... les gars sous linux ont gcc et les gars sous win ont cl. et c'est tout.
donc quand un gars sous linux commit du code qui fait planter windows, c'est le chantier et reciproquement. on doit avoir un jour ou l'autre une mahcine qui compile tout le projet a longueur de temps pour toutes les plateformes mais c'est pas encore ca.
 

n°1453912
GrosBocdel
Posté le 08-10-2006 à 09:48:31  profilanswer
 

Le -Wall de gcc qui permet d'afficher le warning ne fonctionne pas avec vc++?

n°1453918
taoa
Posté le 08-10-2006 à 11:36:58  profilanswer
 

Le -Wall de gcc fonctionne avec VS.
 
Seulement cette option rajoute tout un tas de warnings qui ne nous interessent pas, on veut juste ce warning la :/

n°1453928
GrosBocdel
Posté le 08-10-2006 à 12:31:25  profilanswer
 

taoa a écrit :

Le -Wall de gcc fonctionne avec VS.
 
Seulement cette option rajoute tout un tas de warnings qui ne nous interessent pas, on veut juste ce warning la :/


 
-Wreorder alors

n°1454248
taoa
Posté le 09-10-2006 à 13:45:13  profilanswer
 

GrosBocdel a écrit :

-Wreorder alors


 
 :??:  :??:  :??:  
connais pas ca :P

n°1454530
GrosBocdel
Posté le 09-10-2006 à 18:27:49  profilanswer
 

Je l'ai pris de la doc de gcc. Ca n'existe pas chez bilou?

n°1454760
taoa
Posté le 10-10-2006 à 11:56:46  profilanswer
 

GrosBocdel a écrit :

Je l'ai pris de la doc de gcc. Ca n'existe pas chez bilou?


 
 
pas vérifié, mais de toutes facons, une telle option va ajouter un set de warnings au compilateur, alors que je n'en cherche qu'un seul...
J'esperais que quelqu'un connissait son code... apparemment non, ou personne ne s'est encore manifesté  :)

n°1455028
GrosBocdel
Posté le 10-10-2006 à 17:48:19  profilanswer
 

bein écoute, la doc de gcc dit ça à propose de -Wreorder :

Citation :


-Wreorder (C++ uniquement)
    Avertir quand l'ordre des initialiseurs de membres fournis dans le code ne correspond pas à l'ordre dans lequel ils doivent être exécutés. Par exemple :
 
            struct A {
              int i;
              int j;
              A(): j (0), i (1) { }
            };
 
 
    Ici, le compilateur avertira que les initialiseurs de membres pour i et j seront réarrangés pour qu'ils correspondent à l'ordre de déclaration des membres.  


Donc je ne vois pas en quoi ça rajoutera d'autres warnings.

n°1455037
taoa
Posté le 10-10-2006 à 18:23:39  profilanswer
 

he, c'est cool ca, je verifie si ca marche ;)

n°1455039
GrosBocdel
Posté le 10-10-2006 à 18:29:06  profilanswer
 

Halalalala [:hotcat]
M'enfin c'est possible que ça ne marche que pour gcc

n°1455052
KangOl
Profil : pointeur
Posté le 10-10-2006 à 18:54:55  profilanswer
 

en plusieurs étapes :
1/ activer tous les warnings (option /Wall)
2/ repérer le numéro de warning correspondant a ce que tu cherches
2b/ si pas trouver : DTC
3/ utiliser l'option /wen ou /won ( http://msdn2.microsoft.com/en-us/library/thxezb7y.aspx )

n°1455200
taoa
Posté le 11-10-2006 à 09:53:04  profilanswer
 

GrosBocdel a écrit :

Halalalala [:hotcat]
M'enfin c'est possible que ça ne marche que pour gcc


 
Hrem :P
 
/Wreorder n'existe pas sous Visual ^^
 
 

n°1455916
taoa
Posté le 12-10-2006 à 11:44:39  profilanswer
 

KangOl a écrit :

en plusieurs étapes :
1/ activer tous les warnings (option /Wall)
2/ repérer le numéro de warning correspondant a ce que tu cherches
2b/ si pas trouver : DTC
3/ utiliser l'option /wen ou /won ( http://msdn2.microsoft.com/en-us/library/thxezb7y.aspx )


 
J'y ai pensé, mais activer Wall va generer une telle quantité de warnings que ca va etre trouver une aiguille dans une botte de foin... etant donnée la taille relativement enorme du projet sur lequel on bosse...

n°1456109
Kristoph
Posté le 12-10-2006 à 15:02:40  profilanswer
 

taoa a écrit :

J'y ai pensé, mais activer Wall va generer une telle quantité de warnings que ca va etre trouver une aiguille dans une botte de foin... etant donnée la taille relativement enorme du projet sur lequel on bosse...


C'est pas comme si tu ne pouvais pas faire le test sur un simple fichier .cpp dans un nouveau projet :o

n°1456502
taoa
Posté le 13-10-2006 à 09:37:43  profilanswer
 

Kristoph a écrit :

C'est pas comme si tu ne pouvais pas faire le test sur un simple fichier .cpp dans un nouveau projet :o


 
Mmmh :) tu veux pas le faire? :D j'ai deja plein de taff :P

n°1456509
Kristoph
Posté le 13-10-2006 à 09:53:48  profilanswer
 

taoa a écrit :

Mmmh :) tu veux pas le faire? :D j'ai deja plein de taff :P


Nan, j'ai pas de Visual sous la main :D

n°1457113
taoa
Posté le 14-10-2006 à 11:20:54  profilanswer
 

Bon, ok, je le conterai en heures sup'
 
Ah merde, elles sont pas payées les heures sup...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  ordre d'initialisation des membres et warnings visual studio

 

Sujets relatifs
[Visual studio C# 2005] Avoir une vue arborescente des composantsprogrammer en c sous microsoft visual studio 2005
[Visual Basic.net] Variables public innaccessible[C++] MinGW Developer Studio + wxWidgets = compil trop lente
Problème avec requête sql et ordre d'affichage des champs [résolu]Gestion d'une liste de membres (BO)
Solution la plus propre pour gérer un ordre d'affichageVisual C++ : Problème d'éxécution
Plus de sujets relatifs à : ordre d'initialisation des membres et warnings visual studio


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR