向某人解释为什么在编译时自动完成类型转换

时间:2011-06-02 18:05:29

标签: c fortran

最近,当我为Fortran程序员编写C简介时,其中一位Fortran程序员向我询问了类型转换。 对他而言,在C语言中你必须显式地转换变量而不是让编译器自动为你做这件事,这真的没有意义。
我实际上有点难以说明这是好事,因为它有助于避免无意的错误。

你怎么能证明这一点?

2 个答案:

答案 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的答案)有时可以安全地进行类型转换,有时则不能。此外,有时候它可能会做你想做的事情。

类型转换是必需,它可能表示程序员错误。指针就是一个很好的例子。如果你有一个指向一个字符的指针并将它指向一个指向整数的指针,那么可能有充分的理由这样做,但如果意外地完成,当你取消引用该指针时,你很可能会得到总线错误或无效结果(同样,在一些非常古老的平台,指针的大小不同!)。

关于自动类型转换何时发生以及如何发生,有广泛的规则。有些人宁愿投入一切而不是学习规则,以确保不会发生任何不希望的事情。