Diese Antwort beschreibt, warum der vorgeschlagene Code wenig zur Kompilierungszeit beiträgt, auf die sich derzeit keine der anderen Antworten bezieht.
Typischerweise besteht ein Teil der Grundstruktur eines modernen Compilers aus:
Der Teil, der die syntaktische Struktur analysiert, sieht ungefähr so aus: Wenn er a()
in einer Deklaration wie void a()
erkennt, ruft er eine Routine an einem anderen Ort im Compiler auf, der a
als Bezeichner mit dem Typ% co_de registriert %. Dies geschieht, wenn function returning void
erkannt wird, a()
erkannt wird und b()
erkannt wird.
Wichtig ist in diesem Fall, dass bei beiden vorgeschlagenen Codefolgen das Gleiche passiert: c()
, a()
und b()
werden alle erkannt und es wird die gleiche Sequenz von Routineaufrufen zur Registrierung dieser Bezeichner durchgeführt. Ab dann ist die Verarbeitung von ihnen identisch. In typischen Compilern gibt es keinen Unterschied in der Art, wie c()
, a()
und b()
behandelt werden.
Dies bedeutet, dass der einzige Unterschied in der Verarbeitung dieser Codefolgen durch den Compiler im lexikalischen Analysator und im Syntaxprozessor besteht. Für eine der Codefolgen gibt es ein paar mehr Zeichen und ein paar mehr Tokens, so dass die Codefolge wahrscheinlich etwas länger dauert. Mit der Geschwindigkeit heutiger Computer ist diese Zeit jedoch winzig.
Es ist möglich, dass geringfügige Unterschiede in der Verarbeitung Kaskadeneffekte haben können, wenn sie Auswirkungen darauf haben, was im Prozessor-Cache gespeichert ist oder welcher Speicher zugewiesen und freigegeben wird. Diese sind jedoch ganz nebensächlich, genauso wie, wenn ein Mechaniker an einem Auto arbeitet und seinen Schraubenschlüssel dabei in ein anderes Regal bewegt, kann das beeinflussen, wie lange es dauert, bis sie am nächsten Auto arbeiten, weil sie es getan haben um zum Regal zu gehen, um den Schraubenschlüssel zu bekommen. Es ist nur zufällig und nicht eine sinnvolle Ursache und Wirkung.
Ich wäre überrascht, wenn es überhaupt nicht wäre, da der Compiler anderen Code für die zwei Fälle ausführt, aber es ist unmöglich zu erraten, welcher schneller wäre und ob einer wäre durchweg schneller als der andere.
Ich wäre auch überrascht, wenn es möglich wäre, den Unterschied in irgendeiner sinnvollen Weise zu messen, da es wahrscheinlich niemals eine Frage von mehr als ein paar Mikrosekunden sein würde.
Wenn Sie Probleme mit der Kompilierungszeit haben, ist der Deklarationsstil nicht die Ursache.
Es gibt keinen großen Unterschied in der Kompilierzeit. Aber es ist besser, das zweite zu verwenden, weil es mehr Standard, lesbar und verständlich ist. Ich werde versuchen, diese Antwort mit Verweis auf die Kompilierzeit zu bearbeiten.
Warum sollte man für die erste Option gehen?
Beide scheinen die gleiche Zeit für mich zu nehmen, da es eine Erklärung ist. Compiler wird jedes als 3 void nehmen, wenn void einmal dreimal geschrieben wird. Aber ich werde die Kompilierungszeit im Detail betrachten.
Aber im Ernst, ein Programmierer wird sich für die zweite Stelle entscheiden, da er den Code-Code-Standards entspricht, die zur Schönheit des Codes führen.
Natürlich ist es das Gleiche. Niemand wird die erste Ausgabe schreiben
Frage, die es wert ist zu fragen. Wenn Sie die Angewohnheit haben, zu gehen und zu sehen, wie Ihr Compiler Ihren C ++ - Code tatsächlich in Assembly umwandelt, ist dies leichter zu beantworten: Die beiden Definitionen geben genau den Assembly-Code aus. Zum Beispiel habe ich einen kleinen Test kompiliert (mit Input und Output, um eine konstante Faltungsoptimierung zu vermeiden), und die beiden Versionen geben genau die gleiche binäre (byteweise identische) aus.
%Vor%Wenn Sie die Disassemblierung sehen, sehen Sie, dass die int-Deklarationen wie folgt kompiliert werden:
%Vor%Unabhängig von der verwendeten Syntax gibt es nur eine Möglichkeit, Variablenraum auf Assemblerebene zu reservieren. Alle Compiler reservieren lokalen Variablenraum in nur einer Anweisung.
Beide sind gleich, aber es ist immer gut, die zweite zu verwenden, damit der Code strukturierter, lesbarer und für andere Personen, die nicht Sie sind, leicht verständlich ist. Der erste wird mehr Verwirrung stiften.