主题:for,do while,while的使用
C代码:
void test_for_and_while()
{
int i, j = 0;
for (i = 0; i<100; i++)
{
d_printf("");
}
for (i = 100; i>=0; i--)
{
d_printf("");
}
i=100;
do
{
d_printf("");
}while (--i);
i = 0;
do
{
d_printf("");
}while (++i);
i = 100;
while (i--)
{
d_printf("");
}
i = 0;
while (i++)
{
d_printf("");
}
}
汇编代码:
Debug Version 循环100次
for6
0044CA3E mov dword ptr [i],0
0044CA45 jmp test_for_and_while+30h (44CA50h)
0044CA47 mov eax,dword ptr [i]
0044CA4A add eax,1
0044CA4D mov dword ptr [i],eax
0044CA50 cmp dword ptr [i],64h
do while
0044CA72 mov dword ptr [i],64h
0044CA79 mov eax,dword ptr [i]
0044CA7C sub eax,1
0044CA7F mov dword ptr [i],eax
0044CA82 jne test_for_and_while+59h (44CA79h)
while
0044CA96 mov dword ptr [i],64h
0044CA9D mov eax,dword ptr [i]
0044CAA0 mov dword ptr [ebp-0D0h],eax
0044CAA6 mov ecx,dword ptr [i]
0044CAA9 sub ecx,1
0044CAAC mov dword ptr [i],ecx
0044CAAF cmp dword ptr [ebp-0D0h],0
0044CAB6 je test_for_and_while+9Ah (44CABAh)
Release Version
for i++
004022C1 mov esi,64h
004022C6 push offset string "" (44725Fh)
004022CB call d_printf (403130h)
004022D0 add esp,4
004022D3 sub esi,1
004022D6 jne test_for_and_while+6 (4022C6h)
for i--
004022D8 mov esi,64h
004022DD lea ecx,[ecx]
004022E0 push offset string "" (44725Fh)
004022E5 call d_printf (403130h)
004022EA add esp,4
004022ED sub esi,1
004022F0 jns test_for_and_while+20h (4022E0h)
do while
004022F2 mov esi,64h
004022F7 jmp test_for_and_while+40h (402300h)
004022F9 lea esp,[esp]
00402300 push offset string "" (44725Fh)
00402305 call d_printf (403130h)
0040230A add esp,4
0040230D sub esi,1
00402310 jne test_for_and_while+40h (402300h)
我C代码里面++循环判断是错误的, --循环判断是正确的,可以看出do while,for,优胜于while,但是do while 和 for 不分上下的,而且在某些情况下要依赖于for中循环变量。
我的看法就是,大家不要太执着与这些细微的变化,除非你系统特殊需要,你可以通过改变代码来反汇编进行查看,到底选择哪种循环语句,不过是会很累的,呵呵。可能文章写的混乱,不过大家仔细研究的话肯定会得到独特的见解。
分享到:
相关推荐
### 林锐-高质量C/C++编程指南 #### 概述 《林锐-高质量C/C++编程指南》是一份由林锐博士编撰的专业文档,旨在为C/C++开发者提供一套规范化的编程指导原则。这份文档对于希望提升编程技能、编写出高质量代码的C++...
2. **代码片段**:扩展内含预定义的C/C++代码片段,如常用的循环、条件语句等,可以快速输入,减少手动键入时间。 3. **智能感知与自动完成**:基于 IntelliSense 技术,`cpptools`能提供代码补全功能,根据上下文...
在C语言部分,学习者将接触到基本的数据类型、变量、运算符、流程控制(如if语句、循环)、函数、数组和指针等内容。指针是C语言的一大特色,理解其工作原理对于优化内存管理和提高程序性能至关重要。同时,通过编写...
### 高质量C/C++编程指南 #### 一、引言 《高质量C/C++编程指南》由林锐博士编写,旨在为C/C++程序员提供一套实用且规范化的编程指导原则。无论是对于初学者还是资深开发者,这份指南都能提供宝贵的经验和技巧,...
在C语言中,我们通常使用结构化编程的概念,包括函数、循环、条件语句等。在这个计算器项目中,你将看到如何利用这些元素来处理用户输入的数学表达式。 2. C++增强: C++是C语言的扩展,引入了面向对象编程(OOP)...
《C/C++程序员面试宝典》是一本专为准备C/C++编程面试的求职者精心编写的指南。这本书以PDF格式提供,具有清晰的目录结构,使得读者可以快速定位到感兴趣或需要复习的知识点,有助于高效学习和查阅。在追求理想的...
- **库的使用**:当使用C语言编写的库时,`extern "C"`声明是必须的,它保证了正确的符号匹配,使得C++代码能够调用C库中的函数和使用其中的变量。 #### 3. C语言高效编程的几招 在嵌入式系统中,效率至关重要,...
C/C++作为编程语言中的老牌强手,广泛应用于系统编程、应用开发和嵌入式领域。这份“大量C/C++笔试题”集合涵盖了从基础知识到深入概念的各种问题,旨在帮助求职者在面试过程中表现出色。以下是一些重要的C/C++知识...
而逻辑行则是指在编译器眼中实际执行的语句数量,它会忽略掉嵌套的控制结构(如循环、条件语句)中的空白行和注释,只计算有效代码行。这两种统计方式各有其应用场景,物理行更直观地反映了代码的总量,而逻辑行更能...
例如,`if...else`语句用于条件判断,`for`和`while`循环用于重复执行代码,`switch`语句提供了多分支选择,`struct`定义自定义数据结构,`void`指针则赋予了强大的通用性。此外,指针是C语言的一大特色,它允许直接...
C语言作为基础的系统级编程语言,其核心概念包括变量、数据类型、控制结构(如if语句、循环)、函数、指针等。Turbo C/C++ 支持C99标准,提供了丰富的预处理器宏、内存管理函数(如malloc和free)以及标准库函数。...
合理使用IF语句、循环语句、FOR语句和SWITCH语句可以提高代码的执行效率。而对于GOTO语句,虽然在某些情况下可以使用,但应慎用以避免造成代码混乱。 常量的使用也是编程中需要注意的一个方面。使用常量可以提高...
对于初学者来说,需要掌握变量、数据类型、控制结构(如if语句、循环)、函数定义等基本概念。此外,指针和内存管理也是C/C++中的重要特性。 ### 三、象棋程序设计原理 1. **棋盘表示**:可以采用二维数组来模拟...
1. **基础编程概念**:这些题目可能涉及基础语法,如变量、数据类型、运算符、流程控制(如if语句、switch语句、循环)、函数定义与调用等。通过解决这些问题,学习者可以巩固对C/C++基本结构的理解。 2. **数组和...
- 循环语句的优化方法; - FOR循环控制变量的管理; - SWITCH语句的设计考虑; - GOTO语句的使用场景分析。 5. **常量** - 常量的重要性和使用场景; - CONST与#DEFINE的区别及优缺点; - 常量定义的规则; ...
在这个项目中,`学生成绩管理.cpp`文件包含的是主要的源代码,它将使用C/C++的基本语法,如变量声明、条件语句(if-else)、循环(for、while)、函数定义等,实现对学生成绩数据的处理。 接着,项目涉及到了文件...
1. **C/C++基础**:理解和掌握C/C++的基础语法,如变量声明、函数定义、控制流程(循环、条件语句)、内存管理(指针操作)等。 2. **数据结构**:项目可能涉及到数组、链表、栈、队列等基本数据结构,用于存储棋盘...
在C语言中,主要知识点包括基本数据类型(如int、char、float等)、控制结构(如if语句、for循环、while循环)、函数、指针、数组、结构体和联合体,以及预处理器宏等。这些构成了C语言的基础,让程序员能够直接操控...