Я задаю этот вопрос для двух разных языков: C и С++.
Какова наилучшая практика при вызове функций, у которых есть противоположное целочисленное знаковое знакомство с тем, что нам нужно в нашем коде?
Например:
uint32 _depth; // uint32 = DWORD
int depth;
_BitScanForward(&_depth, (uint32)input); // DWORD, DWORD
depth = (int)_depth;
_BitScanForward ожидает параметры DWORD (uint32). Переменная input
имеет тип int16, и мне нужно обработать результат _depth
как int32 в моем коде.
- Нужно ли мне заботиться о литье
input
, как показано? Я знаю, что complier, вероятно, сделает это для меня, но что такое лучшая практика? - Допустимо ли объявлять
_depth
как int32 и, следовательно, не нужно делать его потом, как показано?
Примечание:
Мой комментарий о complier основан на опыте. Я написал код, который скомпилирован без предупреждений в VS, но разбился на выполнение. Оказалось, что я вызываю функцию с шириной int int. Поэтому я больше не оставляю эту тему в компиляторе.
EDIT:
Ответы полезны, спасибо. Позвольте мне уточнить мой вопрос. Если проблем с шириной нет, т.е. Функция не ожидает более узкого int, чем то, что передается (obvioulsy будет терпеть неудачу), тогда можно ли полагаться на компилятор для обработки различий знака и ширины?