为什么在 C 中使用 floor() 时类型定义了两次?

Why is the type defined twice when using floor() in C?

我正在尝试学习 C/Objective-C。在这本书中,我将阅读 (Objective-C 编程:大书呆子牧场指南) 他们在此变量上设置了两次类型。为什么?当我删除运算符右侧的 (unsigned int) 时,它仍然可以正常工作。

unsigned int feet = (unsigned int)floor(rawFeet);

说类型被定义了两次是不正确的。定义类型意味着创建新类型。这里提到了两次类型。在左侧,它用于定义类型为 unsigned int 的名为 feet 的变量。在右侧,它用于将 floor 的 return 值转换为 unsigned int,其中 return 是 double - 用于分配给变量.

附带说明:如果您知道 rawFeet 是正的,我会通过使用 unsigned 来假设,那么调用 floor 是完全没有必要的。相反,您可以将 rawFeet 转换为 unsigned int。

例如

double rawFeet = 24.6;
unsigned int feet = (unsigned int)rawFeet;
// feet now equals 24

此外,评论中提到不需要强制转换。这可能是正确的,但很多编译器会正确地警告您这样做。例如在 Visual C++ 中:

unsigned int feet = floor(rawFeet);

// warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data