流程控制--for循环

时间:2021-11-27 21:07:25
#include "stdafx.h"

int main(int argc, char* argv[])
{
	int sum=0;
	for (int i=0;i<=100;i++)
	{
		sum=sum+i;
	}
	printf("sum=%d\n",sum);
	return 0;
}

  这是一个求1+2+3+...+100的和的过程。

int __cdecl main(int argc, const char **argv, const char **envp)
{
  signed int v3; // eax@1
  int v4; // ecx@1

  v4 = 0;
  v3 = 0;
  do
    v4 += v3++;
  while ( v3 <= 100 );
  printf("sum=%d\n", v4);
  return 0;
}

  我们看到,for循环被修改成了do-while循环,我们修改一下:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  signed int i; // eax@1
  int sum; // ecx@1

  sum = 0;
  i = 0;
  do
    sum += i++;
  while ( i <= 100 );
  printf("sum=%d\n", sum);
  return 0;
}

  这里在把

sum += i++;

 修改下:

sum+=i;
i++;

 即

sum=sum+i;
i++;

我把它放到编译器里面在运行一次。

#include "stdafx.h"

int main(int argc, char* argv[])
{
	signed int i;
	int sum; 
	
	sum = 0;
	i = 0;
	do
	{
		sum=sum+i;
		i++;
	}
	while ( i <= 100 );
	printf("sum=%d\n", sum);
	return 0;

 其实我们更应该看的是反汇编代码,而不是IDA“翻译”后的代码。