最近,当我为Fortran程序员编写C简介时,其中一位Fortran程序员向我询问了类型转换。
对他而言,在C语言中你必须显式地转换变量而不是让编译器自动为你做这件事,这真的没有意义。
我实际上有点难以说明这是好事,因为它有助于避免无意的错误。
你怎么能证明这一点?
答案 0 :(得分:5)
C 不需要强制转换。转换主要在编译时自动完成。
这是有效的,是惯用的C
#include <stdio.h>
int main(void) {
double x;
int i;
x = 42; /* automatically convert `int` to `double` */
i = x; /* automatically convert `double` to `int` */
printf("%f\n", i * 1.0); /* automatically convert `int` to `double` */
printf("%d\n", (int)x); /* explicit conversion needed */
return 0;
}
程序中的过多演员表明程序员(可能)正在使用C ++编译器来编译C源文件。演员的一些(很多??)使用是完全错误的。
答案 1 :(得分:3)
更一般地说(对于pmg的答案)有时可以安全地进行类型转换,有时则不能。此外,有时候它可能会做你想做的事情。
类型转换是必需,它可能表示程序员错误。指针就是一个很好的例子。如果你有一个指向一个字符的指针并将它指向一个指向整数的指针,那么可能有充分的理由这样做,但如果意外地完成,当你取消引用该指针时,你很可能会得到总线错误或无效结果(同样,在一些非常古老的平台,指针的大小不同!)。
关于自动类型转换何时发生以及如何发生,有广泛的规则。有些人宁愿投入一切而不是学习规则,以确保不会发生任何不希望的事情。