Bonsoir, comment bien repérer tout les warnings de mon code avec Visual C++ ? J'ai mis le "W4", et quand je compile dans "Sortie/Générer" je n'ai que les warnings du main (j'ai 8 autres .c & .h )!
![]()
Salut,
Est ce que tu est sur qu'il compile tout tes fichiers?
Sinon, dans les propriété de ton projet, dans les options du compilo, ya pas un switchenable all warning ou un truc du genre?
J'arrive plus à ouvrir le projet que j'avais fait avec, donc je me souviens pas des fenêtre -_-' va falloir que je règles ça
Peut être que tu n'a pas de warning parce que ben ta pas écris de couille dans ton code qui en génére
C'est une possibilité hein lol
Non non y'a forcement des warnings
Oui il compile tout les fichiers, mon programme ne fonctionnerait pas correctement sinon.
Que dit le compilo si tu ne recompiles qu'un seul .c/.cpp ?
Si tu as un doute, rajoute un bout de code bidon qui genere un warning, juste pour etre sur qu'il est bien pris en compte.
ben oui, quand on écrit du bon code, il n'y a pas de warnings.
Les warnings s'affichent, mais que ceux de la page à partir de laquelle je compile...
Lapintade, j'ai des warnings.
Dans Visual Studio (entre autres) si tu compiles ton programme une première fois tous les fichiers sont compilés, mais après seuls les fichiers dans lesquels il y a eu des changements sont re-compilés, c'est pratique car cela permet de réduire le temps de la compilation.
A noter que si l'on modifie un header alors tous les fichiers c ou cpp dans lesquels le header en question est inclus devront être re-compilés.
Ah ok merci de la précision Pocolo, je comprend pourquoi VC++ galère un peu lors de la première compilation
En gros faut juste modifier/enlever la modif' du header de mes defines (qui sont utilises dans tout mes fichiers) et c'est bon ? ![]()
du bon code? même pour les warning comparison signed/unsigned? corriger ce warning impose généralement de mettre un cast. si on sait qu'il n'y aura pas de problème, autant le laisser traîner, non? ![]()
" autant le laisser traîner, non?
"
Oui, de toute façon lorsque l'on écrit du mauvais code comme toi cela n'a aucune importance. ![]()
Moi je veux avoir un code tout beau tout propre ![]()
caelacanthe, perso quand un etudiant me file un code avec des warning a la compilation sur des options classique, je l'egorge... (Bon, je les egorges aussi si il y n'importe quel erreur dans valgrind ou fuite de memoire.)
Un warning c'est souvent un bug qui se cache. Si ce n'est pas un bug qui se cache autant le masquer en le corrigeant, ca permet de voir les warning qui sont important plus facilement.
bon d'accord, pardon, tout le monde a besoin d'être recadré un jour ou l'autre. ![]()
godrik si tu lis mes codes sources tu deviendra un criminel multi-recidiviste car tu aura envie de metuer 2 ou 3 fois mdr
En ce moment j'ai totalement delaissé le C[++] pour le java et le D. Ceci dits j'apporte rien de spécial à ce topic alors je retourne devant mon café..
Combien de fois j'ai eu a corrigé des bugs venant de rapport de clients, pour découvrir que la ligne incriminé contenait un joli warning
des trucs du genre
unsigned long t;
...
if(t > 0) t--; (celui il était marant, car après il y avait une boucle de 0 à t...)
Ou des classe qui ne répondent pas à une méthode en Objective C (un mystère pourquoi le compilateur ne met qu'un warning...).
bref moins y'a de warning dans un code, mieux c'est!
"du bon code? même pour les warning comparison signed/unsigned? corriger ce warning impose généralement de mettre un cast. si on sait qu'il n'y aura pas de problème, autant le laisser traîner, non?"
Tu peux laisser tout les warnings que tu juge sans probleme, le soucis c'est que sur un projet raisonable, des cas comme ca, tu en aura entre 500 et 10000, et pas sur que du coup après tu vois un warning qui pourra poser probleme. Dans la mesure ou ne pond pas 5000 lignes de code d'un coup sans compiler, on peut se permetre de prendre un peu de temps a corriger les warnings!
1>------ Début de la génération : Projet : AreYouAlive, Configuration : Debug Win32 ------
1> tools.c
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\tools.c(65):
warning C4244: '=' : conversion de 'int' en 'Sint16', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\tools.c(66):
warning C4244: '=' : conversion de 'int' en 'Sint16', perte possible de données
1> physicsEngine.c
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(29): warning C4244: '=' : conversion de 'int' en 'Sint16', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(30): warning C4244: '=' : conversion de 'int' en 'Sint16', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(49): warning C4244: '=' : conversion de 'int' en 'Sint16', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(50): warning C4244: '=' : conversion de 'int' en 'Sint16', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(57): warning C4244: '=' : conversion de 'int' en 'Sint16', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(78): warning C4244: '=' : conversion de 'int' en 'Sint16', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4101: 'jj1' : variable locale non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4189: 'i' : variable locale initialisée mais non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4101: 'i1' : variable locale non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4101: 'j2' : variable locale non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4101: 'jj2' : variable locale non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4101: 'j1' : variable locale non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4101: 'ii1' : variable locale non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4101: 'ii2' : variable locale non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4101: 'i2' : variable locale non référencée
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\physicsengin
e.c(46): warning C4189: 'j' : variable locale initialisée mais non référencée
1> main.c
1>c:\users\florent\documents\visual studio 2010\projects\areyoualive\areyoualive\main.c(12): warning C4026: fonction déclarée avec une liste de paramètres formels
1> hole.c
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\hole.c(113):
warning C4100: 'tab' : paramètre formel non référencé
1> graphicsEngine.c
1> game.c
1> events.c
1> character.c
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\character.c(
29): warning C4244: '=' : conversion de 'float' en 'int', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\character.c(
30): warning C4244: '=' : conversion de 'float' en 'int', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\character.c(
58): warning C4244: '+=' : conversion de 'int' en 'Sint16', perte possible de données
1>c:\users\florent\documents\visual studio
2010\projects\areyoualive\areyoualive\character.c(
59): warning C4244: '+=' : conversion de 'int' en 'Sint16', perte possible de données
1> animation.c
1> Génération de code en cours...
1> AreYouAlive.vcxproj -> C:\Users\Florent\documents\visual studio 2010\Projects\AreYouAlive\Debug\AreYouAlive.exe
========== Génération : 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été ignoré ==========
Voilà y'en avait ![]()
"if(t > 0) t--; (celui il était marant, car après il y avait une boucle de 0 à t...) "
ça ou la comparaison entre un entier signé et non-signé, l'entier négatif est pratiquement toujours supérieur à l'insigné alors que ça ne se passe juste pas comme ça dans le monde réel ~
~
et bien vu pour le flood du rapport de build, j'y avais pas pensé. ![]()
conversion de 'unsigned int' en 'Sint16', perte possible de données. Comment il vire ce warning ?
SDL_Rect* GetPosRes(SDL_Rect pos, SDL_Rect* posReturn)
{
float x = (float)pos.x, y = (float)pos.y;
Res res;
GetResolution(&res);
x = x*res.coefDownW;
y = y*res.coefDownH;
pos.x = (int)x;
pos.y = (int)y;
posReturn->x = pos.x;
posReturn->y = pos.y;
return posReturn;
}
Ces deux lignes sont associés à ce warning :
pos.x = (int)x;
pos.y = (int)y;
j'avoue ne pas saisir l'intérêt de tous ces cast...
en même temps, je règle le problème en n'utilisant plus que des int/uint, c'est plus organisé et on ne mélange pas tout. ![]()
res.coef est un float (genre 0.5)
Donc pour avoir le résultat de pos.x*res.coefDownW par exemple, je dois passer par x.
Bref, comment je résous ça dans ma situation ? ![]()