Объяснение кому-то, почему приведение типов не выполняется автоматически во время компиляции - PullRequest
2 голосов
/ 02 июня 2011

Недавно, когда я писал краткое введение в C для программистов на Фортране, один из них сказал, что программисты на Фортране спрашивали меня о приведении типов.По его мнению, на самом деле не имело смысла, что в C вы должны явным образом приводить переменные вместо того, чтобы компилятор делал это для вас автоматически.помогает избежать непреднамеренных ошибок.

Как бы вы это обосновали?

Ответы [ 2 ]

5 голосов
/ 02 июня 2011

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 исходный файл.Некоторые (многие ??) применения приведений просто неверны.

3 голосов
/ 02 июня 2011

В более общем смысле (к ответу pmg) бывают случаи, когда преобразование типов может быть выполнено безопасным образом, и бывают случаи, когда это невозможно.Кроме того, бывают случаи, когда он может делать что-то отличное от того, что вы хотите.

Приведение типа требуется , когда это может указывать на ошибку программиста.Указатели являются хорошим примером этого.Если у вас есть указатель на символ и вы назначаете его указателю на целое число, то для этого могут быть веские причины, но если это сделано случайно, вы можете получить ошибки шины или недопустимые результаты при разыменовании этого указателяна некоторых очень старых платформах размеры указателей были разными!).

Существуют обширные правила, когда происходит автоматическое преобразование типов и как это происходит.Некоторые люди предпочли бы бросить все, чем изучать правила, чтобы избежать нежелательных событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...