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

  FORUM HardWare.fr
  Programmation
  C++

  VS 2005: différence de compilation debug/relase?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VS 2005: différence de compilation debug/relase?

n°1461182
jimko
My computer NEVER cras
Posté le 20-10-2006 à 11:31:28  profilanswer
 

Hello world,
 
Bon, OK j'ai oublié le parenthésage sur ce coup, mais surtout je suis tombé sur un truc louche!

Code :
  1. if(ASystem::GetButtonsState() & kBtnRight|kBtnLeft)


 
En cherchant pourquoi ca ne passait pas bien en release, il semblerait bien que Visual Studio C++ Pro 2005 évalue l'expression différemment selon le mode (debug/release)!

Code :
  1. ( (ASystem::GetButtonsState()&kBtnRight)  |  kBtnLeft) ) // mode release (logique)
  2. (ASystem::GetButtonsState()  &  (kBtnRight|kBtnLeft) ) // mode debug (hein!?!)


 
Je n'ai pas (encore) touché aux flags de compilation, et quand bien meme, inverser le sens d'évaluation des expressions me semble impossible (ou en tout cas complètement suicidaire!).
 
C'est passqu'il ne m'aime pas ou ca le fait chez vous aussi?  
Ca fait peur ça!  :ouch:

mood
Publicité
Posté le 20-10-2006 à 11:31:28  profilanswer
 

n°1461500
jesus_chri​st
votre nouveau dieu
Posté le 20-10-2006 à 15:54:43  profilanswer
 

la priorité des opérateurs ne change jamais en C++. C'est toujours la même qu'en C.

n°1461726
jimko
My computer NEVER cras
Posté le 20-10-2006 à 22:56:14  profilanswer
 

jesus_christ a écrit :

la priorité des opérateurs ne change jamais en C++. C'est toujours la même qu'en C.


 
Ben oui j'espere bien... Idem elle ne devrait pas non plus changer en mode debug ou release ;)

n°1461766
bjone
Insert booze to continue
Posté le 21-10-2006 à 00:04:29  profilanswer
 

en l'occurence, si kBtnRight & kBtnLeft sont des constantes, un:
 
if( (ASystem::GetButtonsState()&kBtnRight)  |  kBtnLeft )  
 
n'est pas logique. autant écrire if(1)


Message édité par bjone le 21-10-2006 à 15:42:41
n°1462787
bb138
La vie est belle ...
Posté le 23-10-2006 à 09:48:22  profilanswer
 

Es-tu sûr de ce que tu annonces ?
J'ai testé ce qui suit en "Release" et "Debug" avec MS-VS 2005 Pro et cela me retourne toujours "Release"...

Code :
  1. #include <iostream>
  2. const int BG = 1;
  3. const int BD = 2;
  4. int
  5. maFonction()
  6. {
  7. return 4;
  8. }
  9. int
  10. main( int argc, char** argv )
  11. {
  12. if( maFonction() & BG | BD )
  13.  std::cout << "Release" << std::endl;
  14. else
  15.  std::cout << "Debug" << std::endl;
  16. return 0;
  17. }

n°1462825
_darkalt3_
Proctopathe
Posté le 23-10-2006 à 10:20:24  profilanswer
 

bb138 a écrit :


Code :
  1. if( maFonction() & BG | BD )



Les tests booléens, c'est plutôt '&&' ou '||' ou ca n'a rien à voir avec la question ?


---------------
Töp of the plöp
n°1462883
breizhbugs
Posté le 23-10-2006 à 11:24:08  profilanswer
 

bb138 a écrit :

Es-tu sûr de ce que tu annonces ?
const int BG = 1;-> 001 en binaire
const int BD = 2;->010 en binaire
int
maFonction()
{
 return 4; -> 100 en binaire
}
 
int
main( int argc, char** argv )
{
 if( maFonction() & BG | BD )
             // 100 & 001 = 000 (& binaire)
             // 000 | 010 = 010 == 2
             // le if devient -> if (2) donc toujours "vrai"
  std::cout << "Release" << std::endl;
 else
  std::cout << "Debug" << std::endl;
 
 return 0;
}


 

n°1462912
_darkalt3_
Proctopathe
Posté le 23-10-2006 à 11:37:19  profilanswer
 

_darkalt3_ a écrit :

Les tests booléens, c'est plutôt '&&' ou '||' ou ca n'a rien à voir avec la question ?


ah oui ok on parle de masques [:joce]


---------------
Töp of the plöp
n°1463003
bb138
La vie est belle ...
Posté le 23-10-2006 à 13:28:12  profilanswer
 

breizhbugs > Je suis tout à fait d'accord avec toi mais si tu reprends le post initial :

Code :
  1. ( (ASystem::GetButtonsState()&kBtnRight)  |  kBtnLeft) ) // mode release (logique)
  2. (ASystem::GetButtonsState()  &  (kBtnRight|kBtnLeft) ) // mode debug (hein!?!)


Avec ce fontionnement, mon bout de code aurait donné :
- En release : ce que tu as décrit ( 100 & 001 = 000 et 000 | 010 = 010 donc toujours vrai)
- En Debug : d'après le fonctionnement décrit par jimko : ( 100 & ( 001 | 010)) -> 100 & 011 = 000 donc toujours faux... ce que je dis ne pas avoir retrouvé.
 
D'où ma question pour savoir s'il est vraiment sûr de ce qu'il annonce.

n°1463013
bjone
Insert booze to continue
Posté le 23-10-2006 à 13:58:49  profilanswer
 

:??:
 
ce que j'ai annoncé c'est ce que tu as prouvé par la suite :??:
(comprends pas là)

mood
Publicité
Posté le 23-10-2006 à 13:58:49  profilanswer
 

n°1463019
bjone
Insert booze to continue
Posté le 23-10-2006 à 14:03:27  profilanswer
 

moi ce que j'annonce c'est qu'écrire:
( (ASystem::GetButtonsState()&kBtnRight)  |  kBtnLeft)  
c'est écrire un bug :D


Message édité par bjone le 23-10-2006 à 14:06:50
n°1463049
bb138
La vie est belle ...
Posté le 23-10-2006 à 14:40:27  profilanswer
 

bjone > je suis d'accord avec toi (non non ce n'est pas vrai je ne suis pas toujours d'accord avec tout le monde !)
 
... Je pense que jimko a du faire une boulette quand il a testé son code en "Debug" et "Release"...

n°1463217
bjone
Insert booze to continue
Posté le 23-10-2006 à 15:51:31  profilanswer
 

oué c'est bizarre son truc (il aurait ptet une beta :??:)

n°1466387
jimko
My computer NEVER cras
Posté le 27-10-2006 à 18:28:59  profilanswer
 

bjone a écrit :

oué c'est bizarre son truc (il aurait ptet une beta :??:)


 
Skuzez moi j'étais en vacances imprévues (ça arrive!) :sleep:  
 
Bon déjà, bien évidemment je n'ai jamais voulu écrire ça (sinon faut changer de métier!)... J'avais ajouté le deuxieme bit "kBtnLeft" à la va-vite et sans faire gaffe, et ce qui m'a laissé perplexe c'est que je ne m'en suis rendu compte qu'en passant bien plus tard en mode release, alors qu'en debug ca faisait ce que je voulais à la base, et non ce que ca aurait du faire...
 
Sauf que ... j'avais du boire ce jour-la faut croire! Impossible à renouveler en effet, j'ai pas l'air con là! désolé...
 
La seule explication a part mon cerveau en version beta lui-meme, c'aurait été que kBtnLeft vale 0 en mode debug, et 1 en mode release!...
Et personne n'y a pensé?  :D  okok je détourne la conversation, et je ne pense pas avoir jamais fait dependre mes constantes du mode de debug!
 
Oups, merci quand meme!

n°1466519
bjone
Insert booze to continue
Posté le 28-10-2006 à 02:09:08  profilanswer
 

ça arrive.
 
moi j'ai déjà cherché un bug jusqu'à 5 heures du mat pour m'apercevoir le lendemain (après-midi) que j'avais tout ruiné :D


Message édité par bjone le 28-10-2006 à 02:28:35

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

  VS 2005: différence de compilation debug/relase?

 

Sujets relatifs
Calculer la différence entre la date C et C-1Une erreur de compilation incompréhensible ...
[JSP] problème à la compilation : bean pas trouvé.[linux-wxwidgets] Probleme de cross compilation vers windows
Pobleme d'installation de Visual Studio 2005regexp différence entre (?:mot) et (mot)?
[C#]Question à propos de la compilation de mon projet[Visual studio C# 2005] Avoir une vue arborescente des composants
programmer en c sous microsoft visual studio 2005Différence de teintes dans les images sous Firefox et IExplorer.
Plus de sujets relatifs à : VS 2005: différence de compilation debug/relase?


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