C语言基本功教程系列(1)
来源:互联网 发布:简单的菜 知乎 编辑:程序博客网 时间:2024/04/30 06:26
看了那么多文章,感觉到大家学习游戏程序设计的热情.经常看到很多人提出关于openGL directX,和computer graphics的问题. 但是我个人人为, 游戏程序设计,最最最重要的还是C C++语言的基本功. 如何编写高效率,整洁,和尽可能少的Bug的代码,是成为一个游戏程序设计员的关键. 所以我开拉这个小系列,来帮C或C++语言基础不牢靠的人补补基础知识,希望能够对大家有所帮助.
至于内容嘛,我想起来什么就写什么,不一定有什么逻辑关系.毕竟我工作也很忙,只有在每个milestone完了以后才有时间干点别的. 所以这里先道歉啦.
今天就讲讲最基本的循环.
int i;
for(i = 0; i < 100; i++)
{
// do something
}
也许很多人觉得这个代码是最简洁的了.其实不然, 还有更快速的写法.
i = 100;
do
{
// do something
}while(--j);
以下是visual studio .net 2003编译过的汇编代码.
================while loop================
j = 10;
00411A32 mov dword ptr [j],0Ah
do
{
}while(--j);
00411A39 mov eax,dword ptr [j]
00411A3C sub eax,1
00411A3F mov dword ptr [j],eax
00411A42 jne main+29h (411A39h)
================for loop================
for(i = 0; i < 10; i++)
00413656 mov dword ptr ,0
0041365D jmp main+58h (413668h)
0041365F mov eax,dword ptr
00413662 add eax,1
00413665 mov dword ptr ,eax
00413668 cmp dword ptr ,0Ah
0041366C jge main+60h (413670h)
{
}
0041366E jmp main+4Fh (41365Fh)
仔细分析就会发现while循环比for循环在每次的循环中都少一条汇编语句. 主要是因为while循环是从大到小的顺序循环,不需要和10进行比较就可以跳转.而且可以直接利用--j语句设置的符号标志进行条件判断.
同样是循环10次,但是少一条语句还很多关键的时候很有用哦.
以上是第一章,如果有不同意见,错误或者遗漏,请谅解哦.
这个,上边是debug version的代码。偷懒被人看出来,下面给出release版本经过编译器优化的代码,优化参数 /02 /0t:
============for loop=============
:00401029 xor eax, eax
:0040102b jmp 00401030
......
:00401030 .......
:00401035 inc eax
:00401036 cmp eax, 000000064
:00401039 jl 00401030
===========while loop============
:00401029 mov eax, 000000064
:00401030 ..........
.....
:00401035 dec eax;
:00401036 jne 00401030
至于内容嘛,我想起来什么就写什么,不一定有什么逻辑关系.毕竟我工作也很忙,只有在每个milestone完了以后才有时间干点别的. 所以这里先道歉啦.
今天就讲讲最基本的循环.
int i;
for(i = 0; i < 100; i++)
{
// do something
}
也许很多人觉得这个代码是最简洁的了.其实不然, 还有更快速的写法.
i = 100;
do
{
// do something
}while(--j);
以下是visual studio .net 2003编译过的汇编代码.
================while loop================
j = 10;
00411A32 mov dword ptr [j],0Ah
do
{
}while(--j);
00411A39 mov eax,dword ptr [j]
00411A3C sub eax,1
00411A3F mov dword ptr [j],eax
00411A42 jne main+29h (411A39h)
================for loop================
for(i = 0; i < 10; i++)
00413656 mov dword ptr ,0
0041365D jmp main+58h (413668h)
0041365F mov eax,dword ptr
00413662 add eax,1
00413665 mov dword ptr ,eax
00413668 cmp dword ptr ,0Ah
0041366C jge main+60h (413670h)
{
}
0041366E jmp main+4Fh (41365Fh)
仔细分析就会发现while循环比for循环在每次的循环中都少一条汇编语句. 主要是因为while循环是从大到小的顺序循环,不需要和10进行比较就可以跳转.而且可以直接利用--j语句设置的符号标志进行条件判断.
同样是循环10次,但是少一条语句还很多关键的时候很有用哦.
以上是第一章,如果有不同意见,错误或者遗漏,请谅解哦.
这个,上边是debug version的代码。偷懒被人看出来,下面给出release版本经过编译器优化的代码,优化参数 /02 /0t:
============for loop=============
:00401029 xor eax, eax
:0040102b jmp 00401030
......
:00401030 .......
:00401035 inc eax
:00401036 cmp eax, 000000064
:00401039 jl 00401030
===========while loop============
:00401029 mov eax, 000000064
:00401030 ..........
.....
:00401035 dec eax;
:00401036 jne 00401030
- C语言基本功教程系列(1)
- C语言基本功教程系列(1)
- C语言基本功教程系列 循环
- C语言基本功教程系列 if 语句
- C语言基本功教程系列锦集
- C语言基本功教程系列(2) - if 语句
- C语言基本功教程系列 快速的函数调用
- C语言基本功教程系列 高效无错的内存访问
- C语言基本功教程系列 文件, Socket 和 其它
- C语言基本功教程系列(2) - if 语句
- C语言基本功教程系列(3) - 快速的函数调用
- 《软件测试基本功》系列教程
- 《软件测试基本功》系列教程
- C语言系列教程完整版
- C/C++基本功1
- C语言系列--指针1
- 【c语言问题系列教程之一】变量声明和初始化
- 【c语言问题系列教程之三】表达式
- 用VS.NET2003制作WEB应用程序的安装包[转]
- .NET中各种数据库连接大全
- 手机维修管理也搞ASP模式?
- 谈DotNet解决方案下分层和子项目的划分
- 检查系统中的僵尸进程
- C语言基本功教程系列(1)
- Java克隆方法的研究(clone)
- 做个好人
- 判断是否为数值型
- VC++程序员应当如何阅读ADO文档
- 学习JAVA目标
- 首页被绑定为"www.my123.com"的手工解除方法
- 如何通过不同的域名访问发布到Apache上不同的Appeon Web应用?
- C语言基本功教程系列(2) - if 语句