Определение _POSIX_C_SOURCE как 2 вызывает ошибку при изменении кодовой страницы в Windows CMD с MinGW GCC - PullRequest
1 голос
/ 05 октября 2019

Я писал программу для 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
������������������ ����������

1 Ответ

1 голос
/ 05 октября 2019

Это потому, что вывод на стандартный вывод выполняется буквально побайтово, когда действует соответствие POSIX. Он использует другую реализацию того, что делается внутри функции printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...