Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Anweisungblock nach der Deklaration einer Variable???

Diskussion: Anweisungblock nach der Deklaration einer Variable??? im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, nun lese ich mir grad ein Buch durch (C von A bis Z) und da habe ich bemerkt, ...

Antwort
Alt 19.03.11, 10:55   #1 (permalink)
 
Registriert seit: 04.02.11
hamade9 Leistung: Facit NTK
Likes: 0
Standard Anweisungblock nach der Deklaration einer Variable???

Anzeige

Hallo,

nun lese ich mir grad ein Buch durch (C von A bis Z) und da habe ich bemerkt, dass nach der Deklaration einer Variable Anweisungblöcke kommen. Hier mal das Beispiel:

Code:
#include <stdio.h>
 
int main(void) 
{
         int i=333;
 
         if (i == 333) 
         {

              int i = 666;     /* <------- */
              {
                   i = 111;
                   printf("%d\n",i);   /* 111 */
              }

               printf("%d\n",i);      /* 111 */
         }

         printf("%d\n",i);         /* 333 */
 
         system("PAUSE");
         return 0;
}
Darf man das machen, und wenn ja, wie lautet die Regel?
hamade9 ist offline   Mit Zitat antworten
Alt 19.03.11, 11:19   #2 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

das darf man machen, soll dir hier aber nu verdeutlichen, wie das mit den lokalen variablen aussieht
mehr sinn ist da kaum vorhanden, mir is zumindest noch kaum nen moment untergekommen, wo man das braucht.

ggf. um mit variablen kurz einen zwischenschritt einzulegen, aber ohne die variablen hinterher verändert zu haben oder sowas.
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 19.03.11, 11:51   #3 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Das Beispiel 'smells like hell'.

Das wäre ein Beispiel wie man lokale Variablen auf keinen Fall verwenden sollte. Denn dass man Ende wieder 333 in i gespeichert ist, würde man auf den schnellen Blick nicht erwarten.

Deswegen sollte man Variablen innerhalb einer Methode in einem Unterblock nicht neu deklarieren, wie es dort der Fall ist. Am Ende wundert man sich nämlich dann über merkwürdiges Fehlverhalten der Methode
Elderan ist offline   Mit Zitat antworten
Alt 19.03.11, 13:27   #4 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
Zitat von Elderan Beitrag anzeigen
Das Beispiel 'smells like hell'.
Eher *C smells like hell* *scnr*
Habe mir gerade das Beispiel nochmal angeschaut:
Das sollte eigentlich den Gültigkeitsbereich der Variablen verdeutlichen
Zitat:
Zitat von C von A bis Z
Hier folgt nochmals ein Beispiel, das aber keine Schule machen sollte:
...
Für lokale Variablen gilt Folgendes: Bei gleichnamigen Variablen ist immer die lokalste Variable gültig, also die, die dem Anweisungsblock am nächsten steht.
und erfüllt damit wurnderbar seinen Zweck
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 19.03.11, 13:46   #5 (permalink)
 
Benutzerbild von benediktibk
 
Registriert seit: 03.05.07
benediktibk Leistung: 8086benediktibk Leistung: 8086
Likes: 50
Standard

Zitat:
Zitat von easteregg Beitrag anzeigen
mehr sinn ist da kaum vorhanden, mir is zumindest noch kaum nen moment untergekommen, wo man das braucht.
In C++ macht sowas beizeiten Sinn
Code:
void Object::func()
{
    /* do stuff which doesn't need synchronisation */

    {
         LockObject lock(semaphore);
         /* do stuff which needs synchronisation */
    }

    /* do stuff which doesn't need synchronisation */
}
So kann man critical sections möglichst klein halten, da das Objekt bei Ende des Anweisungsblocks zerstört wird.

mfg benediktibk
benediktibk ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Anweisungblock nach der Deklaration einer Variable???
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61