ich benutze “gcc-Datei.c” und “gcc -O2 Datei.c”aber beide führen zu den folgenden Fehlern:
sorbolinux-exec.c: In function ‘sc’:
sorbolinux-exec.c:76: error: stray ‘\302’ in program
sorbolinux-exec.c:76: error: stray ‘\244’ in program
sorbolinux-exec.c:76: error: ‘t’ undeclared (first use in this function)
sorbolinux-exec.c:76: error: (Each undeclared identifier is reported only once
sorbolinux-exec.c:76: error: for each function it appears in.)
Ich habe versucht, sie auf beiden zu kompilieren Kali-Linux und Ubuntu 10.04 (Lucid Lynx) und bekam das gleiche Ergebnis.
Klingt für mich so, als ob Ihre Dateien “nationale” Zeichen enthalten, die in Kennungen oder dergleichen nicht zulässig sind. Aber Sie sollten wirklich die Zeilen in Ihre Frage aufnehmen, die diese Fehler erhalten.
– Heiße Licks
5. Oktober 2013 um 13:29 Uhr
Fehlermeldungen sagen alles.
– Dies
5. Oktober 2013 um 13:39 Uhr
\302\244 ist die oktale Darstellung der UTF-8-Sequenz 0xC2 0xA4, was das Währungszeichen ist: ¤.
– Kodo
5. Oktober 2013 um 13:45 Uhr
Diese Frage ist die kanonisch Frage zu den Problemen mit Streuzeichen, die häufig beim Kopieren und Einfügen von Code von Webseiten, PDF-Dokumenten oder über Chat (z. B. Skype-Chat oder Facebook Messenger). Daher verdient es umfassende Antworten. Zur Zeit, nur Die Antwort von twitchdotcom slash KANJICODER passt zu dieser Rechnung.
– Peter Mortensen
5. März 2021 um 5:10 Uhr
Eine häufige ist streunend ‘\342’ ‘\200’ ‘\213’ (Oktalzahlen – UTF-8-Bytesequenz 0xE2 0x80 0x8B, Unicode-Codepunkt U+200B (NULL BREITE RAUM)). Ein Suchen/Ersetzen im regulären Ausdrucksmodus in Geany zum \x{200B} hat funktioniert.
– Peter Mortensen
5. März 2021 um 10:36 Uhr
Sie haben ein ungültiges Zeichen in dieser Zeile. Das habe ich gesehen:
danke, aber das entfernt nur 2 Fehlerzeilen und diese Fehler existieren immer noch raw.c: In Funktion ‘sc’: raw.c:76: Fehler: ‘t’ undeclared (erste Verwendung in dieser Funktion) raw.c:76: error: (Jeder nicht deklarierte Bezeichner wird nur einmal gemeldet raw.c:76: error: für jede Funktion, in der er vorkommt.)
– Ahmed Taher
5. Oktober 2013 um 13:45 Uhr
@AhmedTaher: Der Fix entfernt sicherlich die Fehlermeldungen in Ihrer Frage. Wenn andere Fehler bestehen bleiben, fügen Sie sie bitte Ihrer Frage hinzu.
– Kodo
5. Oktober 2013 um 13:47 Uhr
Höchstwahrscheinlich die Linie uint64_t *p = (void *) ¤t[i]; geändert werden muss uint64_t *p = (void *) ¤t[i];. (¤ ist die HTML-Entität für das Währungszeichen.
– Kodo
5. Oktober 2013 um 13:50 Uhr
Wenn Sie das Währungszeichen aus Ihrem Code entfernen, können diese Fehlermeldungen nicht mehr erzeugt werden. Es ist einfach unmöglich.
– Kodo
5. Oktober 2013 um 13:52 Uhr
Die eigentliche Erklärung ist, dass Browser früher viel um ihre Fähigkeit konkurrierten, wirklich schlechten HTML-Code mit vielen Fehlern wiederzugeben. Der Browser von OP sah beim Anzeigen des Codebeispiels eine Zeichenfolge, die mit einem kaufmännischen Und begann und mit einem Semikolon endete, die nicht genau mit einer HTML-Entität übereinstimmte, aber nahe daran war, und entschied sich für die Ersetzung, aber auch für die Anzeige der zusätzliche Text … dies war ein HTML-Parsing-Fehler seitens des Browsers, weil er versuchte, zu hilfreich zu sein.
– Theodor Murdock
11. Mai 2018 um 18:03 Uhr
Klaus
Sie haben ungültige Zeichen in Ihrer Quelle. Wenn Sie keine gültigen Nicht-ASCII-Zeichen in Ihrer Quelle haben, vielleicht in einem String-Literal in doppelten Anführungszeichen, können Sie Ihre Datei einfach wieder in ASCII konvertieren mit:
tr -cd '\11\12\15\40-\176' < old.c > new.c
Die Methode mit iconv stoppt bei falschen Zeichen, was keinen Sinn macht. Die obige Befehlszeile funktioniert mit der Beispieldatei.
KANJICODER
Sicher, konvertieren Sie die Datei in ASCII und sprengen Sie alle Unicode-Zeichen weg. Es wird wohl funktionieren…Aber…
Sie werden nicht wissen, was Sie repariert haben.
Außerdem werden alle Unicode-Kommentare zerstört. Beispiel: //: A²+B²=C²
Es könnte möglicherweise die offensichtliche Logik beschädigen und der Code wird immer noch beschädigt, aber die Lösung ist weniger offensichtlich. Zum Beispiel: Eine Zeichenfolge mit „Smart-Quotes“ („&“) oder ein Zeiger mit einem Sternchen voller Breite (*). Jetzt sieht „SOME_THING“ aus wie ein #define (SOME_THING) und *SomeType ist der falsche Typ (SomeType).
Zwei weitere chirurgische Ansätze zur Behebung des Problems:
Wechseln Sie die Schriftart, um das Zeichen zu sehen. (Es könnte in Ihrer aktuellen Schriftart unsichtbar sein)
Reguläre Ausdrücke durchsuchen alle Unicode-Zeichen, die nicht Teil des nicht erweiterten ASCII sind.
Im Notepad++ Ich kann bis zu FFFF suchen, was mich noch nicht im Stich gelassen hat.
[\x{80}-\x{FFFF}]
80 ist hex für 128, das erste erweiterte ASCII-Zeichen.
Nachdem Sie auf „Weitersuchen“ geklickt und einen scheinbar leeren Bereich markiert haben, können Sie Ihren Suchdialog schließen und drücken Strg + C in die Zwischenablage zu kopieren.
Fügen Sie dann das Zeichen in ein Unicode-Suchwerkzeug ein. Ich nutze meistens ein Online. http://unicode.scarfboy.com/
Beispiel:
Ich hatte irgendwie einen Aufzählungspunkt (•) in meinem Code. Der Unicode-Wert ist 2022 (Hex), aber wenn er vom Compiler als ASCII gelesen wird, erhalten Sie \342 \200 \242 (3 Oktalwerte). Es ist nicht so einfach, jeden Oktalwert in Hex umzuwandeln und sie zusammenzuschlagen. Also “E2 80 A2” ist nicht der hexadezimale Unicode-Punkt in Ihrem Code.
Ja, das ist so eine Art umfassend Antwort, die die am höchsten bewertete und akzeptierte Antwort sein sollte.
– Peter Mortensen
5. März 2021 um 5:01 Uhr
Alternativ suchen/ersetzen Sie nur das anstößige Zeichen. ZB mit \x{200B} (Fehlerstreuung ‘\342’ ‘\200’ ‘\213’). Das hat bei mir funktioniert, nachdem ich den Code von kopiert hatte eine Internetseite.
– Peter Mortensen
5. März 2021 um 10:17 Uhr
Eine ähnlich umfassende Antwort auf eine ähnliche Frage (für Linux).
(Die Beispiel-QMK-Webseite ist kaputt gegangen. Alternativer Standort. Aber ich kann das Problem mit dem neuen Speicherort nicht reproduzieren. Vielleicht haben sie zu viele Beschwerden bekommen und es behoben?)
– Peter Mortensen
8. März um 0:15
Die magische Kuh
Ich habe das gleiche mit einem Zeichen, das sichtbar als Sternchen erschien, aber es war stattdessen eine UTF-8-Sequenz:
Encoder * st;
Beim Kompilieren wurde Folgendes zurückgegeben:
g.c:2:1: error: stray ‘\342’ in program
g.c:2:1: error: stray ‘\210’ in program
g.c:2:1: error: stray ‘\227’ in program
342 210 227 entpuppt sich als UTF-8 für Sternchen-Operator (Unicode-Codepunkt U+2217).
Das Löschen des ‘*’ und erneutes Eingeben behob das Problem.
sehen
Immer wenn der Compiler ein Sonderzeichen gefunden hat, gibt er diese Art von Kompilierungsfehlern aus. Der Fehler, den ich gefunden habe, ist folgender:
Fehler: Streuner ‘\302’ im Programm und Fehler: Streuner ‘\240’ im Programm
….
Es ist ein Stück Code, das ich von einem Chat-Messenger kopiert habe. Im Facebook Messenger, es war nur ein Sonderzeichen. Nach dem Kopieren in den Vim-Editor änderte es sich nur in das richtige Zeichen. Aber der Compiler gab den obigen Fehler aus … dann … diese Aussage, die ich manuell geschrieben habe, nachdem … sie behoben wurde … 🙂
Peter Mortensen
Es liegt vielleicht daran, dass Sie Code aus dem Internet kopiert haben (von einer Site, die vielleicht keine ASCII-codierte Seite, sondern eine UTF-8-codierte Seite hat), sodass Sie den Code von dieser Site in ASCII konvertieren können:
Dort können Sie Fehler entweder manuell erkennen, indem Sie sie zurück in UTF-8 konvertieren, oder Sie können sie automatisch in ASCII konvertieren und alle Streuzeichen entfernen.
Peter Mortensen
Dieses Problem tritt auf, wenn Sie Text von einer HTML-Seite kopiert oder Änderungen in einer Windows-Umgebung vorgenommen haben und versuchen, in einer Unix/Solaris-Umgebung zu kompilieren.
Bitte machen Sie “dos2unix” um die Sonderzeichen aus der Datei zu entfernen:
dos2unix fileName.ext fileName.ext
13912600cookie-checkKompilierungsfehler: verirrtes ‘\302’ im Programm uswyes
Klingt für mich so, als ob Ihre Dateien “nationale” Zeichen enthalten, die in Kennungen oder dergleichen nicht zulässig sind. Aber Sie sollten wirklich die Zeilen in Ihre Frage aufnehmen, die diese Fehler erhalten.
– Heiße Licks
5. Oktober 2013 um 13:29 Uhr
Fehlermeldungen sagen alles.
– Dies
5. Oktober 2013 um 13:39 Uhr
\302\244
ist die oktale Darstellung der UTF-8-Sequenz 0xC2 0xA4, was das Währungszeichen ist: ¤.– Kodo
5. Oktober 2013 um 13:45 Uhr
Diese Frage ist die kanonisch Frage zu den Problemen mit Streuzeichen, die häufig beim Kopieren und Einfügen von Code von Webseiten, PDF-Dokumenten oder über Chat (z. B. Skype-Chat oder Facebook Messenger). Daher verdient es umfassende Antworten. Zur Zeit, nur Die Antwort von twitchdotcom slash KANJICODER passt zu dieser Rechnung.
– Peter Mortensen
5. März 2021 um 5:10 Uhr
Eine häufige ist streunend ‘\342’ ‘\200’ ‘\213’ (Oktalzahlen – UTF-8-Bytesequenz 0xE2 0x80 0x8B, Unicode-Codepunkt U+200B (NULL BREITE RAUM)). Ein Suchen/Ersetzen im regulären Ausdrucksmodus in Geany zum
\x{200B}
hat funktioniert.– Peter Mortensen
5. März 2021 um 10:36 Uhr