Я изучаю C, и я видел в книге, что прототип функции имеет пустой f формы () и в объявлении функции или в функции вызова, f функция берет аргументы.
Таким образом В объявлении функции у нас есть что-то как пустота f (долго удваивают y [], долго удваивают A), и в вызове функция является f (y, A).
Функция делает операции на массиве y т.е. когда функция вызвана, некоторые элементы в массиве y изменяются. A является просто постоянным численным значением, которое не изменяется. У меня есть два вопроса:
При определении прототипа функции наверху в программе как пустой f () хорошая практика? Или лучше поместить его так же пустой f (долго удваивают y [], долго удваивают A), как в объявлении функции?
Вызванная функция f изменяет элементы в массиве y. Действительно ли пусто правильный тип возврата? Программа хорошо работает как таковая с пустотой, как описано.
Или если я изменяю все свои "пустоты" на "длинный двойной".
Я работаю с длинным дважды, поскольку мне нужно как можно больше точности, хотя на моей машине и дважды и долго удваиваются, дает мне 15 цифр точности.
Большое спасибо
Если определение прототипа функции на вершине программы как void f () - это хорошая практика? Или лучше указать как void f (long double y [], long double A), как в объявлении функции ?
Определенно последнее - первый не дает компилятору никакой информации о типе для проверок во время компиляции. void f ()
сообщает компилятору, что f
принимает неуказанный список аргументов. Т.е. все идет.
Вызываемая функция f изменяет элементов в массиве y. Является ли void правильным возвращаемым типом ? Программа как таковая работает нормально с пустотой, как описано в .
Тип возвращаемого значения не имеет ничего общего с изменяемым параметром. У вас может быть тип возврата, отличный от void
, если вы хотите указать код успеха.
Ваш вопрос страдает терминологической путаницей.
void f();
является не прототипом функции в C. Это объявление функции , которое не представляет прототип. Между тем
void f(long double y[], long double A);
также является объявлением функции, а это прототип (т.е. он представляет прототип для f
).
Чтобы ответить на ваши вопросы, да, всегда рекомендуется объявлять функции с прототипами (т.е. лучше объявлять их с прототипами, чем без прототипов). Обычно вы должны объявлять прототипы для всех ваших внешних функций (и void f ()
не является прототипом).
Что касается возвращаемых типов, все зависит от ваших намерений. Я не понимаю, как тот факт, что вы меняете элементы массива, должен улучшить возврат long double
вместо void
.
Нет, не следует иметь объявление с неопределенными аргументами. В C (но не в C ++) разрешено объявлять функцию как f ()
без указания аргумента, но следует избегать использования этой функции. Если функция не принимает никаких аргументов, используйте f (void)
, чтобы явно отметить это. Если функция принимает аргумент, всегда включайте типы аргументов в объявление.