在控制台中看不到 Windows 程序的标准输出(在 Windows 上使用 Clang 编译)

Posted

技术标签:

【中文标题】在控制台中看不到 Windows 程序的标准输出(在 Windows 上使用 Clang 编译)【英文标题】:Can't see Windows program's stdout in console (compiled with Clang on Windows) 【发布时间】:2019-04-01 15:07:12 【问题描述】:

当我使用 clang 构建一个简单的控制台应用程序时,它运行良好:

void main() puts("HELLO");

但是当我使用WinMain 创建一个 Windows 应用程序时,我看不到标准输出。

必须有一个标志来修复它,比如 MinGW 的-mconsole

【问题讨论】:

您可以使用以下命令打开控制台窗口:AllocConsole() Clang 只是编译器,它是确定您的目标子系统的链接器。所以你必须告诉我们你使用的是什么链接器。 @HansPassant clang 使用 link.exe 到目前为止,我在 GUI 应用程序中使用普通的 main 函数也从未遇到过问题。我不会使用 WinMain,不管 MS 家伙说什么...... 【参考方案1】:

其他 GUI 应用程序的快速标准输出启用器:

if (AllocConsole())

    FILE* fi = 0;
    freopen_s(&fi, "CONOUT$", "w", stdout);

然后std::coutprintf 工作。

【讨论】:

你是英雄!非常感谢【参考方案2】:

WinMain 是用于 Windows 图形应用程序(带有窗口和菜单等)的自定义 Microsoft 入口函数。默认没有控制台。

如果你想要一个控制台程序,你应该只使用标准的main 函数。

如果您想要一个也有控制台的图形应用程序 (WinMain),那就有点麻烦了。检查How do I get console output in C++ with a Windows program? 以了解如何实现这一点。

【讨论】:

以上是关于在控制台中看不到 Windows 程序的标准输出(在 Windows 上使用 Clang 编译)的主要内容,如果未能解决你的问题,请参考以下文章

除非我“强制关闭”应用程序,否则在 Windows 中看不到由 Android 应用程序在 SD 卡上写入的文件

在 Windows 资源管理器中看不到在 android 中创建的文件 [重复]

标签栏和导航控制器在视图控制器中看不到了

为啥我在 osgi 控制台中看不到任何帮助?

组件 $onInit() 在控制器中看不到变量 - angularjs 1.6.x

在 python 中看不到数据库查询输出