Язык 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 защищает вас от этого и не может скомпилировать код.