WinFuture-Forum.de: Blocklocale Variablen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Blocklocale Variablen lehrer glaubt mir nicht


#1 _achim89_

  • Gruppe: Gäste

geschrieben 12. Februar 2009 - 14:26

Hallo, ich hab mal eine frage

ich hab mir vor einiger zeit C beigebracht
nun bin ich in der ausbildung und lern C++

in der schulaufgabe habe ich ne 4 bekommen und bin mit meinem lehrer am diskutieren

wir hatten eine aufgabe, ein programm zu schreiben, bei dem am ende eine abfrage stattfindet, ob man den vorgang wiederholen möchte

ich habe es so geschrieben

int main(void)
{
char c_eingabe;
do
{
int variable = 0, andere = 0;
bla bla quellcode bla bla
}while(c_eingabe == 'j');
...

return (0);

}

mein lehrer will mir darauf keine punkte geben, weil er sagt ich kann nicht innerhalb einer do/while zum initialisieren anfachen
ich meinte natürlich ginge es und bei mir funktioniere es und ich könne es ihm zeigen
er wollte sich gar nicht drauf einlassen und meinte wenn es so funktioniert hätte ich glück und ich programmiere schlecht
ich war dann ganz verunsichert

es gibt doch static (wenn sie noch so heißen) die ich global auserhalb der main initialisieren kann und local variablen die nur innerhalb der blöcke gelten

warum ich das so geschrieben habe? ich wollte, wenn man den vorgang nochmal durchläuft, die variablen gleich mit 0 als wert definiert werden

macht das nur mein compiler so oder ist das generell in c++ erlaubt?
macht es einen unterschied ob ich am ende der while-schleife die variablen auf 0 setze, wenn die bedingung zutrifft oder ob ich sie gleich am anfang initialisiere?
0

Anzeige



#2 Mitglied ist offline   hanussen 

  • Gruppe: aktive Mitglieder
  • Beiträge: 103
  • Beigetreten: 02. November 08
  • Reputation: 0

geschrieben 12. Februar 2009 - 19:22

Über guten Stil lässt sich streiten, entweder es funktioniert oder eben nicht.


Guter Stil ist deine Art der Programmierung wirklich nicht. Das anlegen einer Variablen (egal ob auf dem Heap oder dem Stack) erzeugt eine Menge Kosten und ist daher zu vermeiden.

Das alleine wird aber keine 4 rechtfertigen, da hast du noch mehr versemmelt.

Folgendes Buch ist zu empfehlen: Bjarne Stroustrup: The C++ Programming Language
(naja nicht wirklich, aber der Typ hats nunmal erfunden)

MfG Hanussen

Dieser Beitrag wurde von hanussen bearbeitet: 12. Februar 2009 - 19:24

There is method to my madness.
0

#3 Mitglied ist offline   Mr. Floppy 

  • Gruppe: VIP Mitglieder
  • Beiträge: 4.126
  • Beigetreten: 01. Juli 08
  • Reputation: 271
  • Geschlecht:Männlich

geschrieben 12. Februar 2009 - 20:03

Zitat

mein lehrer will mir darauf keine punkte geben, weil er sagt ich kann nicht innerhalb einer do/while zum initialisieren anfachen

Naja, schön ist anders, aber nicht verboten. Wie hanussen schon meinte, kostet das ordentlich Zeit, wird aber vom Compiler mit ziemlicher Sicherheit wegoptimiert. Ginge es um ein reines C-Programm, hätte Dein Lehrer übrigens recht. Da müssen alle Variablen am Anfang einer Funktion deklariert werden.

Zitat

es gibt doch static (wenn sie noch so heißen) die ich global auserhalb der main initialisieren kann und local variablen die nur innerhalb der blöcke gelten

Du meinst wohl eher globale und lokale Variablen. Letztendlich geht es um den Gültigkeitsbereich. Mit 'static' ändert man daran nichts, allerdings an der Lebensdauer der betreffenden Variablen. So kann man z.B. in einer Funktion mitzählen wie oft sie aufgerufen wurde. Während die 'normalen' Variablen nach dem Ende der Funktion nicht mehr existieren, behält die static-Variable ihren Wert und lebt weiter.

Zitat

macht das nur mein compiler so oder ist das generell in c++ erlaubt?

Letzteres.

Zitat

macht es einen unterschied ob ich am ende der while-schleife die variablen auf 0 setze, wenn die bedingung zutrifft oder ob ich sie gleich am anfang initialisiere?

Solange eine Variable vorm Lesen initialisiert wurde, ist das egal. Soll heißen, bevor eine Variable ausgewertet wird, sollte was sinnvolles drinstehen. Wann Du das machst, bleibt Dir überlassen, Hauptsache rechtzeitig. Beim Schreiben ist der vorhergehende Wert sowieso egal.
0

#4 Mitglied ist offline   def 

  • Gruppe: aktive Mitglieder
  • Beiträge: 429
  • Beigetreten: 19. Dezember 06
  • Reputation: 7
  • Geschlecht:Männlich

geschrieben 13. Februar 2009 - 10:39

Hallo,

eine kleine Ergänzung:

Beitrag anzeigenZitat (Mr. Floppy: 12.02.2009, 21:03)

(...) Ginge es um ein reines C-Programm, hätte Dein Lehrer übrigens recht. Da müssen alle Variablen am Anfang einer Funktion deklariert werden.

Das galt nur für den früheren Standard C89. Seit C99 verhält C sich in dieser Hinsicht wie C++. Allerdings unterstützen viele Compiler C99 gar nicht oder unvollständig, so dass beim Ausprobieren der Eindruck entstehen könnte, meine Aussage wäre falsch. :)
Zum Testen muss also z.B. der gcc mit dem switch -std=c99 in den "C99-Modus" geschaltet werden; bei anderen Compilern bitte in der Dokumentation nachsehen - es kann leider auch sein, dass C99 gar nicht unterstützt wird!

Viele Grüße
Def
Eingefügtes Bild
0

#5 _achim89_

  • Gruppe: Gäste

geschrieben 13. Februar 2009 - 13:54

okay danke für die antworten
dann glaube ich werde ich es mir umgewöhnen

aber ich dachte, da es sich ja nicht um so laufzeitprogrammen handelt inden jede kleinste sekunde ne rolle spielt, kann ich das ruhig machen =O
0

#6 Mitglied ist offline   DennisMoore 

  • Gruppe: aktive Mitglieder
  • Beiträge: 177
  • Beigetreten: 27. Februar 07
  • Reputation: 0

geschrieben 18. März 2009 - 16:13

Ich finde auch das man in einer Schleife keine Variablen definieren sollte.
Die definiert man davor und verwendet sie dann nur in der Schleife.

Ist ne Stilfrage. Wenn man vergisst die Variablen nach einem Schleifendurchlauf plattzumachen, kann Speicher verschwendet werden.
Das ist natürlich in der heutigen Zeit kein Problem mehr, sowohl von der Speicherausstattung der Rechner, als auch von den Compilermechanismen her.

Es ist aber schon von Vorteil es gleich "richtig" zu lernen.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0