Есть ли какие-то преимущества в том, чтобы НЕ использовать прототипы функций в C? - PullRequest
2 голосов
/ 03 июня 2009

Я работаю с кодом C, который не содержит прототипов функций для определенного класса функций. Есть ли какие-либо преимущества в том, что вы не используете прототипы функций? Функции никогда не вызывают друг друга и не имеют параметров. Код сильно меняется, так что, может быть, это всего лишь одна строка для редактирования?

Ответы [ 9 ]

5 голосов
/ 03 июня 2009

Функциональные прототипы предназначены для внешних функций. Мое правило состоит в том, что каждая нестатическая функция получает прототип, кроме main (). Я использую опцию GCC «-Wmissing-prototypes». Обычно он ловит, когда я забываю объявить статическую функцию.

Кроме того, объявите функции в C следующим образом:

void function(void);

И не так:

void function();

Поскольку второй способ означает, что функция принимает неопределенное количество параметров, а это не то, что вам нужно (это для совместимости с pre-ANSI C).

4 голосов
/ 03 июня 2009

Нет .

И я даже не знаю, законно ли это в строгом порядке.

2 голосов
/ 04 июня 2009

«Код сильно меняется» при применении к прототипам функций также является неприятным запахом кода. Если интерфейс (сигнатура функции) сильно меняется, функции функции, вероятно, не очень ясны. Сначала постарайтесь выяснить, как разделить проблему на подответственность, и только после этого начните писать код.

1 голос
/ 03 июня 2009

Меньшее количество кода для изменения - единственное «преимущество», о котором я могу думать. Обычно это просто «ленивый»

В любом случае, недостатки более значительны: все функции должны быть в одном исходном файле; порядок функций в исходном файле теперь имеет значение и т. д. Кроме того, другие люди будут смущены, глядя на / для заголовочного файла ... лучшая практика - это .c и .h it.

1 голос
/ 03 июня 2009

"так может быть, это всего лишь на одну строку меньше, чтобы редактировать?"

Это единственное возможное «преимущество» в этом случае, простая лень.

0 голосов
/ 04 июня 2009

Это меньше печатает, так что, возможно, это снижает ваш риск для RSI.

0 голосов
/ 04 июня 2009

Единственное преимущество, которое я могу себе представить, это то, что он избавляет вас от необходимости копировать и вставлять первую строку функции в раздел прототипов вашего .c или .h файла.

Для функций, на которые есть ссылки в других файлах, у вас нет выбора, кроме как иметь прототип.

Для функций с областью действия файла (то есть статических функций) полезно иметь все прототипы в блоке в верхней части файла. Таким образом, любая статическая функция может быть вызвана другой из любого места в этом файле. Без прототипов функция A () может вызывать функцию B (), только если B () объявлена ​​над ней в коде.

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

Кроме того, если вы пишете код, который должен соответствовать MISRA-C, необходимо, чтобы у всех функций был прототип в области действия.

Я бы также высказался за то, чтобы в прототипе содержались имена параметров, а не только их типы (что является законным), поскольку он разъясняет назначение параметров, просто взглянув на прототип.

0 голосов
/ 03 июня 2009

Код сильно меняется, так что, возможно, это всего на одну строку меньше для редактирования?

Полагаю, в этом причина. Я не могу думать ни о какой другой причине - ни скорость компиляции не изменяется (практически), ни время выполнения, а только время обновления кода.

0 голосов
/ 03 июня 2009

Единственное преимущество, которое я вижу, это то, что вам не нужно обновлять прототипы функций каждый раз, когда вы меняете сами функции.

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