Hallo liebe Profis, ich stecke ein bisschen fest: ich möchte in einem String die Sonderzeichen ersetzten. Das hat auch bei Studio4 Winavr gut funktioniert doch in Eclipse bekomme ich folgende Meldung: Multiple markers at this line - multi-character character constant [-Wmultichar] - case label value is less than minimum value for type [enabled by default] wenn ich dort schreibe: switch (c) //sucht nach Sonderzeichen und ersetzt diese { case 'ä': //ü wird ersetzt duch 0xE1 c = 0xE4; break; Die selbe Meldung bekomme ich bei: if (c=='ä'){} Ist vermutlich eine Einstellung im GCC-Compiler ?
Boris schrieb: > Ist vermutlich eine Einstellung im GCC-Compiler ? 'ä' ist kein normales ACCII Zeichen, quellcode sollte aber nur ASCII enthalten. Im schlimmsten fall speichert er den Quellcode sogar als UTF8 - was auch nicht zulässig ist. schreibe einfach den hex code hin, der bei dir dem 'ä' entspricht.
Das 'ä' ist das Problem. Dein Editor verwendet als Zeichencodierung UTF-8, damit ist das nicht ein einzelnes Byte, sondern zwei. Daß das 'ä' kein ASCII-Zeichen ist, ist nicht das eigentliche Problem; würde der Editor beispielsweise in CP1252 (auch Windows-ANSI genannt, alternativ ist auch ISO8859-1 oder "Latin 1" zulässig) codieren, wäre das 'ä' nur ein einzelnes Byte, und dann ist es als Zeichenkonstante zulässig. Das ist keine Compilereinstellung, sondern eine des Editors, also von Eclipse.
Du meinst sowas wie case 0xFC: c=0xE2 ? Ist halt umständlich ich ab ja Texte in der Form wie char room [][11]={"","Büro ","Diele ","Küche "}; Wie bekomme ich da Umlaute rein die ich dann an das Display senden kann ?
Boris Hightech schrieb: > Wie bekomme ich da Umlaute rein die ich dann an das Display senden kann > ? das kommt auch auf den Display an, ob es direkt dem Zeichensatz vom PC entspricht. char room [][11]={"","B\x12ro ","Diele ","K\x34che "};
Rufus Τ. Firefly schrieb: > Das ist keine Compilereinstellung, sondern eine des Editors, also von > Eclipse. Achso, denn schau ich mal in den Editor-Einstellungen. Das erklärt auch die Meldung mit dem "multi" und das im Diplay 2 Hiroglyphen stehen.
Danke an alle, wenn ich die Codierung auf ISO-8859-1 umstelle funktioniert das wie gewünscht !
Hab hier das gleiche Problem. Das hier liegt in der Datei in der main liegt und funktioniert:
1 | int s; |
2 | for (s = 0; s < 101; s++) { |
3 | myGLCD.drawPixel(0,0); |
4 | };
|
Das hier liegt in einer neu angelegten Datei sevenseg.cpp
1 | extern UTFT myGLCD; |
2 | |
3 | .
|
4 | .
|
5 | .
|
6 | |
7 | int i; |
8 | for (i = 0; i < 101; i++) { |
9 | myGLCD.drawPixel(0,0); |
10 | };
|
und bringt schon vor dem compilieren in der Zeile: for (i = 0; i < 101; i++) { Multipe markers at this line -Syntax error -Syntax error -Syntax error Außerdem bekomme ich: Unused declaration of variable 'myGLCD' sevenseg.cpp /Test_7_7_seg line 5 Code Analysis Problem Irgendwie die Datei nicht richtig hinzugefügt?
Markierer schrieb: > Das hier liegt in einer neu angelegten Datei sevenseg.cppextern UTFT > myGLCD; > > . > . > . > > int i; > for (i = 0; i < 101; i++) { > myGLCD.drawPixel(0,0); > }; naja das sollte schon in einer Funktion stehen und nicht einfach so in der Datei.
Hihi. Jaa.. wenn man es gleich richtig macht, dann funktioniert's auch. Wenn man nicht konzentriert ist sollte man die Finger vom Rechner lassen...
Rufus Τ. Firefly schrieb: > Das 'ä' ist das Problem. Dein Editor verwendet als Zeichencodierung > UTF-8, damit ist das nicht ein einzelnes Byte, sondern zwei. > > Daß das 'ä' kein ASCII-Zeichen ist, ist nicht das eigentliche Problem; > würde der Editor beispielsweise in CP1252 (auch Windows-ANSI genannt, > alternativ ist auch ISO8859-1 oder "Latin 1" zulässig) codieren, wäre > das 'ä' nur ein einzelnes Byte, und dann ist es als Zeichenkonstante > zulässig. > > Das ist keine Compilereinstellung, sondern eine des Editors, also von > Eclipse. Naja, das stimmt nicht ganz. Es gibt nämlich in C eine Unterscheidung zwischen dem "source character set" und dem "execution characer set". Die dürfen durchaus unterschiedlich sein, und der Compiler kann zwischen denen konvertieren. Das heißt, selbst wenn das 'ä' in der Zeichenkonstante im Quellcode aus zwei Bytes besteht, muss es das nicht zwangsläufig auch im generierten Code tun. gcc bietet Kommandozeilenparameter zur Angabe beider Zeichensätze, nämlich -fexec-charset und -finput-charset. Tatsächlich geht gcc per Default sogar von UTF-8 für beide Zeichensätze aus. Aus der manpage:
1 | -fexec-charset=charset |
2 | Set the execution character set, used for string and character constants. |
3 | The default is UTF-8. charset can be any encoding supported by the |
4 | system's "iconv" library routine. |
5 | |
6 | -fwide-exec-charset=charset |
7 | Set the wide execution character set, used for wide string and character |
8 | constants. The default is UTF-32 or UTF-16, whichever corresponds to the |
9 | width of "wchar_t". As with -fexec-charset, charset can be any encoding |
10 | supported by the system's "iconv" library routine; however, you will have |
11 | problems with encodings that do not fit exactly in "wchar_t". |
12 | |
13 | -finput-charset=charset |
14 | Set the input character set, used for translation from the character set |
15 | of the input file to the source character set used by GCC. If the locale |
16 | does not specify, or GCC cannot get this information from the locale, the |
17 | default is UTF-8. This can be overridden by either the locale or this |
18 | command line option. Currently the command line option takes precedence |
19 | if there's a conflict. charset can be any encoding supported by the |
20 | system's "iconv" library routine. |
Wenn der Compiler für beide Zeichensätze UTF-8 verwendet, ist aber 'ä' kein mit char darstellbares Zeichen. In einem switch-Statement sollte es sich dann zwar verwenden lassen, das Resultat aber ist nicht hilfreich.
Rufus Τ. Firefly schrieb: > Wenn der Compiler für beide Zeichensätze UTF-8 verwendet, ist aber 'ä' > kein mit char darstellbares Zeichen. Nicht mit einem einzelnen char, richtig. Man kann aber das input-charset durchaus auf UTF-8 lassen und nur das execution-charset auf z.B. ISO-8859-1 einstellen. Es scheint, als ob gcc, wenn beide Encodings gleich sind, diese nicht näher untersucht und einfach durchreicht. Nur deshalb funktioniert das im Compiler fehelrfrei, wenn man das Quellfile als iso-8859-1 abspeichert und gcc aber trotzdem im Glauben läßt, das sei utf-8. Denn z.B. der Code für das iso-8859-1-Zeichen À wäre in UTF-8 das erste Byte eines Multibyte-Zeichens, und wenn dann das dazugehörige nächste Byte fehlt, müßte es eigentlich eine Fehlermeldung wegen einer defekten Multibyte-Sequenz geben. Mein Test hat ergeben, daß das aber nicht der Fall ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.