gcc ANSI-C Dateiendung .cpp
-
Sebastian_Hoelzl schrieb:
In der Uni benutzen wir Visual Studio und dessen C-Compiler. Dafür müssen die Programmdateien als .cpp gespeichert werden.
VS verkraftet auch .c
Sebastian_Hoelzl schrieb:
Ich darf zur Lösung der Aufgabe nur ANSI-C benutzen.
Streng genommen ist ANSI-C die Normung von 1989. Die kennt z.B. nicht den Zeilenkommentar mit //
Danch ist es ISO-C.
-
Sowohl gcc wie auch der VStudio Compiler cl.exe "erkennen" C-Quellcodes an der Endung *.c und C++ Quellcodes an *.cpp, falls keine anderen expliziten Schalter für die Spracherkennung gesetzt sind.
Leider setzt die VStudio IDE bei neuen Projekten defaultmäßig (ohne Nachfrage wie z.B. bei CodeBlocks) C++ als Standard, es sei denn man fügt explizit *.c Dateien zum Projekt hinzu.Für korrektes ANSI C muss man dann noch "Spracherweiterungen deaktivieren" in den Projekteinstellungen.
Für gcc äquivalent:
gcc -ansi *.c
-
ein Blick auf die Fehlermeldung sagt doch alles. malloc liefert void* zurück, da malloc ja nicht weiß, was man da für speicher reserviert hat.
also
if ((anfang = (struct bezirk*)malloc(sizeof(struct bezirk))) == NULL) {
und
if((zeiger->next = (strukt bezirk*) malloc(sizeof(struct bezirk))) == NULL){und schon sollte es funktionieren. dass der compiler von visual studio das durchgehen lässt............
-
HansKlaus schrieb:
malloc liefert void* zurück
Und void* ist in C ohne cast in jeden anderen Zeiger konvertierbar.
-
aha, ich habs trotzdem so gelernt.
aber ein expliziter typcast ist doch nicht unkonform, oder irre ich da?wäre aber auf jeden fall einfacher gewesen, dem compiler einfach seinen wunsch zu erfüllen.
-
Einfacher ja, aber nicht zielführend. Wenn man C kompilieren will, sollte man auch einen C-Compiler nehmen. Und nicht so lange mit dem Holzhammer auf den Code einprügeln, bis der C++-Compiler ihn frisst.
-
Der eigentliche Fehler ist hier die Dateiendung cpp statt c
-
wenn man den compiler mit .cpp füttert, tut er ja auch so, als würde er c++ vor sich haben.
irgendwie ist jetzt der zeitpunkt für ne grundsatzdiskussion darüber, ob c nicht eigentlich auch c++ bzw. c++ nur c mit erweiterungen ist, gekommen.rename code.cpp code.c wäre aber langweilig gewesen
-
HansKlaus schrieb:
wenn man den compiler mit .cpp füttert, tut er ja auch so, als würde er c++ vor sich haben.
irgendwie ist jetzt der zeitpunkt für ne grundsatzdiskussion darüber, ob c nicht eigentlich auch c++ bzw. c++ nur c mit erweiterungen ist, gekommen.rename code.cpp code.c wäre aber langweilig gewesen
Nein.
-
HansKlaus schrieb:
irgendwie ist jetzt der zeitpunkt für ne grundsatzdiskussion darüber, ob c nicht eigentlich auch c++ bzw. c++ nur c mit erweiterungen ist, gekommen.
Da muss man nicht diskutieren, die Antwort ist, dass C keine Untermenge von C++ ist. Basta! Eines der wichtigsten Gegenbeispiele wurde hier im Thread genannt. Der C++-Standard hat eine lange Liste mit weiteren Inkompatibilitäten.