带有 mingw 的 win32 上的 C printf()

C printf() on win32 with mingw

我在 Linux 上开发一个 SDL2 应用程序是为了好玩,但是我 Windows 也为非 Linux 用户构建,即使没有测试它(我没有 Windows 从来没有)。我为此使用 mingw,交叉编译。一切都很好,但有一件事。该应用程序有一些命令行 switches/messages/help 以及在 C 中使用简单的 printf()。但是根据用户的说法,这在 Windows 上根本不起作用,没有显示输出。我发现了这个:setvbuf (stdout, NULL, _IONBF, 0); 但它没有帮助。此外,我在各种文档和 -mconsole 中发现了 mingw 的 -mwindows 开关,但由于我不太了解 Windows,我不知道在这个对我来说很奇怪的系统上应该如何工作( Windows)。基本上我想要与 Linux 类似的解决方案:如果您从终端 window 开始,您可以看到标准输出,但如果没有,则根本看不到它们,没有 window 是 open/shown 对于那些消息等

我知道没有 windows 替代方案具有与 linux 程序相同的行为。

没有 -mwindows(除了许多其他事情),您的输出将被定向到 stdout 并显示在 cmd 中(并且可以通过管道路由到其他进程 stdin),但是如果您 运行 它没有 cmd - 它将打开一个额外的控制台 window 用于输出。

使用 -mwindows stdio 不再链接到控制台。您仍然可以重定向输出,但您看不到它(例如 your_program.exe | cat 将显示输出,但标准 windows 中没有 cat)。但是,此模式不会自动打开控制台 window。您可以手动创建控制台(或继承父进程的控制台)并将 stdout 重定向到它(使用 freopen("CONOUT$", "w", stdout)),但这不会是 'true' stdio,并且您不能将其通过管道传输到其他进程(可能对你来说还不错)。