在c++中,extern关键字用来声明变量和函数,在声明函数的时候,有和没有extern的效果一样,即下面两条语句具有同样的效果:
下面是有extern的情形时的c++源码:
push ebp
mov ebp, esp;esp为指向栈顶的一个寄存器,始终指向栈顶 ebp也是一个寄存器,用来在给main函数分配的栈空间上寻访局部变量,因此常常作为基址
;上面两句的作用是将前一个栈的基址保存(压栈),然后让ebp指向当前函数的栈空间,再次作为基址
; 2 : extern int i;
; 3 : }
xor eax, eax
pop ebp
ret 0;这三句是用来退栈用,以及函数的返回
下面是没有extern的情形的c++源码:
push ebp
mov ebp, esp
push ecx;与有extern时的最大的不同就是这一句
;ecx也是一个寄存器,这里讲ecx的值压栈,等同于为变量i在栈上分配了存储空间
;由于ecx中的值不确定,因此,如果我们访问没有初始化的局部变量,常常得到一个奇怪的值
; 2 : int i;
; 3 : }
xor eax, eax
mov esp, ebp
pop ebp
ret 0
上面的汇编使用cl指令在命令行产生的,如果用vs2010来产生汇编码,汇编码可能不一样,但意思是一样的。
新闻热点
疑难解答
图片精选