PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : deklarieren bzw., definieren von Variablen...


Matrix316
2004-05-27, 21:11:04
Bei Borland C++ Builder 5 hab ich festgestellt, dass die Variablen bei C (wenn das source File die Endung "c" hat) in Funktionen am Anfang deklariert/definiert werden müssen (ansonsten gibts Fehler), während bei C++ (das File die Endung cpp )es auch mittendrin sein kann (z.B. in einer Schleife oder sonst wo).

Interessant ist, dass es bei Visual C++ immer egal ist.

Ist das jetzt eine C/C++ Sache oder hängt das vom Compiler ab wo Variablen deklariert/definiert müssen?

ethrandil
2004-05-27, 21:35:07
Ich meine gehört zu haben, dass im "Ur-C" die Variablen am Anfang definiert werden müssen.

MS war noch nie dafür bekannt sich total an gewisse Standards zu halten, daher fallen die schon mal raus ;).

Allerdings gibt es, glaube ich, einen neuen C-Standard, der die Deklaration auch mittem im Code erlaubt. Vielleicht musst du bei deinem Compiler dafür auch ein bestimmtes Flag setzen.

- Eth

Matrix316
2004-05-27, 21:48:37
Ur C = ANSI C oder gibts da noch Unterschiede? :kratz2:

Trap
2004-05-27, 22:00:52
Es gibt verschiede ANSI-C-Standards, der neuste ist soweit ich weiß der von 1999, genannt C99.
In C99 kann man überall Variablen erzeugen.

D-Swat
2004-05-27, 22:40:59
Bei Visual C++ kannst du in den Projekt Eigenschaften einstellen, ob die Dateien als C oder C++ interpretiert werden sollen
und dann auch nach den entsprechenden Regeln kompiliert werden.

Als default ist dort C++ eingestellt, deswegen kannst die Variablen deklarieren wo du willst.

Matrix316
2004-05-28, 20:10:01
Also ist es ein C / C++ Unterschied?

Wobei folgendes komisch ist:

Beispiel 1 gibt ein Fehler (mit Borland c) :


switch (irgendwas)
{
case 1:
int i;
break;
}

Beispiel 2 gibt keinen Fehler (mit Borland c) :

switch (irgendwas)
{
case 1:
{
int i;
}
break;
}


Warum? :kratz: Oder wird der Block, dann quasi als neue "Funktion" oder Bereich angesehen der unabhängig vom Rest ist?

Exxtreme
2004-05-28, 20:55:54
Original geschrieben von Matrix316
Warum? :kratz: Oder wird der Block, dann quasi als neue "Funktion" oder Bereich angesehen der unabhängig vom Rest ist?
So ähnlich ist das tatsächlich. Die Variable i ist nur innerhalb der Klammern gültig. Der Compiler von MS sieht wohl alles als C++-Code an, während der Borland-Compiler da Unterschiede macht.