функция типа double без возврата - PullRequest
1 голос
/ 14 июля 2020

Я хочу представить значения функции sin в интервале от 0 до 2Pi:

#include <stdio.h>
#include<math.h>

double sinus(double lower, double upper, double step){
double i;
for(i=lower; i<=upper;i=i+step){
    
    printf("%13.3f%14.3f\n",i,sin(i));
}

}

int main () {

printf("        x-Value       y-Value\n\n");
sinus(0, 2 * M_PI,M_PI/8);


return 0;
}

Почему это работает? Функция sinus не возвращает значение типа double?

1 Ответ

0 голосов
/ 14 июля 2020

Почему это работает? Функция sinus не возвращает значение типа double?

На самом деле не работает ... мой компилятор (clang 11.0) выдает предупреждение:

return.c:11:1: warning: control reaches end of non-void function [-Wreturn-type]

Это работает в том смысле, что это не ошибка компиляции (если вы не настроили компилятор на обработку предупреждений как ошибок). Это работает в том смысле, что вы в любом случае не используете возвращаемое значение из sinus(), поэтому вам все равно, что находится в возвращаемом значении.

Если бы вы были использовали результат из sinus(), то ваш код будет сломан в том смысле, что он не делает чего-то значимого. В зависимости от компилятора и деталей программы вы всегда можете получить одно и то же возвращаемое значение или можете получить какое-то случайное значение мусора; в любом случае значение не будет иметь смысла.

TL / DR: Не делайте этого.

Есть ли способ сделать это правильно, не используя void вместо double?

Есть два очевидных способа решить проблему. Вы можете оставить объявление sinus() как есть и изменить тело так, чтобы оно возвращало double в соответствии с объявлением:

double sinus(double lower, double upper, double step){
    double i;
    for(i=lower; i<=upper;i=i+step){
        printf("%13.3f%14.3f\n",i,sin(i));
    }
    return 0.0;
}

Или вы можете изменить тип возвращаемого значения sinus(), чтобы вам не нужно ничего возвращать:

void sinus(double lower, double upper, double step){
    double i;
    for(i=lower; i<=upper;i=i+step){
        printf("%13.3f%14.3f\n",i,sin(i));
    }
}

В реализации sinus() нет ничего, что вам, кажется, нужно вернуть, и нет причин в main() смотреть на возвращаемое значение, I 'd go со вторым вариантом.

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