Я писал программу для Linux, предназначенную для написания на терминале неанглийских символов, недавно я портировал ее на Windows и столкнулся с некоторыми проблемами, когда пытался изменить кодовую страницу икажется, что шрифт терминала с ранее определенной символической константой _POSIX_C_SOURCE меняет поведение кода и делает его неспособным правильно печатать неанглийские символы, для справки, это мой код.
#include <windows.h>
#include <stdio.h>
int main()
{
SetConsoleCP(CP_UTF8)
SetConsoleOutputCP(CP_UTF8)
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFOEX cfie;
ZeroMemory(&cfie, sizeof(cfie));
cfie.cbSize = sizeof(cfie);
lstrcpyW(cfie.FaceName, L"Lucida Console");
SetCurrentConsoleFontEx(hStdOut, 0, &cfie);
printf("Ћирилични текст\n");
return 0;
}
Это то, что выводит программа в зависимости от того, определяю я или нет константу в аргументе командной строки при компиляции.
C:\Users\User\Desktop>gcc test.c
C:\Users\User\Desktop>a.exe
Ћириличан текст
C:\Users\User\Desktop>gcc -D_POSIX_C_SOURCE=2 test.c
C:\Users\User\Desktop>a.exe
������������������ ����������