Почему это работает? Функция 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 со вторым вариантом.