Прототип функции C: void f (). Это рекомендуется? - PullRequest
7 голосов
/ 04 апреля 2010

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 04 апреля 2010

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

void f();

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

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

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

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

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

7 голосов
/ 04 апреля 2010

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

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

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

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

4 голосов
/ 04 апреля 2010

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

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