2016-04-07 7 views

Antwort

3

Es sind keine Grenzen gesetzt, aber die Wartungsfreundlichkeit wird bei maximal 30 Zeilen berücksichtigt. Sollte wenn möglich verwendet werden.

+1

Wird ein Programm langsamer ausgeführt, wenn es eine 1-Funktion mit 200.000 Zeilen Code im Vergleich zu 100 Funktionen mit je 2.000 Zeilen gibt? – anarchyistheanswer

+0

Es wird möglicherweise wegen der erhöhten Stapelgröße und Verzweigungsbefehle langsam ausgeführt (Ein IF beginnt bei 10000. Zeile und endet bei 12400 Zeile). – Ajay

+0

Ich bevorzuge max 10-20 max LOC, aber kurze Funktionen machen Code Lesbarkeit ++ und Wartbarkeit ++ – CppChris

4

Es gibt keine Obergrenze, wie viele Codezeilen Ihre Methode haben sollte. Aber Sie müssen sicherstellen, dass Ihre Funktion nur eine Sache macht.

Vom book:

Von Zeit zu Zeit, ein komplexer Algorithmus zu einer längeren Routine führen, und unter diesen Umständen sollte die Routine erlaubt seine organisch bis zu 100-200 Linien zu wachsen . (Eine Zeile ist eine noncomment, nonblank Zeile des Quellcodes.) Jahrzehnte der Beweise sagen, dass Routinen von solchen Länge sind nicht fehleranfälliger als kürzere Routinen. Lassen Sie Probleme wie als Tiefe der Verschachtelung, Anzahl der Variablen und andere komplexitätsbezogene Überlegungen diktieren die Länge der Routine statt auferlegen eine Längenbeschränkung per se.

Wenn Sie Routinen länger als etwa 200 Zeilen schreiben möchten, seien Sie vorsichtig. Keine der Studien, die berichtet, verringerte Kosten, verringerte Fehler Preise, oder beide mit größeren Routinen unterschieden zwischen Größen größer als 200 Zeilen, und Sie sind verpflichtet, in eine obere Grenze von Verständlichkeit zu laufen, wenn Sie 200 Zeilen Code übergeben .

+0

Ich sehe, danke. Was ist mit der Hauptfunktion, ist es akzeptabel, ein paar hunderttausend Zeilen Code in der Hauptfunktion zu haben? Was sind die Nachteile einer Funktion, die viele verschiedene Operationen ausführt? – anarchyistheanswer

+0

@anarchyistheanswer: - Wie gesagt, 'main' ist auch eine Funktion, also wäre es besser, wenn Sie Ihre' main' Funktion unterbrechen und die verschiedenen Operationen in verschiedenen Funktionen schreiben und von Ihrem 'main' aus aufrufen könnten besser lesbar und wird als eine gute Praxis angesehen –

+1

@anarchyistheanswer: - Soweit der Nachteil betrachtet wird, wäre die größte, wenn Sie für einen Fehler debuggen wollen, dann wäre es ein Albtraum, "200.000 Zeilen Code" zu debuggen (* was du unten kommentiert hast *). Außerdem wäre es für zukünftige Programmierer, die daran arbeiten werden, möglicherweise weniger lesbar. –

1

Wenn eine Funktion zu groß ist (> 60 Code-Anweisungszeilen, ausgenommen Kommentare/Leerzeilen), ist sie schwer zu verstehen und zu debuggen. Es wäre schwierig, die Funktion zu ändern. Es würde zu viele Variablen haben, würde wegen der Variablen mehr unerwünschte Stapelgröße benötigen.

Das Programm muss immer in Teile zerlegt werden. Jede Funktion sollte individuelle Arbeit leisten. Eine sort Funktion, zum Beispiel sollte nicht filter, oder erlauben zusätzliche Parameter zu optional Filter. Im weiteren Verlauf sollte die funktionale Zerlegung in die Zerlegung auf Objektebene gehen.

Lesen Sie über minimale Kopplung hohe Kohäsion.

3

Die C++ 11 Standard-Annex B-Staaten:

Da Computer endlich sind, sind C++ Implementierungen zwangsläufig in der Größe der Programme beschränkt sie können erfolgreich Prozess. Jede Implementierung muss diese Einschränkungen dokumentieren, soweit sie bekannt sind.

Die Grenzwerte können Mengen einschränken, die die unten beschriebenen oder andere enthalten. Die Klammerzahl nach jeder Menge wird als Minimum für diese Menge empfohlen. Diese Mengen sind jedoch nur Richtwerte und bestimmen nicht die Einhaltung.

Und geht auf die folgenden empfohlenen Mindest aufzulisten, die eher in einem riesigen Funktion getroffen werden (insbesondere, wenn es automatisch generiert ist):

- Nesting Ebenen zusammengesetzte Anweisungen, Iteration Kontrollstrukturen und Auswahlkontrollstrukturen [256].

- Bezeichner mit Block Scope in einem Block deklariert [1 024].

- Zeichen in einer logischen Quellzeile [65 536].

- Fallbezeichnungen für eine switch-Anweisung (ausgenommen solche für verschachtelte switch-Anweisungen) [16 384].

- Handler pro Versuch Block [256].

Sie sollten also Ihre Implementierungsdokumentation überprüfen, wenn Sie über die empfohlenen Mindestwerte hinausgehen. Die meisten Compiler haben entweder viel höhere oder gar keine Grenzen.

0

Ich werde dir keinen Rat geben. Ich werde nur versuchen, deine Frage zu beantworten.

Es gibt keine obere (oder untere) Grenze für die Länge einer Funktion im C++ - Standard. Es ist höchst unwahrscheinlich, dass Sie in einer Programmierlebenszeit eine einzelne Funktion schreiben könnten, die die Kapazität moderner Compiler wie VS oder GCC übersteigen würde. Ich würde erwarten, dass die praktische Obergrenze weit über 100.000 Zeilen und wahrscheinlich 1 Million oder mehr liegt.

Natürlich sollten Sie nicht so große Funktionen schreiben, aber eines der nützlichen Dinge, die Sie tun können, ist ein Programm schreiben, das C++ - Code ausgibt, den Sie dann kompilieren. In diesem Fall wäre es nicht ungewöhnlich, eine einzige Funktion von beträchtlicher Größe zu haben.

+0

Mit großen generierten Code-Dateien (thx für die Erwähnung dieser) werden wir tatsächlich Probleme mit Funktionen, die 16k + Zeilen haben. Der Compiler ist ein ARM-Compiler. Visual C++ geht immer noch gut. – tiands

Verwandte Themen