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?

32voto

zamanbakshi Punkte 266

Ist Ihr Compiler auf den Expertenmodus eingestellt?! Wenn ja, sollte es nicht kompiliert werden. Moderne Compiler sind des "Hello World!" müde.

27voto

Robin Duckett Punkte 2084

Das OCR sagt:

N lml_e <loJ+_e__}

.lnt Mk.,n ( ln+ _rSC Lhc_yh )
h_S_
_l

s_l . co__ <, " H llo uo/_d ! '` << s l . ena_ .
TP__rn _ |
_|

Und das ist verdammt gut, um ehrlich zu sein.

4 Stimmen

Wow, OCR hat sich verbessert, seit ich versucht habe, meine Handschrift zu scannen (ich habe auch Stunden damit verbracht, sie gerade zu schreiben).

40 Stimmen

Ich denke, wir müssen einen Perl-Tag hinzufügen.

26voto

Chris Cudmore Punkte 28967

helloworld.png: Datei nicht erkannt: Datei Format nicht anerkannt

Natürlich sollten Sie Ihre Festplatte formatieren.

Diese Fehler sind wirklich nicht so schwer zu lesen.

20voto

Yves Punkte 61

Ich habe Ihr Programm von PNG nach ASCII konvertiert, aber es lässt sich noch nicht kompilieren. Zu Ihrer Information: Ich habe es mit einer Zeilenbreite von 100 und 250 Zeichen versucht, aber beide liefern vergleichbare Ergebnisse.

   `         `  .     `.      `         ...                                                         
   +:: ..-.. --.:`:. `-` .....:`../--`.. `-                                                         
           `      `       ````                                                                      
                                                                      `                             
   ` `` .`       ``    .`    `.               `` .      -``-          ..                            
   .`--`:`   :::.-``-. : ``.-`-  `-.-`:.-`    :-`/.-..` `    `-..`...- :                            
   .`         ` `    ` .`         ````:``  -                  ` ``-.`  `                            
   `-                                ..                           ``                                
    .       ` .`.           `   `    `. ` .  . `    .  `    . . .` .`  `      ` ``        ` `       
           `:`.`:` ` -..-`.`-  .-`-.    /.-/.-`.-.  -...-..`- :```   `-`-`  :`..`-` ` :`.`:`- `     
            ``  `       ```.      ``    ````    `       `     `        `    `         `   `   .     
            : -...`.- .` .:/ `                                                                      
    -       `             `` .                                                                      
    -`                                                                                              
    `

8 Stimmen

Sie sollten wahrscheinlich die 80 oder sogar 72 Spalten stattdessen

16voto

Antti Laine Punkte 129

Das erste Problem ist, dass Sie versuchen, am Ende der Hauptfunktion einen falschen Wert zurückzugeben. Der C++-Standard schreibt vor, dass der Rückgabetyp von main() int ist, aber stattdessen versuchen Sie, die leere Menge zurückzugeben.

Das andere Problem ist - zumindest bei g++ -, dass der Compiler die verwendete Sprache aus dem Dateisuffix ableitet. Aus g++(1):

Für jede beliebige Eingabedatei bestimmt die Dateiendung Suffix des Dateinamens bestimmt, welche Art der Kompilierung durchgeführt wird:

file.cc file.cp file.cxx file.cpp file.CPP file.c++ file.C

C ++ Quellcode, der vorverarbeitet werden muss. Beachten Sie, dass in .cxx die die letzten beiden Buchstaben beide buchstäblich x sein müssen. buchstäbliches großes C.

Wenn Sie diese Probleme beheben, sollten Sie eine voll funktionsfähige Hello World-Anwendung erhalten, wie Sie in der Demo sehen können aquí .

3 Stimmen

Ich hatte früher einen Professor, der Punkte von Hausaufgaben oder Prüfungen abzog, wenn man eine Nullstelle mit einem Schrägstrich versah, da die Null nicht die Nullmenge ist. Er würde diese Antwort zu schätzen wissen.

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