在控制台中看不到 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::cout
和printf
工作。
【讨论】:
你是英雄!非常感谢【参考方案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 中创建的文件 [重复]