【发布时间】:2016-09-26 11:38:46
【问题描述】:
我针对两种不同的语言提出这个问题:C 和 C++。
在调用与我们在代码中需要的整数符号期望相反的函数时,最佳做法是什么?
例如:
uint32 _depth; // uint32 = DWORD
int depth;
_BitScanForward(&_depth, (uint32)input); // DWORD, DWORD
depth = (int)_depth;
_BitScanForward 需要 DWORD (uint32) 参数。变量input 是int16 类型,我需要在我的代码中将结果_depth 处理为int32。
- 我是否需要关注
input的转换,如图所示?我知道编译器可能会为我做这件事,但最佳做法是什么? - 是否可以将
_depth声明为 int32 从而避免事后强制转换,如图所示?
注意:
我对编译器的评论是基于经验。我编写了在 VS 中编译时没有警告但在执行时崩溃的代码。原来我正在调用一个宽度不正确的函数。所以我不再把这个话题留给编译器了。
编辑:
答案很有帮助,谢谢。让我完善我的问题。如果没有宽度问题,即函数不期望比传入的 int 更窄(显然会失败),那么可以依靠编译器来处理符号和宽度差异吗?
【问题讨论】:
-
"我可以将 _depth 声明为 int32" 那么,有什么能阻止你这样做吗?
-
“可能”为你做?
-
您使用哪种语言? C 还是 C++?这是两种截然不同的语言。选一个!
-
@DanielDaranas “可以”的定义 = “用于表示能力或许可”。许可为可接受。但我只是为你改变了我的问题;)
-
请一次要求一种语言。如果您命名的每种语言的答案都不同,那会让事情变得一团糟!当然,您实际上是在使用其中一种,所以只需说出那个。