Pourquoi ce programme est-il à tort rejeté par trois compilateurs C++?
J'ai quelques difficultés à la compilation d'un programme C++ que j'ai écrit.
Ce programme est très simple et, au meilleur de ma connaissance, est conforme à toutes les règles énoncées dans la Norme C++. J'ai lu l'intégralité de la norme ISO/IEC 14882:2003 deux fois pour être sûr.
Le programme est comme suit:
Ici est le résultat que j'ai reçu lorsque vous essayez de compiler ce programme avec Visual C++ 2010:
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
Consterné, j'ai essayé de g++ 4.5.2, mais il est tout aussi inutile:
c:\dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
J'ai pensé que Clang (version 3.0 tronc 127530) doivent travailler, car c'est très apprécié pour sa conformité aux normes. Malheureusement, il n'a même pas me donner un de ses jolis, a mis en évidence des messages d'erreur:
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)
Pour être honnête, je ne sais pas vraiment ce que l'un de ces message d'erreur signifie.
De nombreux autres programmes C++ source des fichiers avec un .rpc extension, alors j'ai pensé que peut-être j'ai besoin de renommer mon fichier. J'ai changé son nom pour helloworld.cpp, mais cela n'a pas aidé. Je pense qu'il y a un très sérieux problème de Bruit parce que quand j'ai essayé de l'utiliser pour compiler le nouveau nom de programme, il a pété les plombs, imprimé "84 les avertissements et les 20 erreurs générées." et mon ordinateur bip beaucoup!
Qu'ai-je fait de mal? Ai-je oublié certaines critiques partie de la Norme C++? Ou sont tous les trois compilateurs vraiment juste tellement cassé qu'ils ne peuvent pas compiler ce programme simple?
Vous devez vous connecter pour publier un commentaire.
Dans la norme, §2.1/1 spécifie:
Votre compilateur ne supporte pas ce format (aka ne peut pas correspondre à la source de base de jeu de caractères), de sorte qu'il ne peut pas se déplacer dans d'autres étapes de traitement, d'où l'erreur. Il est tout à fait possible que votre compilateur soutien d'une cartographie à partir d'une image de base de la source de jeu de caractères, mais n'est pas tenu de le faire.
Depuis cette cartographie est mise en œuvre défini, vous aurez besoin de regarder votre implémentations de la documentation pour voir les formats de fichier pris en charge. Généralement, toutes les grandes fournisseur de compilateur prend en charge (canoniquement défini) les fichiers de texte: aucun fichier produit par un éditeur de texte, généralement une série de caractères.
Noter que la norme C++ est basé sur la norme (§1.1/2), et C(99) standard dit, dans le §1.2:
Donc, encore une fois, le traitement des fichiers source est quelque chose que vous devez rechercher dans vos compilateurs de la documentation.
À l'origine de Overv @ reddit.
Essayer de cette façon:
Votre
<
et>
,(
et)
,{
et}
ne semblent pas correspondre très bien; Essayez de le faire mieux.Vous pouvez essayer le script python ci. Notez que vous devez installer PIL et pytesser.
Pour l'utiliser, faire:
Vous avez oublié d'utiliser Comic Sans qu'une police, c'est pourquoi son erroring.
Je ne peux pas voir une nouvelle ligne après la dernière accolade.
Comme vous le savez: "Si un fichier source qui n'est pas vide ne se termine pas par un caractère de nouvelle ligne, ... le comportement est indéfini".
Ce programme est valide -- je peux trouver aucune erreur.
Ma conjecture est que vous avez un virus sur votre machine. Il serait mieux si vous reformater votre disque dur et réinstaller le système d'exploitation.
Laissez-nous savoir comment cela fonctionne, ou si vous avez besoin d'aide avec le réinstaller.
Je déteste les virus.
J'ai trouvé ça permet de ne pas écrire mon code sur mon écran en verre avec un marqueur magique, même si il a l'air sympa quand ils sont vraiment noir. L'écran se remplit trop vite et puis, les gens qui me donnent un nettoyer le moniteur appelez-moi les noms de chaque semaine.
Un couple de mes employés (je suis un manager) sont l'éclatement de m'acheter un de ces pad rouge ordinateurs avec les boutons. Ils ont dit que je n'aurez pas besoin de repères et je peux nettoyer l'écran moi-même quand il est plein, mais je dois être prudent de les secouer. Je suppose que c'est délicat de cette façon.
C'est pourquoi j'embauche des gens intelligents.
File format not recognized
Vous avez besoin de formater correctement votre fichier. Cela signifie en utilisant les bonnes couleurs et les polices de votre code. Voir la documentation spécifique pour chaque compilateur que ces couleurs varient entre le compilateur 😉Vous avez oublié le pré-processeur. Essayez ceci:
Avez-vous écrire à la main le programme, puis de le scanner à l'ordinateur? Qu'est ce qui est impliqué par "helloworld.png". Si c'est le cas, vous devez être conscient que la norme C++ (même dans sa nouvelle édition) ne nécessitent pas la présence de reconnaissance optique de caractères, et, malheureusement, il n'est pas inclus en option en tout compilateur actuel.
Vous pourriez envisager de transposer les graphiques dans un format textuel. Tout éditeur de texte peut être utilisé; l'utilisation d'un traitement de texte, bien que capable de générer un joli imprimé, le plus de chances dans la même erreur que vous obtenez tout en essayant de numérisation.
Si vous êtes vraiment aventureux, vous pouvez essayer d'écrire votre code dans un traitement de texte. Imprimer, de préférence à l'aide d'une police de OCR-A. Ensuite, prenez votre impression et de numérisation dans. L'analyse peut ensuite être exécuté par l'intermédiaire d'un tiers, logiciel d'OCR pour générer une forme de texte. La forme du texte peut ensuite être compilé à l'aide de l'un des nombreux compilateurs.
Méfiez-vous, cependant, de la grands frais de papier que cela entraînera au cours de la phase de débogage.
Attirer l'inclure ci-dessous pour en faire la compilation:
J'ai entendu dire qu'il permet de compiler des erreurs de syntaxe...
#include <JonSkeet>
.Malheureusement, vous avez sélectionné trois compilateurs que tous les prendre en charge plusieurs langues, et pas seulement en C++. Ils ont tous de deviner le langage de programmation utilisé. Comme vous le savez probablement déjà, le format PNG est adapté pour tous les langages de programmation, et pas seulement en C++.
Généralement, le compilateur peut comprendre le langage lui-même. Par exemple, si le format PNG est évidemment dessiné avec des crayons, le compilateur sait qu'il contient Visual Basic. Si il semble que c'est dessiné avec un stylo, il est facile de reconnaître l'ingénieur, de l'écriture de code FORTRAN.
Cette deuxième étape n'aide pas le compilateur, soit, dans ce cas. Le C et le C++, il suffit de regarder trop similaires, jusqu'à la
#include
. Par conséquent, vous devez aider le compilateur à décider quelle langue il est vraiment. Maintenant, vous pouvez utiliser non-standard. Par exemple, le compilateur Visual Studio accepte la /TC et /TP arguments de ligne de commande, ou vous pouvez utiliser la fonction "Compiler comme: C++" option dans le fichier de projet. GCC et CLang ont leurs propres mécanismes, dont je ne sais pas.Par conséquent, je vous recommande d'utiliser plutôt la méthode standard pour dire à votre compilateur que le code est en C++. Comme vous l'avez découvert maintenant, les compilateurs C++ sont très pointilleux sur ce qu'ils acceptent. Par conséquent, la norme de façon à identifier C++ est par l'intimidation programmeurs ajoutent à leur code C++. Par exemple, la ligne suivante permettra de clarifier votre compilateur que ce qui suit est le C++ (et qu'il vaut mieux compiler sans plaintes).
#pragma
était la bonne manière de "mettre un message" pour le compilateur?Est le compilateur est défini en mode expert?! Si oui, il ne devrait pas compiler. Les compilateurs modernes sont fatigués de "Hello World!"
Essayez celui-ci:
OCR Dit:
Qui est sacrément bon, pour être juste.
Évidemment, vous devez formater votre disque dur.
Vraiment, ces erreurs ne sont pas si difficiles à lire.
J'ai fait convertir votre programme à partir de PNG au format ASCII, mais il ne compile pas encore. Pour votre information, j'ai essayé avec une largeur de ligne de 100 et de 250 caractères, mais le rendement à des résultats comparables.
Le premier problème, c'est que vous essayez de renvoyer une valeur incorrecte à la fin de la fonction principale. C++ standard stipule que le type de retour de main() est de type int, mais au lieu de cela, vous essayez de renvoyer l'ensemble vide.
L'autre problème est - au moins avec g++ - que le compilateur déduit la langue utilisée dans le fichier de suffixe. De g++(1):
De fixation de ces devrait vous laisser avec un travail entièrement de l'application Hello World, comme peut être vu à partir de la démo ici.
Votre police suce, comment un analyseur jamais être en mesure de lire ça? Prendre un cours de calligraphie.
Vos compilateurs attendent ASCII, mais ce programme est évidemment écrite à l'aide de EBCDIC.
Vous essayez de compiler une image.
Type de ce que vous avez écrit à la main dans un document appelé main.cpp, exécutez ce fichier par le biais de votre compilateur, puis exécutez le fichier de sortie.
Vous devez spécifier la précision de votre sortie précédée d'un immédiatement avant la dernière accolade de fermeture. Depuis la sortie n'est pas numérique, la précision est égale à zéro, de sorte que vous besoin de cela-
:0}
ajouter :
juste après :P:D
std
tout le temps. Rappelle-moi de ne pas en obtenir un.Semble que votre compilateur ne prend pas en charge les fichiers dans ces hmm... l'encodage. Essayez de le convertir en ASCII.
Se trouve le problème avec la syntaxe de définition, essayez d'utiliser la règle et le compas pour un style plus classique, la description!
Acclamations,
Essayez de changer l'interface d'entrée. C++ s'attend à un clavier pour être branché à votre ordinateur, pas un scanner. Il peut y avoir des périphériques problèmes de conflit ici. Je n'ai pas vérifier dans la Norme ISO si le clavier de l'interface d'entrée est obligatoire, mais ce qui est vrai pour tous les compilateurs j'ai jamais utilisé. Mais peut-être un scanner d'entrée est maintenant disponible en C99, et dans ce cas, votre programme doit en effet travailler. Si non, vous devrez attendre la prochaine version standard et mise à niveau des compilateurs.
Vous pouvez essayer différentes couleurs pour les crochets, peut-être un peu de vert ou de rouge aiderait ?
Je pense que ton compilateur ne peut pas rcognize l'encre noire 😛
Suis-je le seul qui ne peut pas reconnaître le caractère compris entre 'retour' et le point-virgule? Que pourrait être ce!
Exécuter le compilateur par reconnaissance optique de caractères. Il est susceptible de résoudre le problème de compatibilité.