-
-
[原创]浅谈VC++中C语言函数入栈出栈的实现
-
发表于:
2016-10-20 23:12
11684
-
近日聆听了在科锐钱老师上C语言时所讲的函数调用约定,于是将课后笔记整理成此处男贴.虽力求完美,但难免因本人的学识浅薄而存在不足之处,望大神们批评指正...
--题记
1 函数调用流程
函数调用大家都不陌生,调用者向被调者传递一些参数,然后执行被调者的函数体代码,最后被调者向调用者返回结果.还有一句话是大家比较熟悉的,就是函数调用是在栈上发生的,那么C语言中的函数调用是如何实现的呢,下面我们一起分析分析...
1.1 C语言中函数参数的入栈顺序
为了能有个感官的认识,我们先通过一个小程序看看.
/*
*Copyright (c)2015,
*All rights reserved.
*文件名称:PushOrder.c
*作 者:韩逸
*完成日期:20161020
*版 本 号:Debug
*编译环境:Visual Studio 2012
*问题描述:C语言函数参数入栈的顺序
*/
#include <stdio.h>
int Fun(int nNumA,int nNumB,int nNumC);
int main(int argc,char* argv[])
{
Fun(100,200,300);
return 0;
}
int Fun(int nNumA,int nNumB,int nNumC)
{
printf("nNumA = %d at [0x%p]\r\n",nNumA,&nNumA);
printf("nNumB = %d at [0x%p]\r\n",nNumB,&nNumB);
printf("nNumC = %d at [0x%p]\r\n",nNumC,&nNumC);
return 0;
}
nNumA = 100 at [0x010FFDF0]
nNumB = 200 at [0x010FFDF4]
nNumC = 300 at [0x010FFDF8]
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课