web-dev-qa-db-fra.com

erreur: errer '\ XXX' dans le programme: Pourquoi?

J'écris un petit programme en C++, et tombe sur une erreur étrange:

src/Makefile/Tool.cpp:42:3: error: stray ‘\302’ in program
src/Makefile/Tool.cpp:42:3: error: stray ‘\240’ in program

J'écris ce programme dans vim et la ligne correspondante (montrant les caractères cachés) est:

>--->---std::vector<std::string> { "--debug" }$ 

Cette question n'est pas sur la résolution de cette erreur, car il me suffit de recopier la ligne et la cause de l'erreur disparaît.

Il semble que l'erreur soit causée par certains caractères même cachés par vim après avoir activé toutes les options relatives!

La question est sur ce qui aurait pu causer ces erreurs.

13
Geoffroy

"\302\240" est UTF-8 pour U+00A0 NO-BREAK SPACE. Vim ne le mettra pas normalement en évidence, il est donc possible qu’il se glisse même si le mode 'list' est activé.

Vous pouvez les mettre en évidence avec:

:set listchars+=nbsp:.

ou n'importe quel personnage que vous aimez.

23
Josh Lee

Comme mentionné ci-dessus, cela est dû à certains caractères non visibles dans votre source. Une bonne solution pour cela consiste à éditer votre fichier en mode octal et vous pourrez "voir" ces caractères:

od -c MyClass.hpp

Ensuite, vous pouvez voir dans le flux octal les "étrangers": 

0001240   t       s   t   r   i   n   g   &       n   a   m   e       )
0001260       { **302 240**   t   h   i   s   -   >   n   a   m   e       =
0001300       n   a   m   e   ;       }  \n  \n  \n  \t  \t  \t  \t   /

Ces deux caractères en gras sont la cause de messages comme 

error: stray ‘\302’ in program 

Vous pouvez ensuite les supprimer et les reconstruire. 

Cordialement.

8
Régis KLA

J'ai eu le même problème et c'était l'encodage des caractères pour les espaces avant chaque ligne. Cela est dû à la copie de programmes de notes synchronisés avec Exchange Server et iCloud. Tout ce que j'avais à faire était d'appliquer un remplacement tout en utilisant le bloc-notes à tous les espaces étranges avec des espaces normaux et tout compilé normalement à nouveau.

0
Salem Elnahwy

Pour moi, ce problème venait de la copie de mon code depuis un navigateur Web.

J'ai essayé de faire un :%s/ / /g dans vim pour remplacer tous les espaces par des espaces réels, mais cela a échoué.

J'ai supprimé les espaces blancs de toutes les lignes signalant cette erreur et inséré à nouveau les espaces. Cela demande beaucoup de travail, mais semble être la seule solution que j'ai pu trouver.

0
Andrew Clemence