Hallo Linuxprogrammierer,
ich kenne nur Visual C++ und weiß das Visual C++ ein ANSI C++ Compiler ist. Bei C gibt wohl keine Unterschiede zwischen dem ISO und dem ANSI Standard. Wo ist der Unterschied zwischen ANSI C++ und ISO C++ ? Ich frage nur, weil ich aus Neugier mal ein kleines ANSI C++ Programm mit dem Linux C++ Compiler g++ übersetzten wollte und einen Haufen Fehlermeldungen in Bezug auf den ISO C++ Standard bekommen habe .
Ich benutze momentan:
Lese Spezifikationen von /usr/lib/gcc-lib/i486-linux/3.3.5/specs
Konfiguriert mit: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Thread-Modell: posix
gcc-Version 3.3.5 (Debian 1:3.3.5-5)
Gibt es unter Linux auch einen ANSI C++ Kompiler ?
Linux 15.070 Themen, 107.540 Beiträge
Hi
1. Visual C++ ist definitv kein ANSI C++ Compiler. Wäre auch das erste Mal, dass sich Microsoft an einen Standard halten würde. Sicher hast du bestimmt schon mal vom sizeof()- und for( …; …; …)-Problem gehört.
2. Die Fehlermeldungen werden wahrscheinlich verschwinden wenn du einen V2.x GNU-Compiler verwendest. Die Fehler kommen daher, das der C++- Standard geändert hat und Visual C++ (V6 ?) ist ja schon, na ja, ziemlich alt … Dazu kann ich dir folgendes Buch empfehlen: C/C++ Third Editio, Osbourne, Herbert Schildt ISBN0-7-222722-2 Kapittel:14 „The Old_Style C++ I/O System“ und Kapitel 15: „The ANSI/ISO Standard C++ I/O Classes“. Vermutlich wirst du auch noch diverse Namespace- Probleme haben, diese rühren auch vom neuen C++- Standard her. Weil der frühere globale namespace jetzt der namespace std ist. Hängt davon ab ob Du "#include iostream" oder "iostream.h" verwendest.
Gruss, d-oli
Keine Ahnung ob sich Microsoft an den ANSI Standard hält. Ich habe mal probeweise 3 Quellcodedateien aus dem Buch "C ++ in 21 Tagen" von Jesse Liberty kompilieren lassen. Das Ergebnis war ernüchternd: 2 der Quellcodedateien ließen sich mit Visual C++ 6 von Microsoft problemlos kompilieren. Bei einer Datei mußte ich eine #include- Anweisung ändern (von #include iostream in #include iostream.h. Das war eventuell nur ein Tippfehler vom Buchautor). Unter Linux konnte ich keine der drei Dateien aus dem oben gennannten Buch mit g++ 3.3.4 kompilieren. Deshalb war ich ganz erstaunt. Ich weiß nur das ältere Versionen von g++ nicht ANSI-kompatibel sind.
PS.: Bei Visual C++ 6 kann man die Headerdateien mit
#include iostream.h
oder mit
#include iostream
namespace std
einbinden. Der Compiler nimmt alle beide Standards an.
Deshalb war ich unter Linux ganz erstaunt.
sorry, aber das muss ich mal korrigieren.
tatsache ist, das praktisch _kein_ compiler (zumindest keiner der mir bekannt ist) 100% ansi compatible ist. vs2002 (also die vorgaengerversion der aktuellen version) war nach plum hall und perennial mehr als 98% kompatibel. das ist verdammt gut - ich habe keine daten fuer vs2003, gehe aber davon aus das der wert noch besser geworden ist. (soweit mit bekannt ist, kann man auch die etwas komplexe boost library mitlerweile ohne probleme uebersetzen.)
wenn du dich ein bisschen mit dem thema auseinandergesetzt haettest, dann wuesstest du das man microsoft beim c/c++ compiler weiss gott nicht unterstellen kann irgendwelche 'boesen' nicht-standard verbrechen zu begehen.
man sollte zum beispiel wissen das der vorsitzende des iso c++ standard-committes 'rein zufaellig' seit etwa 2003 auch einer der massgebenden personen von microsoft in der c++ compiler group ist.
den leuten zu unterstellen sie wuerden boesartigerweise den standard missachten - so wie du das mit deinem posting tust, auch wenn du das nicht ausdruecklich sagst - ist n.m.d. eine frechheit die sich nur auf unwissenheit stuetzen kann.
WM_FYI
Der "neue" C++ Standard ist von 1998
es gibt sehr wohl ein aktives kommittee; die letzte revision des standards fand am 07.11.2004 statt.
wie du offenbar nicht weist, unterliegt der c++ standard einer dauerndern untersuchung und ueberarbeitung.
zu deiner information, hier ein link mit mehr informationen: herb sutter, ansi/iso c++. dort findest du auch informationen ueber den standard selbst, sowie ueber veraenderungen die daran im laufe der zeit stattgefunden haben.
WM_FYI
ansi und iso c++ unterscheiden sich in der praxis _nicht_ - darum wird auch gerne auf ansi/iso c++ verwiesen.
es gibt aber kleinere feinheiten. so enthaelt ein c++ compiler per definition einen c compiler - und das 'c subset' in ansi/iso c++ unterscheidet sich von iso c. allerdings in bereichen mit denen man im normalfall praktisch nichts zu tun bekommt (trigraphen fallen mir gerade ein, es gibt aber noch ein paar andere feinheiten.)
doch wie gesagt: das sind _feinheiten_ die _nichts_ mit der allgemeinen form und syntax der sprache zu tun haben.
sofern es linux betrifft ist der gcc eigentlich immer der compiler der wahl und sollte auch problemlos gehen. vorschlag: dein problem ist eher eines fuer den programmier-bereich auf nickles.de.
Poste doch mal den Source Code der nicht geht.
Gruss, d-oli
Erstmal Danke für die informativen Antworten. Ich programmiere meistens mit der MFC von Microsoft, weil die Firmen hier alle unter Windows programmieren. Vielleicht ändert sich das auch mal mit der QT-Bibliothek von Trolltech Norwegen . Die Standard C++ Bibliothek habe ich bis jetzt noch gar nicht benutzt.
