2016-04-07 2 views

ответ

3

Нет ограничений, но при этом поддерживается ремонтопригодность около 30 линий макс. Следует использовать, если это возможно.

+1

Будет ли программа работать медленнее, если скажем, 1 функция с 200 000 строк кода против 100 функций с 2000 строк каждая? – anarchyistheanswer

+0

Возможно, он будет работать медленнее из-за увеличения размера стека и инструкций ветвления (IF начинается с 10000-й линии, заканчиваясь на линии 12400). – Ajay

+0

Я предпочитаю max 10-20 max LOC, но короткие функции действительно делают удобочитаемость кода ++ и ремонтопригодность ++ – CppChris

4

Существует не верхний предел относительно того, сколько строк кода должен иметь ваш метод. Но вам нужно убедиться, что ваша функция делает только одно.

Из book:

Время от времени, сложный алгоритм приведет к более рутина, и в тех случаях, программа должна иметь возможность расти органически до 100-200 линий , (Линия представляет собой некоммерческую, непустую строку .) Десятилетия доказательств говорят о том, что процедуры такой длины не более подвержены ошибкам, чем более короткие процедуры. Пусть такие вопросы, как , как глубина гнездования, число переменных и другие связанные с сложностью соображения, определяют продолжительность процедуры, а не налагают ограничение по длине как таковое.

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

+0

Я вижу, спасибо. как насчет основной функции, допустимо ли иметь несколько сотен тысяч строк кода в основной функции? Каковы недостатки, связанные с тем, что одна функция выполняет много разных операций? – anarchyistheanswer

+0

@anarchyistheanswer: - Как я уже сказал, 'main' также является функцией, поэтому было бы лучше, если бы вы могли нарушить свою« главную »функцию и написать разные операции в разных функциях и вызвать ее из вашей« основной », которая была бы более читабельна и будет считаться хорошей практикой –

+1

@anarchyistheanswer: - Насколько считается недостаток, самым большим будет то, что вы хотите отлаживать ошибку, тогда было бы кошмаром отлаживать «200 000 строк кода» (*, который вы прокомментировали ниже *). Кроме того, это было бы очень менее читаемо для будущих кодеров, которые будут/могут работать над ним. –

1

Если функция слишком большая (> 60 строк кода, исключая комментарии/пустые строки), то это трудно понять и отладить. Было бы сложно изменить функцию. Из-за переменных у него было бы слишком много переменных, потребуется больше ненужного размера стека.

Программа всегда должна быть разбита на куски. Каждая функция должна выполнять индивидуальную работу. Функция sort, например, не должна filter, или разрешить дополнительный параметр , необязательно, фильтр. Двигаясь вперед, функционально-декомпозиция должна перейти в декомпозицию уровня объекта.

Подробнее о минимальное сцепление с высокой степенью сцепления.

3

В C++ 11 Стандарт Приложения B гласит:

Поскольку компьютеры являются конечными, реализации C++ неизбежно ограничены в размерах программ, которые они могут успешно процесс. Каждая реализация должна документировать те ограничения, которые известны.

Пределы могут ограничивать количества, которые включают в себя описанные ниже или другие. Число в скобках после каждой величины рекомендуется как минимум для этой величины. Однако эти величины являются только рекомендациями и не определяют соответствия.

И продолжает перечислять следующие рекомендуемые минимумы, которые могут быть более вероятно, пострадают в огромной функции (особенно если это генерируется автоматически):

- уровней вложенности составных высказываний, итерация управляющие структуры и структуры управления выбором [256].

- Идентификаторы с объемом блока, объявленным в одном блоке [1 024].

- Персонажи в одной логической строке источника [65 536].

- Ярлыки ярлыков для оператора switch (исключая их для любых вложенных операторов switch) [16 384].

- Обработчики на блок try [256].

Таким образом, вы можете предпочесть проверить свои документы по реализации, если вы выходите за эти рекомендуемые минимумы. Большинство компиляторов woudl либо имеют намного более высокие пределы, либо вообще не имеют никаких ограничений.

0

Я не дам вам совета. Я просто попытаюсь ответить на ваш вопрос.

Не существует верхнего (или нижнего) предела, определенного для длины функции в стандарте C++. Весьма маловероятно, что за всю жизнь программирования вы могли бы написать одну функцию, которая будет превосходить возможности современных компиляторов, таких как VS или GCC. Я ожидал бы, что практический верхний предел будет превышать 100 000 строк и, вероятно, 1 миллион или более.

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

+0

Имея большие сгенерированные файлы кода (thx для упоминания об этом), мы действительно получаем проблемы с функциями, имеющими строки 16k +. Компилятор является компилятором ARM. Visual C++ все еще работает хорошо. – tiands

Смежные вопросы