将_POSIX_C_SOURCE定义为2会导致在使用MinGW GCC的Windows CMD上更改代码页时发生错误

问题描述 投票:1回答:1

我一直在编写旨在在终端上写非英语字符的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
������������������ ����������
c cmd mingw codepages
1个回答
0
投票

这是因为在有效遵守POSIX的情况下,逐字节地输出到标准输出。它使用printf函数内部执行的操作的不同实现。

© www.soinside.com 2019 - 2024. All rights reserved.