MS-Visual Studio et limits : ai-je loupé quelque chose ? - C++ - Programmation
Marsh Posté le 31-10-2006 à 19:03:38
C'est classique, il faut juste faire un
#undef min
#undef max
aprés tes includes
Marsh Posté le 02-11-2006 à 10:50:16
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à ...
Marsh Posté le 02-11-2006 à 11:15:35
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.)
Marsh Posté le 02-11-2006 à 11:20:37
bb138 a écrit : Le compilateur ne semble pas s'en sortir avec numeric_limits<float>::max( ) et confond avec la macro max... |
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.
Marsh Posté le 04-11-2006 à 12:45:37
++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 |
VC6,7 et le express se vautrent toujours la dessu, min,max étant des amcros définis
dans les en-têtes windows.
Marsh Posté le 04-11-2006 à 14:08:49
Joel F a écrit : VC6,7 et le express se vautrent toujours la dessu, min,max étant des amcros définis |
Si (vu que) les entêtes windows ne font pas partie de VC, VC n'est pas responsable
Marsh Posté le 31-10-2006 à 17:48:39
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 :
qui donne les résultats escomptés :
Cependant, dans les fichier en-tête, il y a aussi une macro qui définit max :
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 ?
(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....