首页
社区
课程
招聘
[原创]浅谈VC++中C语言函数入栈出栈的实现
发表于: 2016-10-20 23:12 11684

[原创]浅谈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直播授课

上传的附件:
收藏
免费 3
支持
分享
最新回复 (9)
雪    币: 21
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
善于总结总是好的!支持
2016-10-21 10:37
0
雪    币: 47
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
6666666666666666
2016-10-26 20:09
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
5
可以,很认真的帖子~~
2016-10-26 22:48
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
界面效果不错,比我的VS2008好多了
2016-10-27 00:03
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
正在学习
2016-10-27 08:26
0
雪    币: 112
活跃值: (57)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
8
顶琨哥的好文章
2016-10-27 20:09
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
方向不同。难得看到熟人
2016-10-29 00:14
0
雪    币: 200
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不错不错共同学习
2016-10-31 11:09
0
雪    币: 189
活跃值: (154)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
原来安全检查有这个用。受教了!谢谢!
2017-2-27 10:23
0
游客
登录 | 注册 方可回帖
返回
//