[C,C++] Désactiver warning (Résolu)

Désactiver warning (Résolu) [C,C++] - C++ - Programmation

Marsh Posté le 14-03-2008 à 10:30:59    

C'est mon premier post sur le forum et j'aimerai préciser que j'ai bien cherché avant de poster. Si ça se trouve, je n'ai pas taper les bons mots.
 
Je suis sur Eclipse Version: 3.3.1.1 et j'utlise le plugin CDT.
 
Mon problème est le suivant : à un moment dans le code, j'utilise le principe de la division entière à partir d'un réel.  

Code :
  1. double x;
  2. int phi;
  3. phi = x/5;


 
Du coup, le compilateur me montre une erreur à la ligne 3 qui est un warning dans lequel il me dit "Attention, converting int à partir de double".
C'est certes un warning mais dans Eclipse la petite croix rouge apparait sur la ligne et chaque fois que je compile, il me met que le projet contient une erreur.  
 
Du coup, je suis obligé d'aller voir cette erreur. Ce warning m'empêche de compiler "la conscience tranquille" parce que quand j'ai une vrai erreur par mécanisme (ah ça doit être le warning), des fois je passe outre.
 
Ma question est simple : où est ce que je peux dire au compilateur, "laisse tomber ce genre d'erreur" ?
 
J'ai regardé dans préférences->CDT, il n'y a que des options relatives aux mises en pages.
Mon makefile utilise la commande g++.
La réponse peut elle être au niveau des Flags utilisés dans le makefile ?

Code :
  1. .cpp.o:
  2. $(rm) $@
  3. $(CC) $(CFLAGS) -c $*.cpp -o $*.o


 
A défaut, il n'y a pas de façon plus propre de faire la division entière ?
 
Je vous remercie d'avance pour votre réponse !


Message édité par LaTex_man le 14-03-2008 à 14:35:35
Reply

Marsh Posté le 14-03-2008 à 10:30:59   

Reply

Marsh Posté le 14-03-2008 à 11:49:11    

Enlever systématiquement un warning est une mauvaise idée. Il y a des cas ou ça peut effectivement te montrer une vrai erreur.
Pour ce cas, il suffit d'expliquer au compilo que tu sais ce que tu fais en castant explicitement la valeur de retour de ton opération.
(D'ailleurs ici, tu n'a surement pas besoin de la précision d'un double...).


Message édité par Jux_ le 14-03-2008 à 11:50:06
Reply

Marsh Posté le 14-03-2008 à 11:53:13    

Les langages C et C++ encore plus, réclament de "caster" les données qui ne sont pas du même type. Cela fait parti du langage.
Donc, il suffit de remplacer

phi = x/5;

par

phi = (int)(x/5.0);


Sinon, vous pouvez faire du Basic, du Php ou d'autres langages.


Message édité par olivthill le 14-03-2008 à 11:54:27
Reply

Marsh Posté le 14-03-2008 à 12:17:16    

Code :
  1. static_cast<int>(x/5.0);


ou

Code :
  1. static_cast<int>(x)/5;


dépend de ce que tu veux faire, et en général il vaut mieux appelé un chat un chat et un cast un cast. Par ailleurs, si tu utilises static_cast, ensuite il est plus simple de détecter dans ton code les cast que tu as réalisé et les corriger si nécessaire dans le futur...  

Reply

Marsh Posté le 14-03-2008 à 14:35:09    

J'ai testé les deux solutions à l'instant : les deux marchent.
"cast" me paraît une meilleure solution.  
Sinon, je n'ai pas le choix concernant le langage !
 
Je vais marquer Résolu dans le titre.
Merci à vous.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed