编译一闪而过 解决

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在语句最后结尾加上一条死循环就OK了!

在探究一下while(1)和for(;;)的代码优化问题,

hh.exe.embed.manifest.res 这个文件貌似机器码

看了一些观点对编译器有时还得有些考究 些比较智能的编译器while(1)也会优化而不用比较,那就跟for(;;)一样。  
  所以for(;;)的效率肯定是好的(while还有看编译器而言)

有的时候,也许我们会面对一些令自己无法解释的问题。在语言本身无法告诉我们原因的时候,从汇编的层面看问题,可能就会有“柳暗花明又一村”之效。

首先请大家看这么一个简单的小程序:

#include <stdio.h>

void main()
{
    int i, b[10];
    for ( i = 0; i <= 10; i++ )
    {
        b[i] = 0;
    }
}

请问这个程序是否有错?A.正常 B.越界 C.死循环

正确答案是C,相信选A或选B的朋友一定会很纳闷。事实上我也是如此,单单从程序的表面上看,按定义这应该是个越界,因为当循环进行到i == 10的时候,程序将试图将b[10]赋值为0,而C语言中,b[10]的声明就是指定b[0]~b[9]可用。

然而程序的结果你看到了,这是个死循环无疑。

也好,那么让汇编来告诉你——以及我——这一切的真相吧,在这之前请你把i和b[10]的定义改成:

int i = 0, b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

i所占据的正是b[10]的位置,而b[10] = 0;这一句会被这样运行:

*(&b[0] + 10) = 0;

所以这一句的结果,就是把0赋值给i。这样一来在第11次循环的时候,i将会被重新置为0,那么循环结束的条件也就永远不会满足了,循环也就是个死循环了。

事实上单单讨论C语言的内部实现并没有什么意义,而且这样书写的循环在程序设计中也绝对不能够出现。所以我所想要讨论的,就是如何让汇编帮助我们解决表面上无法看清楚的东西,仅此而已。

Fortran程序VS中编译一闪而过问题解决 立即下载

相关推荐

debug : Embed Manifest 选项引起的BUG

一个WTL工程,用到了WTL内建的CToolTipCtrl,用来弹出提示框. e.g. 当鼠标移动到GridCtrl时, 弹出该Row对应的提示信息. 开发环境在Win8.1En下,装的那个VS2010没装SP1, 结果导致经常性的编译不过. 看了错误提示.Manifest 有关. 因为时间紧, 来不及装SP1, 当时也没有Vs2010SP1... 于是将 Embed Man

博客标题不能为空 3903

使用visual studio编译调试代码时,运行窗口一闪而过

对于头一次使用visual studio或者是刚接触编程使用visual studio软件时,可能会遇到这么个情况:代码好不容易写好后准备进行调试,按下调试发现有个什么东西在屏幕上一闪而过,然后下面的输出框显示生成成功,但自己却什么也没有看到,遇到这种情况该怎么办?2.然后点击进入属性找到链接器点开,下面有个系统,打开系统,有个子系统,子系统右侧框框内可以选择,子系统选择“控制台”,然后点击“应用”,再点击“确定”退出控制台设置。1.找到刚刚创建的新建项目然后在项目名字上右击找到“属性”并选择。

lg120的博客 8905

_manifest.rc(1): error RC2135: file not found: .embed.manifest

解决: VS工程属性 porperty->configuration properties->manifest tool->embed manifest   改 Yes To NO

cffishappy的专栏 2347

C++程序编译运行后窗口一闪而过问题

 问题:          学习C++写win32 console application 程序的时候使用不同的编译器结果显示的那个窗口可能闪一下就消失了。 解决办法:        有的编译器很好,在示例程序中给出了类似的解决办法,如在devC++下,新建一个非空的C++类的时候,在return 0;之前会有这么一句:system("PAUSE");在visual studio中如果你按照步骤来...

YoungFor_You的博客 5244

x86下汇编输出闪烁问题解决

之前关于dos下汇编输出闪烁问题已经得到了很好的解决,主要是由于中间输出了空格,导致屏幕输出的内容一闪而过 具体内容可以参考此博客汇编语言课程设计1 实验详解 下面来介绍x86下汇编程序出现的一个bug 题目如下: 编写程序画一个8*8的棋盘,盘面为相互交替的灰色和白色方块。编程时可以使用Irvine32链接库的SetTextColor和Gotoxy过程,不要使用全局变量,使用每个过程中声明的参数...

小姑仔的博客 1135

解决VS2015编译时输出窗口一闪而过问题

解决VS2015输出窗口一闪而过问题,又能愉快的码代码了!

记得诚 1万+

Dev-C++ 编译程序一闪而过解决方法

Dev-C++ 编译程序一闪而过,看不到运行结果的解决方法在程序最后加上:system ("pause"); 即可.  

风萧萧兮路漫漫,青春一去不复还... 3027

解决C语言编译时,输出台一闪而过的问题

解决C语言编译时输出一闪而过的问题  可以在代码末尾添加system(“pause”)或者getchar()语句。  其实问题是你执行时按的是F5,而正确的应该是Ctrl+F5,这样窗口就会显示 Press any key to continue...这句话了。也可以看到程序运行的结果了。  因为,F5是Debugging模式,在这个模式下,当程序运行结束后,窗口不会继续保持打开状态

2969

VS2017编译后程序一闪而过解决办法

这篇可解决问题 个人觉得方法一最方便

weixin_42559298的博客 2560

新装VS2017编译时出现PDB问题或者到cmd一闪而过的现象解决办法

参考此文操作:https://blog.csdn.net/sunnyliqian/article/details/50273987 之后不要慌张,容软件加载一会,加载完后可取消刚刚的勾选 注:有可能初次编译时,遇到cmd一闪而过的现象 解决办法:按ctrl+F5键进行调试或者在程序的末端加上system("pause");语句...

专心扫地 1238

解决Visual C++2008编译窗口一闪而过情况

首先来看一个简单的程序(编译环境为 DEV C++。):  #include   int main()  {      std::cout      return 0;  }  以上程序在DEV C++软件下编译,会出现窗口一闪而过的问题~~当然,在VC 6.0也会出现,不过VC 6.0 只要 再 按 ctrl+F5 就可以解决~~至于出现这问题,我想应该是我的机子系统问题吧~我

868

完美解决 VsCode 一闪而过 闪屏 非语法 黑窗口 黑框 小黑窗 一闪而过 插件 F8运行编译

环境 windown 64系统 C/C++环境 其他系统不知道 但也可以试试 这个解决方法主要是 插件安装 + 设置 非常简单 在vscode调试c++配置完成的前提下 一、运行c++的两种方法 (一)Code Runner 安装 然后设置 按 ctrl + , 勾上 但是这个插件会有运行一闪而过的现象,可以安装下面这个插件 (二)Compile Run 快捷键 一般按F8 就可以了 非常方便好用 ...

Remember who you are! 2万+

在VisualStdioCode中编译运行C程序一闪而过解决方法

在VisualStdioCode中编译运行C程序一闪而过解决方法 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { float a,b; a=5; b=a*a; printf("b=%f\n",b); system("pause"); retu...

BY彡阿长 6566

对于C++窗口编译一闪而过解决方法 (DEV CPP下)

对于C++窗口编译一闪而过解决方法   首先来看一个简单的程序(编译环境为 DEV C++。):  #include   int main()  {      std::cout "我喜欢C++\n";      return 0;  }  以上程序在DEV C++软件下编译,会出现窗口一闪而过的问题~~当然,在VC 6.0也会出现,不过VC 6.0 只要 再 按 

蓝天下的阳光 1万+

【C基础】编译后在Windows运行解决一闪而过

方法一: 开头加: #include 结尾}前 加: system("pause"); 例如: #include #include       //具体含义不知,为了下方的system("pause");使用 int main() {       int i,sum;  sum=0;  i=1;       while(i    {        sum=sum

萌萌的It人 www.itmmd.com 1100

vs编译器终端窗口一闪而过解决方法

相信大家都遇到过这种小问题,以下是我个人习惯的解决方案: 依次点击:项目----属性----配置属性----链接器----系统----子系统----控制台----之后确定 当然不止这一种,其他方法是在程序内部加代码就可以。 1.在return之前加上字符接收函数getchar(); 2.在return之前加系统指令system("pause"); 3.在return之前加入死...

Dawn_xumujie的博客 3472

visual studio 2015编译程序,控制台一闪而过解决

点击项目——项目属性; C/C++——链接器——系统——子系统——平行右边过去下拉菜单——点击控制台——确定;

zk370405的博客 1462

vs2010调试过程调试窗口一闪而过

解决方法如下: 若此时进行的操作是编译(F5),可先运行程序(Ctrl+F5),若仍然一闪而过,用下面方法解决。 方法一: 1.若是C++文件,在程序最后写一句(return之前)添加:system("pause"); 2.若是C文件,首先在程序头添加头文件:#include"stdlib.h";然后在程序最后写一句(return之前)添加:system("pause")。 方法二:

u011630325的博客 1064
上一篇: ADS1.2注意
下一篇: VS2005 中分析执行效率
henoch
博客等级 码龄19年 5粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值