467 Stimmen

Warum wird dieses Programm von drei C++-Compilern fälschlicherweise abgelehnt?

Ich habe Schwierigkeiten beim Kompilieren eines C++-Programms, das ich geschrieben habe.

Dieses Programm ist sehr einfach und entspricht, soweit ich weiß, allen Regeln des C++-Standards. Ich habe die gesamte ISO/IEC 14882:2003 zweimal durchgelesen, um sicherzugehen.

Das Programm sieht folgendermaßen aus:

enter image description here

Hier ist die Ausgabe, die ich erhielt, als ich versuchte, dieses Programm mit Visual C++ 2010 zu kompilieren:

c:\dev>cl /nologo helloworld.png
cl : Command line warning D9024 : unrecognized source file type 'helloworld.png', object file assumed
helloworld.png : fatal error LNK1107: invalid or corrupt file: cannot read at 0x5172

Enttäuscht versuchte ich es mit g++ 4.5.2, aber auch das war nicht hilfreich:

c:\dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status

Ich dachte mir, dass Clang (Version 3.0 trunk 127530) funktionieren muss, da es für seine Standardkonformität so hoch gelobt wird. Leider hat es mir nicht einmal eine seiner hübschen, hervorgehobenen Fehlermeldungen angezeigt:

c:\dev>clang++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
clang++: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)

Um ehrlich zu sein, weiß ich nicht wirklich, was diese Fehlermeldungen bedeuten.

Viele andere C++-Programme haben Quelldateien mit einer .cpp Erweiterung, also dachte ich, dass ich meine Datei vielleicht umbenennen müsste. Ich änderte ihren Namen in helloworld.cpp aber das hat nicht geholfen. Ich glaube, es gibt einen sehr schwerwiegenden Fehler in Clang, denn als ich versuchte, das umbenannte Programm damit zu kompilieren, flippte es aus, gab "84 Warnungen und 20 Fehler generiert" aus und ließ meinen Computer viel piepen!

Was habe ich hier falsch gemacht? Habe ich einen kritischen Teil des C++-Standards übersehen? Oder sind alle drei Compiler wirklich so kaputt, dass sie dieses einfache Programm nicht kompilieren können?

15voto

Frank Osterfeld Punkte 24349

Ihre Schrift ist beschissen, wie soll ein Parser das jemals lesen können? Mach einen Kalligraphie-Kurs.

13voto

oosterwal Punkte 1479

Ihre Compiler erwarten ASCII aber dieses Programm ist natürlich geschrieben unter Verwendung EBCDIC .

0 Stimmen

Soweit ich weiß, schreibt C++ nicht vor, dass die Programme in ASCII, UTF-8 oder sonst wie geschrieben werden müssen.

8voto

William Punkte 19

Sie versuchen, ein Bild zu kompilieren.

Geben Sie das, was Sie von Hand geschrieben haben, in ein Dokument namens main.cpp ein, lassen Sie diese Datei durch Ihren Compiler laufen und führen Sie dann die Ausgabedatei aus.

23 Stimmen

Überprüfen Sie das Datum auf Ihrem PC.

14 Stimmen

Haha, aber ich habe endlich eine einfache Frage gefunden, die ich beantworten konnte!

10 Stimmen

Das ist albern. Wir alle wissen, dass der Compiler die Leerzeichen herausoptimieren würde, so dass nur stark komprimierter schwarzer Raum übrig bliebe, der nur Einsen enthält und zu einer binären 1 komprimiert würde, die als Fehler zurückgegeben werden würde. Der Code müsste mit Leerzeichen geschrieben werden, das zu 0 kompiliert wird und keinen Fehler zurückgibt.

7voto

MikeJ-UK Punkte 620

Sie müssen die Genauigkeit der Ausgabe mit einem vorangestellten Doppelpunkt angeben unmittelbar vor der endgültigen Schlussklammer . Da die Ausgabe nicht numerisch ist, ist die Genauigkeit gleich Null, so dass Sie Folgendes benötigen.

:0}

5voto

kriss Punkte 22473

Versuchen Sie, die Eingangsschnittstelle zu wechseln. C++ erwartet, dass eine Tastatur an den Computer angeschlossen ist, nicht ein Scanner. Hier kann es zu Konflikten mit Peripheriegeräten kommen. Ich habe im ISO-Standard nicht nachgesehen, ob eine Tastatureingabe obligatorisch ist, aber das gilt für alle Compiler, die ich je benutzt habe. Aber vielleicht ist die Scannereingabe jetzt in C99 verfügbar, und in diesem Fall sollte Ihr Programm tatsächlich funktionieren. Wenn nicht, müssen Sie die nächste Standardveröffentlichung und das Upgrade der Compiler abwarten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X