LINUX.ORG.RU

Русские симоволы в С программе


0

0

Если пишу:

wchar_t ch = L'Ъ';

то выдает предупреждение:

warning: character constant too long

А если пишу:

char ch = 'Ъ';

то выдает предупреждение:

warning: multi-character character constant

У меня locale ru_RU.UTF-8, то есть русские символы заменяются последовательностью байтов. Я думаю, что строчка с wchar_t корректная, только gcc ее не так понял. Что делать?

По идее первый вариант правильный (у меня на него gcc -Wall не ругается). А какой версии gcc?

Murr ★★
()

>wchar_t ch = L'Ъ';

вообще то выглядит правильно.

alphex_kaanoken ★★★
()

Что за задача? Не лучше ли gettext использовать?

amm
()
Ответ на: комментарий от anonymous

> А попробуй без L: wchar_t ch = 'Ъ';

выдает:

warning: multi-character character constant

> Что за задача? Не лучше ли gettext использовать?

русские строки работают нормально, а мне нужны символы

vasirck
() автор топика

по сути строчка с wchar_t - корректная

твой компилятор не/не полностью поддерживает C99

lg ★★
()
Ответ на: комментарий от anonymous

> Интересно а что компилер выдает для строчки

> wchar_t ch = L'\xff';

Это ему понравилось, не ругается

vasirck
() автор топика
Ответ на: комментарий от vasirck

[root@murmillo tmp]# gcc -v
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
Thread model: posix
gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)
[root@murmillo tmp]# cat ttt.c
#include <stdio.h>
#include <stdlib.h>
int main() {
    wchar_t c = L'Ъ';
    printf("%x\n", (unsigned)c);
    return 0;
}
[root@murmillo tmp]# locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
[root@murmillo tmp]# gcc -Wall ttt.c
[root@murmillo tmp]# ./a.out
42a
[root@murmillo tmp]#

Murr ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.