Есть простейшая программа, выводит Unicode-строку:
#include <stdio.h>
#include <wchar.h>
wchar_t my_message[] = {'H', 'e', 'l', 'l', 'o', '\n', 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).
Пробовал следующее:
1. Использовать extern "C" при подключении wchar.h в исходнике:
extern "C" {
#include <wchar.h>
}
2. Указывать библиотеку libstdc++ при компиляции:
g++ wprintf.c -o wprintf -lstdc++
Ни то, ни другое не помогло.