Konzept des Schlüsselworts „auto“ in c

Lesezeit: 6 Minuten

Benutzer-Avatar
Renjith G

Könnten Sie mir bitte das genaue Konzept des Schlüsselworts geben auto in einem C-Programm.

Als ich das Buch durchblätterte Tiefe C-Geheimnisseich habe dieses Zitat gesehen:

Das auto Schlüsselwort ist anscheinend nutzlos. Es ist nur für einen Compiler-Schreiber von Bedeutung, der einen Eintrag in eine Symboltabelle macht. Es besagt, dass dieser Speicher beim Betreten des Blocks automatisch zugewiesen wird (im Gegensatz zur globalen statischen Zuweisung oder dynamischen Zuweisung auf dem Heap). Auto ist für andere Programmierer irrelevant, da Sie es standardmäßig erhalten.

  • In C++0x hat auto aber eine ganz andere Bedeutung. en.wikipedia.org/wiki/C%2B%2B0x#Type_inference

    – Sedat Kapanoglu

    14. Januar 2011 um 7:37 Uhr

  • @ssg: C++ ist nicht die gleiche Sprache wie C. Das hat nichts mit der Frage zu tun.

    – Cody Grey

    14. Januar 2011 um 7:45 Uhr

  • Deshalb ist es ein Kommentar, Cody, keine Antwort.

    – Sedat Kapanoglu

    14. Januar 2011 um 7:58 Uhr

  • Mögliches Duplikat von Where is the C auto keyword used?

    – Michail

    3. Mai 2017 um 23:08 Uhr

Benutzer-Avatar
Laurence Gonsalve

auto ist kein Datentyp. Es ist ein Speicherklassenbezeichner, wie z static. Es ist im Grunde das Gegenteil von static bei Verwendung für lokale Variablen und zeigt an, dass die Lebensdauer der Variablen ihrem Gültigkeitsbereich entspricht (zum Beispiel: wenn sie den Gültigkeitsbereich verlässt, wird sie automatisch zerstört).

Sie müssen nie angeben auto Da es die einzigen Orte sind, an denen Sie es verwenden dürfen, ist es auch die Standardeinstellung.

  • Sind Sie sicher, dass „die Lebensdauer der Variablen ihrem Gültigkeitsbereich entspricht“? Ich hatte gedacht, die Lebensdauer sei gleich dem Funktionsaufruf. Z.Bist int foo() {int *p; {int i = 42; p = &i} return *p;} nicht konform?

    – JC Salomon

    18. Januar 2011 um 16:25 Uhr

  • @jcsalomon Die C90-Spezifikation sagt in §6.1.2.4 Folgendes über die automatische Speicherdauer: “Speicher wird garantiert für eine neue Instanz eines solchen Objekts bei jedem normalen Eintrag in den Block reserviert, dem es zugeordnet ist … Speicher denn die Reservierung des Objekts ist bei Beendigung der Ausführung der Sperre in keiner Weise mehr gewährleistet.” Ich habe keine Kopie der C99-Spezifikation, aber es scheint unwahrscheinlich, dass sie dies geändert hätten.

    – Laurence Gonsalves

    20. Januar 2011 um 5:55 Uhr

  • Anscheinend ist das Schlüsselwort “auto” ein Überbleibsel aus der B-Sprache. In B war alles ein Maschinenwort, keine anderen Typen. Variablen wurden einfach als static, extern oder auto deklariert. auto wurde dann zum Standard für C. princeton.edu/~hos/mike/transcripts/thompson.htm

    – Ben Scott

    19. April 2020 um 22:03 Uhr

Benutzer-Avatar
Johannes Schaub – litb

Es könnte in C89 nützlich sein, wo Sie eine implizite int-Regel haben.

void f() {
  a = 0; // syntax error
  auto b = 0; // valid: parsed as declaration of b as an int
}

Aber dann kannst du einfach direkt schreiben int Anstatt von auto. C99 hat keine implizite int-Regel mehr. Also denke ich nicht auto hat keinen wirklichen Zweck mehr. Es ist “nur der Standard”-Speicherbezeichner.

  • Ich verstehe nicht, wie das nützlich sein soll, selbst in C89. Es fügt nichts hinzu. Wo auch immer auto verwendet werden kann, ist es auch die Vorgabe, impliziert int Typ oder nicht.

    – Inspektionsfähig

    30. Oktober 2013 um 13:35 Uhr

Du bekommst die auto Verhalten standardmäßig, wenn Sie zum Beispiel eine Variable deklarieren – int i = 0; Sie tun dies jedoch auch, indem Sie explizit angeben auto int i = 0 was nicht benötigt wird.

Benutzer-Avatar
6502

Ich finde das Zitat ziemlich fragwürdig. Die logische Ebene eines Compilers hat nichts mit der logischen Ebene der kompilierten Sprache zu tun, selbst wenn die beiden Sprachen gleich sind. Vielleicht bin ich arm an Fantasie, aber ich kann mir wirklich nicht vorstellen, wie es für einen Compiler nützlich sein kann, ein bestimmtes Schlüsselwort zu haben oder nicht, aber nicht für ein allgemeines Programm, insbesondere in “C”, wo Sie Schlüsselwörter oder irgendeine Form von nicht direkt manipulieren können Code sowieso und Sie müssen alles über Daten reflektieren, da Code und Daten in “C” zwei völlig unterschiedliche Konzepte sind.

Meine wilde Vermutung ist, dass auto ursprünglich da war, weil es nicht optional, sondern obligatorisch war, später, als sich die Sprache weiterentwickelte und es nicht mehr notwendig war, blieb es aus Gründen der Abwärtskompatibilität mit bestehendem C-Code immer noch.

Benutzer-Avatar
Jens Gustedt

Wie gesagt auto ist die Standardeinstellung für Variablen im Funktionsumfang in C. Die einzige Verwendung, die ich für das Schlüsselwort hatte, ist in Makros. Bei einem Makro, das eine Variablendeklaration durchführt, möchten Sie vielleicht manchmal sicherstellen, dass die Variable nicht deklariert wird static oder im Dateibereich. Hier die auto Schlüsselwort ist praktisch.

Dies war besonders nützlich für C++, wo Sie den Konstruktor/Destruktor-Mechanismus missbrauchen konnten, um bereichsgebundene Ressourcen zu verwalten. Seit der auto Schlüsselwort ändert derzeit in C++ seine Bedeutung in etwas völlig anderes, diese Verwendung ist nicht mehr möglich.

Benutzer-Avatar
Alireza Mirghasemi

Ich bin sicher, dass Sie mit Speicherklassenbezeichnern in C vertraut sind, die “extern”, “statisch”, “register” und “auto” sind. Ich bin mir nicht sicher, aber ich denke, es ist Compiler-abhängig. Sie sehen, in Bezug auf Speicherklassenbezeichner gibt es eine Regel. Wir können nicht mehrere Speicherklassenbezeichner für eine Variable verwenden. Aus diesem Grund können statische globale Variablen nicht extern verwendet werden. Daher sind sie nur ihrer Datei bekannt. Wenn Sie zu Ihrer Compiler-Einstellung gehen, können Sie das Optimierungs-Flag für Geschwindigkeit aktivieren. Eine der Möglichkeiten, wie der Compiler optimiert, besteht darin, nach Variablen ohne Speicherklassenbezeichner zu suchen und dann eine Bewertung basierend auf der Verfügbarkeit von Cache-Speicher und einigen anderen Faktoren vorzunehmen, um zu sehen, ob er diese Variable mit Registerbezeichnern behandeln sollte oder nicht. Was ist nun, wenn wir unseren Code auf Geschwindigkeit optimieren wollen, obwohl wir wissen, dass eine bestimmte Variable in unserem Programm nicht sehr wichtig ist und wir nicht möchten, dass der Compiler sie überhaupt als Register betrachtet? Wenn ich jedoch auto setze, kann der Compiler einer Variablen keinen Registerbezeichner hinzufügen, da er “register auto int a;” eingegeben hat. ODER “auto register int a;” löst den Fehler bei der Verwendung mehrerer Speicherklassenbezeichner aus. Zusammenfassend dachte ich, dass auto dem Compiler verbieten kann, eine Variable durch Optimierung als Register zu behandeln.

Diese Theorie funktionierte nicht für den GCC-Compiler, aber ich habe keine anderen Compiler ausprobiert.

Eine andere mögliche Antwort ist, dass C 1970 entwickelt wurde, aber bis 1989, als C89 herauskam, keine Standards hatte. Das Nicht-Standard-C hat vielleicht oft Auto verwendet, aber als C89 als Standard-C herauskam, mussten sie vielleicht die Kompatibilität mit dem Nicht-Standard-C aufrechterhalten.

Benutzer-Avatar
Teetrinker

Zitat aus c-programming-simple-steps.com auf c-auto

Praktische Anwendung Keine. Wirklich, es gibt keinen Grund, das Schlüsselwort auto in C zu verwenden. Der einzige Ort, an dem wir es verwenden können, ist, wenn wir eine Variable innerhalb einer Funktion erstellen, aber … alle dort erstellten Variablen sind bereits auto.

Warum gibt es das C-Auto? Für Abwärtskompatibilität. Die Vorgänger von C verwendeten das Auto, um Variablen zu deklarieren. Früher musste viel Code in die neue C-Sprache portiert werden. Das Hinzufügen des Schlüsselworts zur Sprache war in diesem Fall hilfreich.

1246640cookie-checkKonzept des Schlüsselworts „auto“ in c

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy