Diskussion:C-Programmierung: static & Co.

Aus Wikibooks
Zur Navigation springen Zur Suche springen

2018: gehört zu einem anderen Kapitel[Bearbeiten]

Im Abschnitt Variablen und Konstanten wird " scanf ("%d",&b); " und " printf ("Das Quadrat von 2+3 ist %d\n", quadrat(2+3)); " verwendet ohne auf die Bedeutung von %d, &b oder %lu einzugehen. %lu ist kein ISO Standart.

extern[Bearbeiten]

Das Schlüsselwort extern fehlt hier. --Mik 19:42, 5. Jul. 2007 (CEST)Antworten[Antworten]

Ich denke, hier sind nur die Schlüsselwörter gezeigt, die benötigt werden, um die Semantik des Programms zu ändern. const, das dem Compiler mitteilt, dass der Programmierer keinen Code zur Änderung der Variable schreiben darf, ist auch nicht erwähnt. Hybrid Dog 11:44, 3. Apr. 2017 (CEST)Antworten[Antworten]

addresse nehmen von register variablen[Bearbeiten]

register int i; int *p=&i; ... ist nicht erlaubt, das sollte erwähnt werden

Das ist bereits erwähnt… Hybrid Dog 11:45, 3. Apr. 2017 (CEST)Antworten[Antworten]

static code Beispiel[Bearbeiten]

Meines Erachtens wird die Initialisierung der Variable static int versuch = 0; bei jedem Aufruf der Funktion durchgeführt. Dadurch wäre der gewünschte Effekt (Speichern des letzten Wertes) nicht gegeben und das Beispiel nicht funktionsfähig. Oder täusche ich mich?

Ja. Die Zuweisung erfolgt nur beim ersten Aufruf. --84.130.154.106 17:27, 9. Jan. 2008 (CET)Antworten[Antworten]


Kann eine Statische Variable auch wieder frei gegeben werden? Dazu findet man leider nichts.

Eine statische Variable wieder "freizugeben" macht für mich keinen Sinn. Dann kann man doch eine andere Variable benutzen oder die statische Variable wieder auf ihren Anfangswert zurücksetzen. Eventuell habe ich dich auch falsch verstanden, dann wäre vielleicht ein Beispiel hilfreich --Eilexe 19:41, 19. Jun. 2008 (CEST)Antworten[Antworten]

Erklärung von volatile[Bearbeiten]

Dieser Satz ist für mich völlig unverständlich: "Das kann zum Beispiel dann passieren, wenn ein Programm aus einer Interrupt-Service-Routine einen Wert erwartet und dann über diesen Wert einfach pollt." Vielleicht könnte man das umformulieren oder beispielsweise das Wort "pollt" durch ein deutsches ersetzen, falls es so etwas gibt... --Eilexe 19:39, 19. Jun. 2008 (CEST)Antworten[Antworten]

wozu hier das "count ++" ? Ist das nur um die Schleife zu füllen oder hat das einen tieferen Sinn? MoB der 1. 21:02, 19. Dez. 2008 (CET)Antworten[Antworten]

  • Ich bin auch gerade darüber gestolpert und kann NULL damit anfangen. Für Anfänger völlig ungeeignet. Auch könnte man erklären was eine Interrupt-Service-Routine ist.. Bei dem count++ erwarte ich, dass es eine anfängerfreundliche Variante der Schleifenfüllung ist. Es ist einfach und somit verständlich (unverwirrend); eine leere Schleife würde direkt neue Fragen aufwerfen. Aber killt das nicht den CPU oder so? Es ist keine Bremse drin, jede freie Prozessorzeit erhöht den Wert konstant um 1. Nicht nach einer Sekunde, sondern dauerhaft. Oder nicht? Ich les mal weiter und komme eventuell darauf zurück :) --GatheringXPs 01:35, 16. Jul. 2013 (CEST)Antworten[Antworten]

schlechtes Beispiel "login"[Bearbeiten]

Das Beispiel "login" ist schlecht gewählt. Beispielsweise Steuerungstechniker kommen mit so etwas überhaupt nicht in Kontakt. Ich zum Beispiel, obwohl schon hunderte von Maschinen programmiert, weiß überhaupt nicht, wozu man solch eine Funktion braucht und was ein "login" sein soll. Ferner sagen mir die Begriffe "checkuser", "checkpass", "EXIT_SUCCESS", "EXIT_FAILURE" nichts. Auf gut Deutsch ist das ganze Programm ein einziges böhmisches Dorf für mich. Ein von der Anwendung klareres Lernbeispiel wäre angebracht und zwar: So einfach, wie möglich - so kompliziert, wie nötig. Warum benutzt man in der deutschen Wikipedia keine deutschen Begriffe für die Variablen. Bei den Maschinensteuerungen macht man das jedenfalls so. Sonst kann ich mir auch gleich die englischen Wikibooks anschauen. -- 91.96.72.228 14:59, 27. Feb. 2009 (CET)Antworten[Antworten]

Schätzungsweise 90% des weltweiten Quellcodes ist in englisch. Das fängt bei round, ceil oder floor an und hört bei der Dokumentation der Sourcen auf. Warum deutsch verwenden, wenn man ein gesundes englisch braucht, um Kommentare und man-pages zu lesen? Insbesondere wenn man für eine nicht näher definierte Leserschaft (OpenSource oder internationale Firma) schreibt.

Ich habe die Beispiele geändert. Hybrid Dog 12:19, 3. Apr. 2017 (CEST)Antworten[Antworten]

volatile = Operator?[Bearbeiten]

So weit ich weiß kann man bei volatile nicht von einem Operator sprechen. Im Englischen spricht man von 'type qualifier'. Evtl. könnte man im Text das Wörtchen Typ-Spezifizierer oder einfach 'das volatile-Schlüsselwort' verwenden. Bei Google habe ich bei der Wörterkombination auch keine passenden Treffer gefunden.

register[Bearbeiten]

"Ein anderer Effekt des Schlüsselworts register ist, dass es nicht möglich ist, auf die Adresse von einer mit register qualifizierten Variablen zuzugreifen." Und wieso nicht? Was ändert register, außer es eventuell anders abzulegen? --GatheringXPs 01:49, 16. Jul. 2013 (CEST)Antworten[Antworten]

Register können keine Speicheradressen zugeordnet werden. https://de.wikipedia.org/wiki/Register_(Computer) Hybrid Dog 11:50, 3. Apr. 2017 (CEST)Antworten[Antworten]
Mir kommen diese Diffs trotz Beispielergänzung und offensichtlich gutem Willen, wie eine Verschlechterung vor. Gründe: Beispiel nicht anschaulich, Stilblüten wie entscheidungsfreudige Compiler, Fehlen des hier diskutierten Hinweis auf Variablenzugriff. Kann das eventuell mal jemand mit höheren Fachkenntnissen überprüfen? Ping@Hybrid Dog. Gruß --HirnSpuk 00:34, 15. Jul. 2017 (CEST)Antworten[Antworten]

Wenn etwas auf dem Heap angelegt wird (siehe malloc), wird die Adresse zu diesem Ort in einer Variable gespeichert, welche auf dem Stack liegt, d.h. […] anstatt […] Arbeitsspeicher (Stack oder Heap) passt hier nicht, und außerdem macht es i.d.R. keinen Sinn, einen Wert, der so klein ist, dass er in ein Register passt, auf den Heap zu legen, da der Stack schneller zugreifbar ist.
Ob das register Schlüsselwort hilft, das Programm schneller zu machen (oder sogar langsamer), weiß ich nicht.
Ein anderer Effekt des Schlüsselworts […] wurde reduziert zu register besitzen keine […]. Mir hat das erstere besser gefallen wegen dem höheren Informationsgehalt.
Ich weiß nicht, ob der Begriff "entscheiden" bei einem Algorithmus (deterministisch) passt.
Als Beispiel sollte Code gewählt werden, bei dem der optimierende Compiler ohne dem register Schlüsselwort im Code ein langsameres Programm erstellt als mit.
Hybrid Dog 20:43, 19. Jul. 2017 (CEST)Antworten[Antworten]

Ich hab den Text geändert. Hybrid Dog 16:45, 9. Aug. 2017 (CEST)Antworten[Antworten]

Abschnitt "static und Co." hinter "Funktionen" einsortieren[Bearbeiten]

Die Beispiele in "static und Co." setzen Wissen über Funktionen voraus. Daher sollte der Abschnitt hinter "Funktionen" einsortiert werden. --2A02:908:2614:B980:37C1:CDDC:60DF:9817 20:03, 21. Apr. 2018 (CEST)Antworten[Antworten]