Deklarieren von Variablen hinter der Schleife oder innerhalb der Schleife? - Seite 6

 
Georgiy Merts:

Ich persönlich mag es nicht, wenn eine Vielzahl von Variablen in einem Programm verstreut ist und ich jedes Mal nachsehen muss, wo eine Variable erstellt wird. Aus diesem Grund versuche ich, wann immer möglich, alle Variablen zusammen am Anfang einer Funktion zu deklarieren, damit ich sehen kann, wo sie erstellt werden, und weiß, wann sie gelöscht werden sollen.

Was meinen Sie mit "im ganzen Programm verstreut"? Eine lokale Variable wird nur in dem Block deklariert und angewendet, in dem sie verwendet wird, und wenn Sie sie suchen müssen, bedeutet das, dass Ihr Code so lang ist, dass Sie sie nicht finden können.

Alle Variablen am Anfang einer Funktion zu deklarieren, ist einfach ein schlechter, archaischer Stil. Selbst der alte Strastrup drängte darauf, solche Old-School-Relikte des alten C zugunstenvon richtigem und zuverlässigem Code abzulehnen: eine Variable genau dort zu deklarieren, wo sie verwendet wird. Ist Ihnen nicht klar, dass Ihr Ansatz mit vielen zufälligen Fehlern behaftet ist? Initialisieren Sie Variablen mit irgendetwas? Oder nehmen Sie es einfach "locker" und müssen dann mit unvorhersehbarem Code-Verhalten rechnen? ) Vielleicht war das früher aufgrund von leistungsschwacher Hardware und schwachen Compilern gerechtfertigt, aber heute sicher nicht mehr.

 
pivalexander:

Sie sind immer spöttisch auf Bücher und lobt sich selbst, aber das Wesen des Problems und sagte nichts, aber die Theorie um den heißen Brei, lesen Sie es, Sie werden verstehen ... Arbeitsspeicher und CPU, CPU und Arbeitsspeicher, die Stromversorgung - auch dort wird sie verwendet!

Im Gegensatz dazu müssen diejenigen, die den Sinn meiner Texte verstehen wollen, und die elenden Programmierer immer mit dem Löffel gefüttert werden und eine fertige Antwort auf dem Silbertablett bekommen, sie wollen nie etwas verstehen. Daher sind meine Empfehlungen, obwohl sie als Antwort auf Sie geschrieben wurden, wahrscheinlich nicht für Sie, sondern für diejenigen, die lernen und ihre Fähigkeiten perfektionieren wollen.

Ich glaube, es gibt zwei Arten von Menschen - diejenigen, die, nachdem sie eine Harke auf ihrem Weg gesehen haben, nur durch einen Test das Ergebnis bestimmen können, wenn sie darauf treten, und diejenigen, die die elementaren Gesetze der Physik und die Daten über das Gewicht der Elemente kennen, können das Ergebnis im Voraus bestimmen, ohne darauf zu treten.

 
Alexey Navoykov:

Alle Variablen am Anfang einer Funktion zu deklarieren, ist einfach ein schlechter archaischer Stil - selbst der alte Strastrup drängte darauf, diese Überbleibsel der alten C-Schule zugunsten von richtigem und zuverlässigem Code zu verwerfen : die Variable direkt dort zu deklarieren, wo sie verwendet wird.

imho, bravo! - Überzeugend ist, dass es bei der Verwendung von Variablen im lokalen Bereich weniger wahrscheinlich ist, auf eine nicht initialisierte Variable zu stoßen, oder vielmehr auf einen Wert, der in der vorherigen Verwendung der Variable enthalten war, der Compiler keine Warnung ausgibt und die Suche nach solchen kleinen Bösewichten mühsam ist.

Durch das Thema und Tests, na ja, über nichts, mehr als 5-7% der Unterschied ist nicht sichtbar, und es ist nicht eine Tatsache, dass das Verhalten in den nächsten Builds nicht ändern wird

 
Aleksandr Matveev:

Diejenigen, die brauchen - die Bedeutung meiner Texte werden verstehen, und wehe, Programmierer müssen immer kauen und eine fertige Antwort auf einem Tablett geben, sie wollen nie etwas verstehen. Daher sind meine Empfehlungen, obwohl sie als Antwort auf Sie geschrieben wurden, wahrscheinlich nicht für Sie, sondern für diejenigen, die lernen und ihre Fähigkeiten perfektionieren wollen.

Ich glaube, dass es zwei Arten von Menschen gibt - diejenigen, die, nachdem sie einen Rechen auf ihrem Weg gesehen haben, nur durch einen Test das Ergebnis bestimmen, wenn sie darauf treten, und diejenigen, die die elementaren Gesetze der Physik kennen, die Daten über das Gewicht der Elemente können das Ergebnis vorhersagen, ohne darauf zu treten.

Ich glaube, es gibt zwei Arten von Menschen - die mit aufgeblasenen Hochmut, diejenigen, die Ihr Selbstwertgefühl zu amüsieren kam und sie haben keine wirklich nützliche Kommentare zu dem Thema hier, meiner Meinung nach haben sie nicht einmal in sie vertiefen ...

und dann gibt es noch die... Macht nichts, du bist es sowieso nicht:)

Aleksandr Matveev:

Ich habe den Verdacht, dass der Autor dieser Aussage keine Ahnung hat, wie der Prozessor, der Speicher und der Compiler funktionieren... Ich wette, dass jeder Ihrer Codes mindestens um das Zehnfache oder sogar um das Hundertfache beschleunigt werden kann. Wegen solch beschissener Programmierer sind die meisten Produkte auf den leistungsstärksten Computern mit Dutzenden von Kernen unerträglich langsam, während Sie nur ein wenig denken müssen... Aber manche Leute denken: "Warum denken? Du musst kodieren..."

Und ich habe den Verdacht, dass du immer noch auf dem Niveau von"87, beginnend mit dem EC1020 und dem ZX Spectrum" festhängst.

"Shitcoder" bist du, deshalb hast du 600 Leute eingestellt...

Keine Beleidigung

PS: beschleunigen Sie meinen Code, ok, nicht um Hunderte, aber zumindest um das Zehnfache, der Code ist am Anfang des Threads, im ersten Beitrag, wenn Sie natürlich kein Shitcoder sind, können Sie jeden meiner Codes um das 10- oder 100-fache beschleunigen, kommen Sie...

 
pivalexander:

Ich glaube, es gibt zwei Arten von Leuten - die mit aufgeblasenem Gehabe und die, die nur kommen, um ihr Ego zu amüsieren, und die keinen einzigen wirklich nützlichen Kommentar zu dem Thema haben, meiner Meinung nach haben sie sich nicht einmal damit beschäftigt

und dann gibt es noch die... Macht nichts, du bist es sowieso nicht :)

Und ich habe den Verdacht, dass Sie immer noch auf dem Niveau von"87 Jahren, beginnend mit EU1020 und ZX Spectrum" verharren.

"Shitcoder" bist du, deshalb hast du 600 Leute eingestellt...

Keine Beleidigung

sechs Seiten Diskussion über solchen Unsinn, ich bin leise wütend ))))) die Degradierung des Forums ist offensichtlich )))

 
Igor Makanu:

imho, bravo! - Überzeugend ist, dass es bei der Verwendung von Variablen im lokalen Bereich weniger wahrscheinlich ist, auf eine nicht initialisierte Variable zu stoßen, oder vielmehr auf einen Wert, der in der vorherigen Verwendung der Variable enthalten war, der Compiler keine Warnung ausgibt und die Suche nach solchen kleinen Bösewichten mühsam ist.

Um das Thema und Tests, gut, über nichts, mehr als 5-7% Unterschied ist nicht sichtbar, und es ist nicht eine Tatsache, dass das Verhalten in den nächsten Builds nicht ändern wird

Wussten Sie, dass die Deklaration einer lokalen Variable ohne Initialisierung nicht garantiert, dass sie einen Nullwert hat? Schließlich wird er auf dem Stapel erstellt und dort kann alles sein.

void Func()
{
   int n = 0;// только так
   ....
}
P.S. Ich selbst bin der Sünde der Diskussion verfallen ))
 
Igor Makanu:

zu dem Thema und den Tests, nun, es ist so gut wie nichts, es sind nicht mehr als 5-7% Unterschied zu sehen, und es ist nicht sicher, dass sich das Verhalten in den nächsten Builds nicht ändern wird

Ja, idealerweise sollte es überhaupt keinen Unterschied geben, da die Situation recht einfach zu optimieren ist. Und selbst wenn der Schleifenkörper in einer separaten Funktion untergebracht ist, wird es sicher dasselbe sein. Aber die Paranoiker müssen diese Zeichenfolge per Verweis in eine Funktion ziehen, was den Code verkompliziert)
 
Alexey Navoykov:
Ja, idealerweise sollte es überhaupt keinen Unterschied geben, da die Situation recht einfach zu optimieren ist. Und selbst wenn wir den Schleifenkörper in eine separate Funktion packen, wird es dasselbe sein, da bin ich mir sicher. Aber Paranoiker müssen diese Zeichenfolge per Verweis in eine Funktion ziehen, was den Code verkompliziert)

Die Testergebnisse sollten von Start zu Start um 5-15% schwanken, da der Wind kein Echtzeitbetriebssystem ist.

 
Alexey Volchanskiy:

Wussten Sie, dass die Deklaration einer lokalen Variable ohne Initialisierung nicht garantiert, dass sie einen Nullwert hat? Schließlich wird er auf dem Stapel erstellt, und da kann alles drin sein.

P.S. Hier bin ich selbst in die Sünde der Diskussion verfallen )))

))))) Wow!

SZZ: Die Initialisierung bei der Deklaration einer Variablen ist die Grundlage für das Schreiben eines fehlerfreien Codes... sogar der Compiler wird Ihnen etwas sagen ;)

 
Igor Makanu:

))))) wow!

ZS: Die Initialisierung bei der Deklaration einer Variablen ist die Grundlage für das Schreiben eines fehlerfreien Codes... sogar der Compiler wird hier etwas sagen ;)

Ich habe gerade einen Haufen Leute kennengelernt, die glauben, dass der Compiler auf lokale Variablen genauso reagiert wie auf globale.

Und der Compiler gibt keine Haftbefehle aus

void OnTimer()
{
    string st;
    int n;
    Print(st, n);// специально печатаем неиниализированные, варнингов нет
    for (int i = 0; i < 1000; i++)
    {
        st = IntegerToString(i);
    }
}