ordre d'initialisation des membres et warnings visual studio - C++ - Programmation
Marsh Posté le 05-10-2006 à 15:54:49
question sans doute très con, mais pourquoi GCC gueule pour ça
Marsh Posté le 05-10-2006 à 16:03:13
Quel est l'interêt d'avoir un tel warning ?
Marsh Posté le 05-10-2006 à 19:32:30
visual c++, au moins 2003 (7.1) le fait, et par défaut il me semble.
vc6 ne fait pas de warning pour ça
Marsh Posté le 05-10-2006 à 19:33:46
Harkonnen a écrit : question sans doute très con, mais pourquoi GCC gueule pour ça |
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
Marsh Posté le 05-10-2006 à 19:46:12
Code :
|
KO
Marsh Posté le 06-10-2006 à 10:35:33
jesus_christ a écrit : visual c++, au moins 2003 (7.1) le fait, et par défaut il me semble. |
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.
Marsh Posté le 06-10-2006 à 19:36:21
il me semble avoir vu ce warning sous visual 2003, comme j'utilise aussi gcc, j'ai peut-être confondu, désolé
Marsh Posté le 06-10-2006 à 19:39:28
taoa a écrit : Mmmh, je bosse sur Visual 2005, et y a pas de warning, c'est d'ailleurs tout le probleme... |
C'est pas la solution à la question posée, mais utiliser gcc avec cygwin ca irait pas ?
Marsh Posté le 06-10-2006 à 22:26:07
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. |
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.
Marsh Posté le 07-10-2006 à 22:14:39
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
Marsh Posté le 07-10-2006 à 22:19:33
++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.
Marsh Posté le 08-10-2006 à 09:48:31
Le -Wall de gcc qui permet d'afficher le warning ne fonctionne pas avec vc++?
Marsh Posté le 08-10-2006 à 11:36:58
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
Marsh Posté le 08-10-2006 à 12:31:25
taoa a écrit : Le -Wall de gcc fonctionne avec VS. |
-Wreorder alors
Marsh Posté le 09-10-2006 à 18:27:49
ReplyMarsh Posté le 10-10-2006 à 11:56:46
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é
Marsh Posté le 10-10-2006 à 17:48:19
bein écoute, la doc de gcc dit ça à propose de -Wreorder :
Citation : |
Donc je ne vois pas en quoi ça rajoutera d'autres warnings.
Marsh Posté le 10-10-2006 à 18:29:06
ReplyMarsh Posté le 10-10-2006 à 18:54:55
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 )
Marsh Posté le 11-10-2006 à 09:53:04
GrosBocdel a écrit : Halalalala |
Hrem
/Wreorder n'existe pas sous Visual ^^
Marsh Posté le 12-10-2006 à 11:44:39
KangOl a écrit : en plusieurs étapes : |
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...
Marsh Posté le 12-10-2006 à 15:02:40
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
Marsh Posté le 13-10-2006 à 09:37:43
Kristoph a écrit : C'est pas comme si tu ne pouvais pas faire le test sur un simple fichier .cpp dans un nouveau projet |
Mmmh tu veux pas le faire? j'ai deja plein de taff
Marsh Posté le 13-10-2006 à 09:53:48
taoa a écrit : Mmmh tu veux pas le faire? j'ai deja plein de taff |
Nan, j'ai pas de Visual sous la main
Marsh Posté le 14-10-2006 à 11:20:54
Bon, ok, je le conterai en heures sup'
Ah merde, elles sont pas payées les heures sup...
Marsh Posté le 03-10-2006 à 17:29:12
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:
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.