gpt4 book ai didi

c - 为什么我的程序输出在 Windows 中闪烁并关闭?

转载 作者:可可西里 更新时间:2023-11-01 12:40:29 25 4
gpt4 key购买 nike

我正在尝试为 K&R“Hello, world”构建一个 .exe 文件。书中给出的代码是:

#include <stdio.h>  
main()
{
printf("Hello, world!\n");
}

当我从 Code::Blocks(在 Windows XP 下)构建和运行时,我得到带有“hello world”消息的提示窗口。它保持打开状态,直到我手动关闭它。但是,当我双击 .exe 文件时,提示只是闪烁并消失,这是为什么?

最佳答案

没有人明确告诉你这一点,所以我会:

双击文件时您看到的是正常。您的 IDE 所做的(保持窗口打开)是一项帮助您调试应用程序的功能

为什么会这样?

由于您正在开发控制台 应用程序,因此您的应用程序必须有一个控制台来显示其输出。如果还没有,则会创建一个新的控制台(即黑色窗口)。

如果您从控制台内部启动您的程序(例如,从 cmd.exe),它只会继承父控制台而不创建新控制台[1]。

在最后一个使用控制台的应用程序退出后(在第一种情况下只是您的程序),控制台关闭。对于在不带参数运行时只打印帮助文本的控制台应用程序,您会一直注意到这一点。如果您从资源管理器中双击它们,带有一些文本的黑色窗口将闪烁,然后立即关闭。

  • 有时,一个执行某些操作后立即关闭的程序正是您想要的。例如,您可以从脚本中调用这些应用程序。

  • 另一方面,您的应用程序可以是交互式的:WAITING用户输入,做一些事情,并且仅在用户要求时退出。显然,您不能编写这些应用程序的脚本,因为您需要有人在键盘旁告诉应用程序要做什么。

现在我们进入 IDE 部分:假设您正在开发第一种应用程序,该应用程序执行某些操作然后立即关闭。每次运行时屏幕闪烁并消失不是很方便,因为你怎么知道程序是否运行?假设您可以从它生成的输出中看出这一点。

您当然可以启动一个命令行窗口并从那里运行应用程序,但该程序将独立于 IDE 执行,并且您将失去实时调试功能。

因此,IDE 制造商为控制台应用程序提出了一项功能:当您直接从 IDE 运行应用程序时,它们随后通常会等待按键。这使您有机会检查带有输出的窗口,以确认应用程序是否正常工作。


[1] Esoterica:除非您通过不继承控制台的应用程序。该应用程序启动的任何控制台应用程序都不会继承控制台,因为继承被 GUI 应用程序破坏了。例如,start.exe 就是这样做的。比较:

foo.exe (inherits the console)
start foo.exe (start.exe is a GUI app, so foo.exe is launched in a new console)

关于c - 为什么我的程序输出在 Windows 中闪烁并关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1048975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com