概述
!!!喜欢看视频的朋友请点这里!!!
一、变量声明在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循环里的变量,在外面声明与在里面声明,在汇编层面上有区别吗?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复