Прототип функции объявлен внутри основного – лучшая практика?

Это хороший стиль, чтобы прототип функции был объявлен внутри основной функции?

Я смотрел учебник C, я думаю, что он устарел. Однако они объявляют прототип функции внутри основного. Обычно я объявляю снаружи перед основным.

#include  int main () { char myname [30]; int theage; int getage (); printf ("\nEnter your name:"); gets (myname); theage = getage (); printf("\n AGE = %d and NAME = %s", theage, myname); return 0; } int getage () { int myage; /* local to only getage() */ printf ("\nEnter your age: "); scanf ("%d",&myage); return (myage); } 

Я лично сказал бы «нет» по нескольким причинам:

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

Я также скажу «нет» с дополнительной причиной, что, если вы начнете использовать явные объявления по всему коду, вы, безусловно, получите неудовлетворительные внешние значения, когда функция, которую вы вызываете, внезапно меняет свою подпись. Если в ОДНОМ заголовочном файле есть ОДНОЕ объявление, вам нужно только изменить объявление ONE, когда функция изменится.

Однако я бы сказал «да» по следующей причине: если вы просто пишете простой метод тестирования, написанный только для одного использования, т. Е. Если вы хотите быстро протестировать что-то действительно, а затем сразу же отбросить функцию. Тогда это может быть отличным, чтобы просто вставить объявление прямо перед тем, как вы хотите позвонить.

Для производственного кода -> Нет, нет! 🙂

Это не хороший стиль.

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

Функция protoypes (и внешние переменные) также может быть объявлена ​​почти везде на c-языке. Однако, просто потому, что это возможно, не должно быть никаких оснований писать стиль спагетти C.

Это делает код менее читаемым. Для меня такая практика является явным признаком кодового запаха.

Я думаю, что это всего лишь небольшой пример для учебника … это то, что вы делаете, когда начинаете вводить функции …

Я согласен с Нилом …

Поскольку я не перескакивал необходимое количество обручей в этом шоу пони, у меня нет выбора, кроме как отправить этот комментарий в качестве ответа.

Имейте в виду, что это всего лишь fragment книги, а не тот код, который вы видите в рабочей среде. Фрагмент кода хорош, но не идеален. Нейл дал лучший ответ, поэтому я дал ему +1. Я бы отметил его 3-й пункт, если вы действительно хотите знать, как это делается за пределами учебников / текстовых книг.

Кроме того, точка, с которой я их делаю: «stdio.h» vs – это просто способ сообщить препроцессору, где искать файл stdio.h. Опять же, в большинстве ситуаций вы увидите stdio.h, окруженный <> вместо “”. Тем не менее, ваши собственные файлы заголовков, упомянутые 3-м пунктом Нила, будут окружены “”.