走出自己的Windows开发,融入程序猿的开发

自从2014.7.9加入**软研以来,一直都做windows UI方面的开发,主要语言为C++;时间很快就过去了,一直都没时间也许是没精力写一些记录,但越觉得写写文档的必要性了;那么果断的申请了博客,记录下以前的,今后的程序生涯的点点滴滴,一是鼓励自己不断沉淀技术,职业文化等等;再者以后也有一个可以属于自己的书房可以翻阅,回忆。时间已经很晚了,眼睛有些朦胧;

刚看了看《系统程序猿的成长计划》,里面讲道了可变参数的简单机制剖析;大致就是一个压栈的匹配;

printf想必大家都会熟悉的使用;她就是典型的可变参数列表。。。。

int __cdecl printf (const char *format, ...);

可变参数,大约是这么模板化的,

1)他必须是在至少一个给定的参数后面出现;即 不能达到这样的牛叉的 printf(...);

2)前列参数后,逗号隔开,续"..."三个点,达到C语言的语法要求

这样的函数,即可叫可变参数函数;

void fun()
{
  int i = 100, j = 200, k = 300, l = 400;
  printf("%d, %d, %d", i, j, k, l);
}

系统会在栈区依次为l, k, j, i开辟空间;变量的申明是右向左依次展开的;

在我的win8 64位系统开辟的内存,依次为

+ &i  0x0018fe4c  int *
+ &j  0x0018fe40  int *
+ &k 0x0018fe34  int *
+ &l  0x0018fe28  int *

他们是一个压栈的过程,栈的地址是向低地址延申的,但没搞明白为社么每次的间隔是12?!!也请朋友八卦一下;

l,k,j,i依次压栈;我觉得三个%d,或许也会压栈另一个栈;

栈 A                                  栈B

+ &i  0x0018fe4c  int *       %d
+ &j  0x0018fe40  int *      %d
+ &k 0x0018fe34  int *       %d
+ &l  0x0018fe28  int *

两个栈依次取值,去第一个%d,去&i;---》去第2个%d,去&j;---》去第3个%d,去&k;---》....所以k没办法打印了

打出结果确实是:

100, 200, 300

当然printf可能是这样的压栈对比出栈;自己写可变参数的函数时,可以借助参数的个数,即第一个参数把可变的参数个数穿进去;这样会以指针进行后续的查找;

其实很简单,比如add(int num, ...)

add(1, 100);

add(2, 20, 30);

add(4, 1, 2, 3, 5);

指针直接定位到第一个参数;即参数1的地址,加法运算;指针偏移下个参数的字节,再接着加。。。。直到最后一个参数加完。

这就证明了,很多东西是很有意思的,我们真的不能老四抱怨什么都不会,什么都不懂,没关系,一天记录一点儿,一天心情会变化一些。加油小权子!睡觉!!!那个地址偏移12,大家可以八卦一下!

时间: 2024-12-13 05:11:32

走出自己的Windows开发,融入程序猿的开发的相关文章

开发人员程序猿10大聚集地

1.csdn CSDN是中国软件开发联盟(Chinese software develop net)的缩写,是中国最大的开发人员技术社区.它是集新闻.论坛.群组.Blog.文档.下载.读书.Tag.网摘.搜索..NET.Java.游戏.视频.人才.外包.第二书店.<程序猿>等多种项目于一体的大型综合性IT门户站点,有非常强的专业性,其会员囊括了中国地区百分之九十以上的优秀程序猿,在IT技术交流及其周边国内中是第一位的站点. 2.DevStore DevStore全称Developer serv

最老程序猿创业开发实训1---Android应用架构之MVC

我们都知道Android中基本组件是Activity,每一个界面都是一个Activity,自从2.3版本号開始.又添加了Fragment组件,提供了适应于各种屏幕方法.可是因为Android系统仅仅是提供了各种可用的编程技术,并没有相应用架构进规定.实践中,非常多项目将全部功能都加入到了Activity中,使Activity变得十分臃肿.不便于进行后期改动和维护.假设我们要一个人来开发一个系统.那么必须採用高效的应用架构,方便调试及维护. 在开发应用中,採用MVC架构无疑是一种最安全的选择.将应

警惕!五件事让程序猿失去开发的激情

对于每个程序员来说,工作仅仅只是为了钱吗?如果只是为了钱,为何会有程序员依然选择辞职?实践证明,程序员之所以放弃一份薪资优越的软件开发工作最常见的原因是失去了激情. 针对收集汇总以下导致程序员工作激情降温的5件事,并不取决于他们的薪资情况,更多的原因是下面五个方面: 1. 管理不善 好的管理不仅对员工或是项目来说都是不可缺少的激励因素.一个优秀的管理者应该具备的素质包括快速决策.避免微观管理.保持独立思考.构建高质量 软件项目的意识以及给予团队一切所需帮助.如果拥有这样一个管理人才,那么开发人员

Console.Write(&quot;程序猿?开发?写代码?编程?移动、网页、桌面开发?Oh,我连菜鸟都不是!&quot;);

You make choices and don't look back. 虽然不是学计算机出身,但我对于写代码充满了好奇,尽管这种兴趣还不像烈酒那样浓烈,也不能像打鸡血似的刺激自己每个神经元而浑身激情,而熊猫眼的熬夜.但现在也一如既往的坚持,坚持,坚持!我想以后的一生都会因写程序而充满乐趣. 初中的电脑房一直被密不透光的窗帘拉着,电脑课一直被”特色教育“压抑着,所以对电脑的好奇心直到大学才被充分的满足.大学的计算机公共课让我对电脑有了初步的了解,而C语言程序设计(自己学校老师编写的入门课)真正

程序猿菜鸟必备——作为独立开发人员怎样系统的学习编程

接触一个行业,前期最好来一个系统的学习,有完整的框架一点一点的把基础吃透,不能左一耙子,右一锄头.以我的从业经验给大家分享怎样系统的学习编程开发,刚入坑的程序猿菜鸟注意了,迅速占据高地.迅速收藏了. 整体大致分为下面几类: A.教材上的知识 这部分内容来自计算机专业的课程教材.也有可能会涉及一部分来自其它相关专业或者相关课程的内容. B.编程语言 每个程序猿仅仅有在会使用一门语言的情况下才有可能从事开发工作,所以学习并掌握一门语言是最低要求了. C.SDK 光有一门语言是不够的,从事不论什么实际

Delphi开发安卓程序的感受

Delphi XE7开发安卓程序,界面开发速度非常快,这是eclipse无法比的,还有就是界面自适应能力很棒,我在不同版本和尺寸的设备中测试,运行良好,这些设备包括:三星I9100(安卓2.3:不到5寸屏):三星T311(安卓4:8寸屏):三星T705C(安卓4:8.4寸屏):华为X1(安卓4:7寸屏). Delphi开发的安卓程序,可以用很多Delphi的资源,我尝试用Indy TCP连接TCP服务器,已经成功,可以做EACH操作,类似资源应该有很多可以使用,这对Delphi程序员来说是非常棒

程序猿生存定律--程序人生的出口

程序猿的人生出口 非常多人非常想知道自己的未来是什么样子的,迫切到一定程度甚至会找算命先生. 假设并非想得到一个精确结果,这事儿事实上并没有想的那么难.程序猿的人生看起来五花八门.能够是Windows系,能够是Android系,能够是iPhone系等等.但假设为之做点抽象,那就会发现人生出口的类别事实上不多.接下来我们就结合样例来看看程序猿的人生中最可能的几个出口.这些出口里有大部分人的未来景象. 1 成就超一流高手 袁峰先生是<Windows图形编程>一书的作者,也是一位纯粹的程序猿. 从袁

怎样不做“孬种”程序猿

拥有丰富的开发经验,曾担任多年的技术总监,带领团队开发多个电子商务平台.教务管理系统等.热衷主流PHP技术.熟悉lamp站点解决方式.讲课风格:逻辑严谨,条理清晰,对技术要点把握准确,注重培养学员的逻辑思维能力. 数据显示:眼下全球5000万互联网站点中.有60%採用的是PHP技术.80%的国内互联网站点使用PHP开发. 可见,PHP已然成为全球超热的互联网技术之中的一个. 传智播客作为一家有着丰富教学经验的IT培训机构,在PHP的培训上推陈出新,提出了"不做孬种程序猿"的口号,PHP

中国特色程序猿的「钱途」

今天在微博看到一篇文章,程序猿转型书商 年交易额千万元.作为一个合格的中国特色的码农.忍不住想写点儿什么. 程序猿的「钱途」在那里? 从出版业说起 网络作品排到靠前的,都不会太难看,一般人不爱看某部作品也是由于不喜欢这个类型,而此人也不会全不喜欢这些网络作品.究其原因,是由于网络作品都是让人先白看的,看的好了才出了头.而纸质作品就不一定了,排行榜靠前的,有好作品,也有垃圾. 很多大牛都是写了博客,后来出了书.这些书也都不次,可能有人让为不好,是由于技术书不像小说.小说在读故事,技术书是在学知识或