Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.06.2010, 10:35

[gelöst] Visual C++ Laufvariablen im Zählschleife-Kopf deklarieren (C Programmierung, c99)

Hallo erstmal,

ich habe da ein recht dummes Problem, ich habe schon teils Stunden über google nach einer Lösung gesucht und absolut nichts gefunden.

Wenn ich den unterstehenden Code ausführen will, wirft der Compiler mir nur haufenweise Fehler entgegen, wenn ich i außerhalb deklariere funktioniert es.

Ich arbeite noch nicht lange mit Visual C++, denke aber das es mal früher funktioniert hat, habe zwischenzeitlich viel mit gcc gearbeitet, als ich ein Projekt nach Visual C++ übertragen wollte hatte er dann bei allen for-Schleifen gemeckert und alles abändern ist ja auch nicht die wahre Lösung :/

Hat jemand eine Ahnung woran es liegen könnte? Bei gcc muss man ja auf c99 Standard einstellen das es funktioniert...

Ausgewählt habe ich eine Win32-Konsolenanwendung, keine Ahnung ob ich was anderes hätte auswählen müssen oder so. :/

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<stdlib.h>

int main()
{   
   //int i; 
   for(int i=0;i<99;i++)    
   {        
      printf("Hallo %d\n", i);  
   }
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »KnuffiKnuffSchaf« (03.06.2010, 22:43)


jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

2

03.06.2010, 10:38

Kurze Antwort: Visual C++ unterstützt nur C89, kein C99. Evtl. geht es, wenn du dein Projekt als C++ kompilierst.
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

3

03.06.2010, 10:51

Gibt eine C++-Projektflageinstellung, die eigentlich nicht zu übersehen ist... allerdings auch bei neuen Projekten ab VS2005 gesetzt sein sollte, damit genau eben das geht :-). Bin nur gerade auf Fallobst-OS, weswegen ich nicht nachschauen kann, aber wie gesagt, nicht zu übersehen, hat meine ich sogar "for" in der Bezeichnung.

LG
Alyx

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

4

03.06.2010, 12:07

So, mal die VM angekurbelt um nachtzuschauen:
C++ -> Sprache -> Übereinstimmung in einem For-Schleifenbereich erzwingen

LG
Alyx

jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

5

03.06.2010, 12:14

Imo gehts bei ihm um was anderes. Nämlich darum, ob man Variablen am Anfang der Funktion deklarieren muss (C89) oder irgendwo im Code. (C99)
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

6

03.06.2010, 12:40

So, mal die VM angekurbelt um nachtzuschauen:
C++ -> Sprache -> Übereinstimmung in einem For-Schleifenbereich erzwingen

LG
Alyx


Ist bereits auf ja, auf nein kommt der selbe Fehler... egal was eingestellt ist.

Imo gehts bei ihm um was anderes. Nämlich darum, ob man Variablen am Anfang der Funktion deklarieren muss (C89) oder irgendwo im Code. (C99)


Da könntest du recht haben!

Aber wie stelle ich das um :/

Ich benutze Visual C++ 2010, bei 2008 hatte ich aber das selbe Problem...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

03.06.2010, 12:44

Hast du denn den Compiler so eingestellt dass er deinen Code als C code kompiliert (oder hat deine Datei eine .c Endung?)

Denn MSVC unterstützt kein C99 und in C90 musst du Variablen am Blockbeginn deklarieren und kannst in einem for initializer keine Variable deklarieren. In C++ geht das aber natürlich...

8

03.06.2010, 13:00

Hast du denn den Compiler so eingestellt dass er deinen Code als C code kompiliert (oder hat deine Datei eine .c Endung?)

Denn MSVC unterstützt kein C99 und in C90 musst du Variablen am Blockbeginn deklarieren und kannst in einem for initializer keine Variable deklarieren. In C++ geht das aber natürlich...
Ja das habe ich auch schon versucht.

Datei heißt test.c

Unter Erweitert - Komplimierungsart : Als C-Code kompilieren (/TC)

Also ist es ganz normal das man bei Visual C++ am Anfang alles deklarieren muss? kann ich mir nicht vorstellen da ich bei vielen Codes es anders gesehen habe, das man die Laufvariablen bei der For-Schleife im Kopf deklariert ist denke ich nur all zu normal eigentlich, oder nicht?


Zusatz: ich habe grade mit der Einstellung rum gespielt wenn ich auf Standard bei Kompilierungsart starte kommen Fehler genauso bei C, wenn ich aber explizit C++ dort auswähle klappt es o.O
Ist das normal?^^

9

03.06.2010, 13:12

Ja, weil dein code falsches C90 ist, aber richtiges C++...

(richtig jetz auf Syntax und so bezogen)

10

03.06.2010, 13:16

Ja das ist normal.

Wenn du auf Standard stellst erkennt der die Sprache anhand der Dateiendung.
Wenn er C-Code kompiliert ist das anhand des Standards C90 und dort ging das was du machen möchtest nicht. Und einen anderen C-Standard unterstützt MSVC nicht.
Wenn du C++ Code kompilierst nutzt er auch C++ Features und dann geht es.

Werbeanzeige