warning: multi-character character constant [-Wmultichar]

Persönliche Seite
Hintergrund:

Der Quelltext ist mit utf-8 codiert. Zeichen, die nicht in den 
7-Bit-ASCII-Zeichensatz passen, werden mit (mindestens) zwei Bytes 
codiert.

Damit ist die "char"-Konstante 'ü' größer als ein Byte.

Es gibt auch 8-Bit-Codierungen, in denen Umlaute verwendet werden 
können, eine verbreitete ist "Windows-ANSI", auch "ISO8859-1", "Latin-1" 
oder "CP 1252" ("CP" steht für code page) genannt.

Wenn der Quelltext statt mit utf-8 in dieser Codierung vorliegen würde, 
wäre die "char"-Konstante 'ü' ein Byte groß.

Wenn man allerdings mit "code pages" arbeitet, muss auch das Zielsystem 
mit der gleichen "code page" arbeiten. Die Windows-Konsole verwendet aus 
historischen Gründen standardmäßig aber die DOS-Codepage 850 bzw. 437, 
in der Umlaute komplett anders codiert sind.

Jetzt muss man entweder im Programm mit der Win32-API-Funktion 
SetConsoleOutputCP die gewünschte Codepage einstellen oder aber das 
von Hand vor dem Aufruf des Programmes in der Konsole machen (mode con 
cp select=nummer).

Das Resultat kann aber trotzdem bescheiden aussehen, wenn in der 
Windows-Konsole ein Pixelfont verwendet wird (Standard in allen 
Windows-Versionen vor Windows 10). Dieser kann nur die Zeichen aus der 
DOS-Codepage darstellen ... Umlaute funktionieren, aber komplizierteres 
wie die hochgestellte 3 sind nicht möglich.

Damit das geht, muss man die Konsole dazu bringen, eine Truetypeschrift 
zu verwenden (Lucida Console oder Consolas).

Auf Englisch nennt man das resultierende Thema aus gutem Grund "a can of 
worms".
Rufus Τ. F. schrieb:
> Es gibt auch 8-Bit-Codierungen, in denen Umlaute verwendet werden
> können, eine verbreitete ist "Windows-ANSI", auch "ISO8859-1", "Latin-1"
> oder "CP 1252" ("CP" steht für code page) genannt.

Wobei seit der Einführung des Euro eher ISO-8859-15 gebräuchlich ist, 
weil das das Euro-Symbol enthält.

> Wenn der Quelltext statt mit utf-8 in dieser Codierung vorliegen würde,
> wäre die "char"-Konstante 'ü' ein Byte groß.

Nicht der Quelltext muss in dieser Codierung vorliegen, sondern sie muss 
als execution character set gewählt sein. Es gibt in C eine Trennung 
zwischen dem "source character set", in dem der Quellcode verfasst ist 
und dem "execution character set", das zur Laufzeit auf dem System 
genutzt wird, wo der Code ausgeführt wird. Bei gcc kann man diese beiden 
mit den Optionen -finput-charset und -fexec-charset angeben.
Für den obigen Fall würde man also
1
-finput-charset=utf-8 -fexec-charset=iso-8859-15
den Compiler-Optionen hinzufügen.
OP
Rolf M. schrieb:
> Bei gcc kann man diese beiden
> mit den Optionen -finput-charset und -fexec-charset angeben.
> Für den obigen Fall würde man also-finput-charset=utf-8
> -fexec-charset=iso-8859-15
> den Compiler-Optionen hinzufügen.

Das ist ja interessant, das werde ich mal bei Gelegenheit ausprobieren. 
Meine IDE legt nämlich neue Dateien automatisch als UTF-8 an, ich kam 
noch nicht dazu zu schaun wo ich das ändern kann.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.