GNU C++ и Unicode строки

Автор: Den Zurin Дата: 08.05.2009 07:15 Есть простейшая программа, выводит Unicode-строку:
#include <stdio.h>
#include <wchar.h>

wchar_t my_message[] = {'H', 'e', 'l', 'l', 'o', '
', 0x00};

int main(int argc, char* argv[])
{
wprintf(my_message);
return 0;
}


Компилируем ее с помощью GNU C:
$ gcc wprintf.c -o wprintf
Все в порядке... Создается исполняемый файл wprintf, который при запуске выводит строку "Hello".

Попробуем компилировать с помощью GNU C++:
$ g++ wprintf.c -o wprintf
wprintf.c: In function `int main (int, char **)':
wprintf.c:8: `wprintf' undeclared (first use this function)
wprintf.c:8: (Each undeclared identifier is reported only once for each
function it appears in.)

WTF?! Почему GNU C++ не видит функцию wprintf?
То же самое и с другими стандартными C-функциями для Unicode строк (например, swprintf).

UPD. Пробовал следующее:
1. Использовать extern "C" при подключении wchar.h в исходнике:
extern "C" {
#include <wchar.h>
}

2. Указывать библиотеку libstdc++ при компиляции:
g++ wprintf.c -o wprintf -lstdc++
Ни то, ни другое не помогло.
Re: GNU C++ и Unicode строки 08.05.2009 10:51peter_ir У меня наоборот - с g++ компилируется без замечаний и без подключения библиотек,
а с gcc не находит wprintf, даже с -lc и, на всякий случай, -lgcc.
В чём дело, пока не понял.

Оказалось, что для копиляции с gcc достаточно указать -std=gnu99,
ни с gcc, ни с g++ библиотеки явно подключать не надо.
Re: GNU C++ и Unicode строки 08.05.2009 13:18Den Zurin Google подсказал, что это баг старой версии GCC (2.9.6). Нужно добавлять #define _GNU_SOURCE 1 в начало исходника и компилировать с опцией -Wall. В новых версиях баг устранен.

> Оказалось, что для копиляции с gcc достаточно указать -std=gnu99,
ни с gcc, ни с g++ библиотеки явно подключать не надо.
Функция wprintf - из последнего стандарта ISO C 99. Сейчас для gcc нужно явно задавать этот стандарт (иначе используется ANSI C).
RSS-материал