我是靠谱客的博主 风中音响,最近开发中收集的这篇文章主要介绍C语言:for循环里的变量,在外面声明与在里面声明,在汇编层面上有区别吗?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

!!!喜欢看视频的朋友请点这里!!!

一、变量声明在for循环外面

C代码如下:

#include <stdio.h>
int main() {
  int i, p;
  for (i = 0; i < 5; ++i) {
    p = i;
    printf("%d ", p);
  }
  return 0;
}

对应的汇编代码如下:

mov    DWORD PTR [rbp-0x4],0x0
jmp    0x401581 <main+49>
mov    eax,DWORD PTR [rbp-0x4]
mov    DWORD PTR [rbp-0x8],eax
mov    eax,DWORD PTR [rbp-0x8]
mov    edx,eax
lea    rcx,[rip+0x2a88]        # 0x404000
call   0x402aa0 <printf>
add    DWORD PTR [rbp-0x4],0x1
cmp    DWORD PTR [rbp-0x4],0x4
jle    0x401566 <main+22>
mov    eax,0x0
add    rsp,0x30
pop    rbp
ret    

二、变量声明在 for循环里面

C代码如下:

#include <stdio.h>
int main() {
  for (int i = 0; i < 5; ++i) {
    int p = i;
    printf("%d ", p);
  }
  return 0;
}

对应的汇编代码如下:

mov    DWORD PTR [rbp-0x4],0x0
jmp    0x401581 <main+49>
mov    eax,DWORD PTR [rbp-0x4]
mov    DWORD PTR [rbp-0x8],eax
mov    eax,DWORD PTR [rbp-0x8]
mov    edx,eax
lea    rcx,[rip+0x2a88]        # 0x404000
call   0x402aa0 <printf>
add    DWORD PTR [rbp-0x4],0x1
cmp    DWORD PTR [rbp-0x4],0x4
jle    0x401566 <main+22>
mov    eax,0x0
add    rsp,0x30
pop    rbp
ret    

三、结论

两段C代码对应的汇编代码一模一样,没有任何区别。
因此推荐把变量声明在离使用最近的地方。
在这里插入图片描述

四、补充

早期的C语言代码都是在C90标准下编写的,变量是不允许声明for循环里面的,而必须声明在外面。久而久之,大家形成习惯了。
从2015发布的gcc5.1开始,默认的C语言标准已经是C11了,因此以后可以放心大胆地使用C99的标准了,也就是把变量声明在for循环里面。


全文完

最后

以上就是风中音响为你收集整理的C语言:for循环里的变量,在外面声明与在里面声明,在汇编层面上有区别吗?的全部内容,希望文章能够帮你解决C语言:for循环里的变量,在外面声明与在里面声明,在汇编层面上有区别吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部