Je pose cette question pour deux langues différentes : C et C++.
Quelle est la meilleure pratique pour appeler des fonctions qui ont une attente de signe entier opposé à ce que nous exigeons dans notre code ?
Par exemple :
uint32 _depth; // uint32 = DWORD
int depth;
_BitScanForward(&_depth, (uint32)input); // DWORD, DWORD
depth = (int)_depth;
_BitScanForward attend des paramètres DWORD (uint32). La variable input
est de type int16 et je dois traiter le résultat _depth
comme un int32 dans mon code.
- Est-ce que je dois me soucier du casting
input
comme indiqué ? Je sais que le compilateur probablement le faire pour moi, mais quelle est la meilleure pratique ? - Est-il acceptable de déclarer
_depth
en tant que int32 et donc éviter de devoir le convertir ensuite comme indiqué ?
NOTE :
Mon commentaire sur le compilateur est basé sur l'expérience. J'ai écrit du code qui s'est compilé sans aucun avertissement dans VS mais qui a planté à l'exécution. Il s'est avéré que j'appelais une fonction avec un int de largeur incorrecte. Je ne laisse donc plus ce sujet au compilateur.
EDIT :
Les réponses sont utiles, merci. Permettez-moi d'affiner ma question. S'il n'y a pas de problème de largeur, c'est-à-dire que la fonction n'attend pas un int plus étroit que celui qui est transmis (ce qui échouera évidemment), est-il possible de compter sur le compilateur pour gérer les différences de signe et de largeur ?