С ++ Функциональные соглашения? - PullRequest
0 голосов
/ 26 октября 2010

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

Однако я всегда делал это по-другому - функции сверху main() снизу и не используют предварительные объявления, и я не думаю, что когда-либо видел это иначе.

Что правильно? Или это скорее случай личных предпочтений? Некоторое разъяснение будет очень цениться.

Ответы [ 8 ]

10 голосов
/ 26 октября 2010

Это зависит от вас. Лично я держу main снизу, потому что, когда у меня есть другие функции, это либо одна или две другие маленькие функции, либо фрагмент кода.

В реальном коде вы, вероятно, разбили бы ваш проект на части (наличие нескольких «не связанных» функций в файле - это плохо), и поэтому main, скорее всего, был бы почти единственным в файле. Вы бы просто #include вещи main нужно, чтобы все заработало и использовало их.

5 голосов
/ 26 октября 2010

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

При объявлении функций вперед вы не столкнетесь с этой проблемой.

Кроме того, если main() в качестве первой функции, вы создадите более читаемый код, но это, возможно, просто личное предпочтение.
Это также может быть более читабельным, поскольку другой кодер имеет обзор функций, которые оннайду в файле.

3 голосов
/ 26 октября 2010

Стандартное использование наиболее профессиональных разработчиков на C ++:

  • два файла на класс : файл заголовка (например, Class.h) , который объявляет только все члены и функции данных класса;и файл реализации (названный Class.cpp в том же примере), содержащий только реализации этих функций.
  • основная функция (если она есть в вашем решении) входит в файл с именем,например, Main.cpp все по отдельности.

Можно использовать несколько классов или даже всю программу в одном файле, когда вы работаете над небольшими домашними или школьными проектами.Из-за небольшого масштаба не имеет значения, как вы упорядочиваете классы или функции.Вы можете делать то, что вам удобнее.Но если ваш профессор требует, чтобы студенты следовали определенным стандартам кода для домашней работы (например, сначала поставили main ()), тогда вы должны следовать этим стандартам.

3 голосов
/ 26 октября 2010

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

2 голосов
/ 26 октября 2010

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

0 голосов
/ 26 октября 2010

Я думаю, что здесь применяется принцип «Не повторяй себя».Если вы используете предварительную декларацию, вы повторяете себя без необходимости.

0 голосов
/ 26 октября 2010

Я обычно использую вторую форму, потому что вы должны поддерживать объявления функций - они должны иметь правильную сигнатуру и имя, и imo, они просто чрезмерно печатают, когда вы можете сначала определить функции.Без обслуживания, без потерь времени.

0 голосов
/ 26 октября 2010

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

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

И последнее, я сказал, чтобы быть последовательным?

...