Язык C: разница между float и void в функциях

Я учусь, как использовать функции в C, но я не могу понять, почему пока это:

    float TableauDebut(float size[], float poi[], char sex[], int nbElem)
{
    int i;
    for(i=0; i < nbElem; i++){
    printf("  %d)%.2f  %.2f  ", i, size[i], poi[i]);
    switch(sex[i]){
        case 'F': printf("Woman\n"); break;
        case 'M': printf("Man\n"); break;
    }
}

отображает мою таблицу, а также использование Void

Но когда я пытаюсь сделать то же самое в Java:

static void TableauDebut(double [] size, double [] poi, char [] sex, int nbElem)
{

    int i;
    for(i=0; i < nbElem; i++){
    System.out.printf("  %d)%.2f  %.2f  ", i, size[i], poi[i]);
    switch(sex[i]){
        case 'F': System.out.printf("Femme\n"); break;
        case 'M': System.out.printf("Homme\n"); break;
    }
}

Я могу просто использовать void, а не double

В чем разница между использованием float и void в языке C и почему я не могу сделать то же самое в Java?

1 ответ

Решение

void тип возврата означает, что ваша функция не возвращает значение. Все остальное означает, что ваша функция должна возвращать объект этого типа (или, где это применимо, что-то, что может быть преобразовано в этот тип).

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

Java защищает вас от этого и не может скомпилировать код.

Другие вопросы по тегам