You are not logged in.

  • Login

1

Monday, March 19th 2007, 7:55pm

Warum einer neuer Block?

Hallo,

ich bräuchte mal Hilfe bei diesem Code Auszug:

Source code

1
2
3
4
5
6
7
8
9
10
switch (ret)
{
   case 0:
       //irgendwas
   case 1:
       {
           Knoten *tmp = new Knoten;
           return tmp;
       }
}


Warum ist hier bei "case 1:" noch nen neuer Block aufgemacht?

2

Monday, March 19th 2007, 8:29pm

weil ohne block nach

case 1:

maximal eine anweisung stehen darf, WENN kein block kommt!

deshalb brauch man die klammern {} wenn man mehrere anweisungen ausführen will ^^

3

Monday, March 19th 2007, 8:42pm

Nein, meiner Meinung nach ist die Blockdefinition hier nur optional.
Blöcke erstellen kann man überall. Sinnvoll ist es hier nicht.

Auch wenn die break; beim return Statement keinen Zweck haben, solltest du sie dennoch ergänzen.

C Quellcode

1
2
3
4
5
6
7
8
9
10
switch (ret)
{
	case 0:
		//irgendwas
	break;
	case 1:
		Knoten *tmp = new Knoten;
		return tmp;
	break;
}

4

Monday, March 19th 2007, 9:41pm

Quoted


weil ohne block nach

case 1:

maximal eine anweisung stehen darf, WENN kein block kommt!

ich nehme mal an das stimmt, obwohl in beiden Büchern in denen ich geschaut habe "Anweisung(en)" steht - bin mir also nicht so sicher (obwohl das auch meine erste Idee war).
Wäre also nett wenn jemand Licht ins Dunkel bringen könnte!


Quoted


Nein, meiner Meinung nach ist die Blockdefinition hier nur optional.
Blöcke erstellen kann man überall. Sinnvoll ist es hier nicht.

das stimmt nicht.
Sieht blöd aus, ist aber nötig - also nehme ich an die Aussage von BendIt stimmt.
Ohne Block lässt sich das Programm nicht kompilieren.

5

Monday, March 19th 2007, 10:13pm

hm, bin mir ziemlich sicher das es so ist.

c syntax sagt das direkt nach dem : von case 1: MAXIMAL eine anweisung stehen darf...
wenn es mehrere sein sollen muß der block ran.

aber ich will mich hier nicht streiten... wenns so funzt dann is ja gut so :)

6

Tuesday, March 20th 2007, 7:15am

Schon wieder ich.

Also das ganze funktioniert auch, wenn man die Deklaration von der Initialisierung trennt.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
switch (ret)
{
   case 0:
       //irgendwas
   break;

   case 1:
           Knoten *tmp;
           tmp = new Knoten;
           return tmp;
    break;
}

7

Tuesday, March 20th 2007, 7:33am

hm,

in delphi brauch man den block ajf, dachte eigentlich das dass in C auch nötig wäre...

aber in php brauch mans ja auch nicht...

naja verkehrt ist es jedenfalls nicht und könnte u.U auch der lesbarkeit dienen wenn man es mit { } macht.

so long da BendIt

8

Wednesday, March 21st 2007, 4:43pm

In C braucht man keinen Block.
Wenn du jedoch keinen Block machst, dann sind die Variablen auch im nächsten case-Statement noch sichtbar. Wenn du einen Block machst passiert das nicht.

Similar threads

Social bookmarks