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 :
- #include <iostream>
- #include <limits>
- using namespace std;
- int main() {
- cout << "The maximum value for type float is: "
- << numeric_limits<float>::max( )
- << endl;
- cout << "The maximum value for type double is: "
- << numeric_limits<double>::max( )
- << endl;
- cout << "The maximum value for type int is: "
- << numeric_limits<int>::max( )
- << endl;
- cout << "The maximum value for type short int is: "
- << numeric_limits<short int>::max( )
- << endl;
- }
|
qui donne les résultats escomptés :
Code :
- The maximum value for type float is: 3.40282e+038
- The maximum value for type double is: 1.79769e+308
- The maximum value for type int is: 2147483647
- 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 :
- #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 ?
(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....