C прототип функции: освободите f (). Это рекомендуется?

Я изучаю C, и я видел в книге, что прототип функции имеет пустой f формы () и в объявлении функции или в функции вызова, f функция берет аргументы.
Таким образом В объявлении функции у нас есть что-то как пустота f (долго удваивают y [], долго удваивают A), и в вызове функция является f (y, A).
Функция делает операции на массиве y т.е. когда функция вызвана, некоторые элементы в массиве y изменяются. A является просто постоянным численным значением, которое не изменяется. У меня есть два вопроса:

  1. При определении прототипа функции наверху в программе как пустой f () хорошая практика? Или лучше поместить его так же пустой f (долго удваивают y [], долго удваивают A), как в объявлении функции?

  2. Вызванная функция f изменяет элементы в массиве y. Действительно ли пусто правильный тип возврата? Программа хорошо работает как таковая с пустотой, как описано.
    Или если я изменяю все свои "пустоты" на "длинный двойной".
    Я работаю с длинным дважды, поскольку мне нужно как можно больше точности, хотя на моей машине и дважды и долго удваиваются, дает мне 15 цифр точности.

Большое спасибо

7
задан yCalleecharan 4 April 2010 в 09:59
поделиться

3 ответа

Если определение прототипа функции на вершине программы как void f () - это хорошая практика? Или лучше указать как void f (long double y [], long double A), как в объявлении функции ?

Определенно последнее - первый не дает компилятору никакой информации о типе для проверок во время компиляции. void f () сообщает компилятору, что f принимает неуказанный список аргументов. Т.е. все идет.

Вызываемая функция f изменяет элементов в массиве y. Является ли void правильным возвращаемым типом ? Программа как таковая работает нормально с пустотой, как описано в .

Тип возвращаемого значения не имеет ничего общего с изменяемым параметром. У вас может быть тип возврата, отличный от void , если вы хотите указать код успеха.

7
ответ дан 6 December 2019 в 08:42
поделиться

Ваш вопрос страдает терминологической путаницей.

void f();

является не прототипом функции в C. Это объявление функции , которое не представляет прототип. Между тем

void f(long double y[], long double A);

также является объявлением функции, а это прототип (т.е. он представляет прототип для f ).

Чтобы ответить на ваши вопросы, да, всегда рекомендуется объявлять функции с прототипами (т.е. лучше объявлять их с прототипами, чем без прототипов). Обычно вы должны объявлять прототипы для всех ваших внешних функций (и void f () не является прототипом).

Что касается возвращаемых типов, все зависит от ваших намерений. Я не понимаю, как тот факт, что вы меняете элементы массива, должен улучшить возврат long double вместо void .

10
ответ дан 6 December 2019 в 08:42
поделиться

Нет, не следует иметь объявление с неопределенными аргументами. В C (но не в C ++) разрешено объявлять функцию как f () без указания аргумента, но следует избегать использования этой функции. Если функция не принимает никаких аргументов, используйте f (void) , чтобы явно отметить это. Если функция принимает аргумент, всегда включайте типы аргументов в объявление.

4
ответ дан 6 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: