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

  FORUM HardWare.fr
  Programmation
  C++

  MS-Visual Studio et limits : ai-je loupé quelque chose ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MS-Visual Studio et limits : ai-je loupé quelque chose ?

n°1468409
bb138
La vie est belle ...
Posté le 31-10-2006 à 17:48:39  profilanswer
 

Initialiement, mon problème était d'avoir la valeur maximale admise pour un type donné.
 
Dans la foultitude des fichiers include de Microsoft, il existe des define du type MAX_INT (ou quelque chose du genre). Mais je suis aussi tombé sur limits (cf. http://msdn2.microsoft.com/en-us/library/s086ab1z.aspx ou http://gcc.gnu.org/onlinedocs/libs [...] __limitse3).
 
J'ai pu tester l'exemple suivant donné dans la MSDN :

Code :
  1. #include <iostream>
  2. #include <limits>
  3. using namespace std;
  4. int main() {
  5.    cout << "The maximum value for type float is:  "
  6.         << numeric_limits<float>::max( )
  7.         << endl;
  8.    cout << "The maximum value for type double is:  "
  9.         << numeric_limits<double>::max( )
  10.         << endl;
  11.    cout << "The maximum value for type int is:  "
  12.         << numeric_limits<int>::max( )
  13.         << endl;
  14.    cout << "The maximum value for type short int is:  "
  15.         << numeric_limits<short int>::max( )
  16.         << endl;
  17. }

qui donne les résultats escomptés :

Code :
  1. The maximum value for type float is:  3.40282e+038
  2. The maximum value for type double is:  1.79769e+308
  3. The maximum value for type int is:  2147483647
  4. The maximum value for type short int is:  32767

Cependant, dans les fichier en-tête, il y a aussi une macro qui définit max :

Code :
  1. #define max(a, b) (((a) > (b)) ? (a) : (b))

Lorsque je met celle-ci juste après le #include <limits>, j'obtiens alors des erreurs du type :

Avertissement 1 warning C4003: nombre de paramètres réels insuffisants pour la macro 'max' d:\perso\testlimits\testlimits.cpp 11  
Erreur 2 error C2589: '(' : jeton non conforme à droite de '::' d:\perso\testlimits\testlimits.cpp 11  
Erreur 3 error C2059: erreur de syntaxe : '::' d:\perso\testlimits\testlimits.cpp 11  

Le compilateur ne semble pas s'en sortir avec numeric_limits<float>::max( ) et confond avec la macro max...
Est-ce normal ? Ai-je loupé un truc ?  :heink:  
(Je précise que mon projet de test est bien compilé avec /EHsc)
PS: j'ai fait le même test avec gcc sous linux (probablement un version 4.x) et j'ai le même problème....

mood
Publicité
Posté le 31-10-2006 à 17:48:39  profilanswer
 

n°1468436
Joel F
Real men use unique_ptr
Posté le 31-10-2006 à 19:03:38  profilanswer
 

C'est classique, il faut juste faire un  
 
#undef min  
#undef max
 
aprés tes includes

n°1468995
bb138
La vie est belle ...
Posté le 02-11-2006 à 09:09:34  profilanswer
 

Oui, merci, c'est ce que j'ai finalement fait :)

n°1469097
++fab
victime du syndrome IH
Posté le 02-11-2006 à 10:50:16  profilanswer
 

Quelle est la version de GCC que tu utilises ? J'ai peine à croire que ce soit de la famille 4.x.y
De même, quelle est la version de compilateur (Visual) que tu utilises sous Windows ?
Bon, parce que c'est un reject-valid cinglant. Je veux bien que VC6 se vautre la dessus, mais au delà ...

n°1469121
++fab
victime du syndrome IH
Posté le 02-11-2006 à 11:15:35  profilanswer
 

ah mais d'accord, tu définies max après les include standards. (Il vaut mieux utiliser std::max ou std::min à la place de ces macros.)

n°1469126
++fab
victime du syndrome IH
Posté le 02-11-2006 à 11:20:37  profilanswer
 

bb138 a écrit :

Le compilateur ne semble pas s'en sortir avec numeric_limits<float>::max( ) et confond avec la macro max...
Est-ce normal ?


Oui. :: est un token de preprocessing; durant la phase de preprocessing, max est ainsi le nom d'une macro qui n'a pas le bon nombre d'arguments.

n°1470516
Joel F
Real men use unique_ptr
Posté le 04-11-2006 à 12:45:37  profilanswer
 

++fab a écrit :

Quelle est la version de GCC que tu utilises ? J'ai peine à croire que ce soit de la famille 4.x.y
De même, quelle est la version de compilateur (Visual) que tu utilises sous Windows ?
Bon, parce que c'est un reject-valid cinglant. Je veux bien que VC6 se vautre la dessus, mais au delà ...


VC6,7 et le express se vautrent toujours la dessu, min,max étant des amcros définis  
dans les en-têtes windows.

n°1470544
++fab
victime du syndrome IH
Posté le 04-11-2006 à 14:08:49  profilanswer
 

Joel F a écrit :

VC6,7 et le express se vautrent toujours la dessu, min,max étant des amcros définis  
dans les en-têtes windows.


 
Si (vu que) les entêtes windows ne font pas partie de VC, VC n'est pas responsable  ;)

n°1470616
Joel F
Real men use unique_ptr
Posté le 04-11-2006 à 18:16:51  profilanswer
 

Oui je me comprends ^^


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

  MS-Visual Studio et limits : ai-je loupé quelque chose ?

 

Sujets relatifs
Visual Studio : Placer un outil dans le FORMVisual Studio 6.0 et XP64
[Visual Studio] Ré-indenter le codePobleme d'installation de Visual Studio 2005
Fct sleep avec visual.net 2003Utilisation de atlimage.h (GDIplus) avec Visual C++ 6.0
Plus de sujets relatifs à : MS-Visual Studio et limits : ai-je loupé quelque chose ?


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