我正在尝试为 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/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此