Eclipse / Gcc Problem : Multiple markers at this line

Gast #3971435
Lesenswert?

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 ?
Gast #3971447
Lesenswert?

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.
Persönliche Seite #3971461
Lesenswert?

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.
Gast #4096814
Lesenswert?

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?
#4097393
Lesenswert?

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.
#4097446
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren