Apr 7, 2010
如果您是第一次读我的文章,你可能想订阅到我的 RSS feed. 多谢您的光顾!宏中”#”和”##”的用法
一、一般用法
我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.
用法:
#i nclude
#i nclude
using namespace std;
#define STR(s) #s
#define CONS(a,b) int(a##e##b)
int main()
{
printf(STR(vck)); // 输出字符串”vck”
printf(”%d\n”, CONS(2,3)); // 2e3 输出:2000
return 0;
}
二、当宏参数是另一个宏的时候
需要注意的是凡宏定义里有用’#’或’##’的地方宏参数是不会再展开.
1, 非’#’和’##’的情况
#define TOW [...]
Apr 7, 2010
*41.1* 简介 *vim-script-intro* *script*你最初接触到 Vim 脚本是在 vimrc 文件里。当 Vim 启动时它将读取该文件的内容并执行其中的命令。你可以在其中设置选项。你也可以在其中使用任何冒号命令 (以 “:” 开头的命令;这些命令有时也被称作 Ex 命令或命令行命令)。 语法文件其实也是 Vim 脚本。专为某种文件类型设定选项的文件也是。一个很复杂的宏可以被单独的定义在一个 Vim 脚本文件中。你可以自己想到其它的应用。让我们从一个简单的例子开始: :let i = 1 :while i < 5 : echo “count is” i : let i += 1 :endwhile 备注: 那些 “:” 字符并非必须。只有在你键入命令时才需要,在编写 Vim 脚本时可以 去掉。在这里用一是为了清楚,二是为了区别于普通模式命令。 备注: 你可以拷贝这里的示例文本,然后用 :@” 执行。本例的输出是: count is 1 count is [...]
Mar 26, 2010
1、取100之内的20个不重复的随机数
2、不用字符串截取方式,将“She is a student”变为“student a is She”
3、13个同学按编号排,从一数到三,报三的同学出列,直到剩下一个同学为止,求最后一个出列的同学是第几好
If you enjoyed this post, make sure you subscribe to my RSS feed!
Mar 26, 2010
【Csdn 10月24日 现场报道】10月24日,有Csdn和《程序员》联合主办的代表业界最高水平的技术盛会SD2.0大会进行到了最后一天,在上午,互联网架构师康晓宁向关注架构设计的与会技术人员分享了他多年来的实践心得。
康晓宁的讲演主题很有趣,叫做网站那些事儿,他希望以一种轻松的方式同大家一起交流在架构设计的实践经验。他认为网站只不过是一种特殊的软件,即互联网时代的软件。由于面对的最终用户和市场不同,它的开发呈现出快,猛,糙的特点。对互联网架构师提出更高的需求。
这种高,并不代表需要多么高新的技术,而是架构师针对需求,制定出来合理的架构的能力要求更高。
互联网架构是个年轻的技术领域,互联网架构师面临诸多烦恼。例如,多个层面上的设计,知识面不足;架构设计开发经常要同紧张的时间赛跑;新技术方案和优化手段众多,难以抉择。
随后就是本场课程最有价值的内容康晓宁总结自多年架构实践的互联网架构设计/优化原则。这些原则受到与会学员的极大欢迎。
讲师介绍:康晓宁,Googel软件工程师,清华大学计算机系硕士,曾任清华大学BBS 水木清华站技术站务,供职于数家国内大型网站,从事一线开发和运维工作。
If you enjoyed this post, make sure you subscribe to my RSS feed!
Mar 25, 2010
版权声明
本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。
一、使用VC++的工具DUMPBIN将DLL中的导出函数表导出到一定义(.DEF)文件
EXAMPLE:
DUMPBIN VideoDeCoder.dll /EXPROTS /OUT:VideoDeCoder.def
二、将导出的.DEF文件整理为一符合.DEF个数的函数导出文件
EXAMPLE:VideoDeCoder.DEF 文件内容如下Dump of file VideoDeCoder.dll
File Type: DLL [...]
Mar 25, 2010
对于驱动开发来说,设备模型的理解是根本,毫不夸张得说,理解了设备模型,再去看那些五花八门的驱动程序,你会发现自己站在了另一个高度,从而有了一种俯视的感觉,就像凤姐俯视知音和故事会,韩峰同志俯视女下属。
顾名而思义就知道设备模型是关于设备的模型,既不是任小强们的房模,也不是张导的炮模。对咱们写驱动的和不写驱动的人来说,设备的概念就是总线和与其相连的各种设备了。电脑城的IT工作者都会知道设备是通过总线连到计算机上的,而且还需要对应的驱动才能用,可是总线是如何发现设备的,设备又是如何和驱动对应起来的,它们经过怎样的艰辛才找到命里注定的那个他,它们的关系如何,白头偕老型的还是朝三暮四型的,这些问题就不是他们关心的了,而是咱们需要关心的。在房市股市千锤百炼的咱们还能够惊喜的发现,这些疑问的中心思想中心词汇就是总线、设备和驱动,没错,它们就是咱们这里要聊的Linux设备模型的名角。
总线、设备、驱动,也就是bus、device、driver,既然是名角,在内核里都会有它们自己专属的结构,在include/linux/device.h里定义。
52 struct bus_type {
53 const char * name;
54 struct module * owner;
55
56 struct kset [...]
Mar 25, 2010
不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多。除了格式化输出之外,我实在没看到多少应用。主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替换它。尽管如此,既然大家对它比较感兴趣,我就简单总结一下它的使用和需要注意的常见问题。
原理
刚学C语言的时候,一般人都会首先接触printf函数。通过这个函数,你可以打印不定个数的变量到屏幕,如:
printf(”%d”, 3);
printf(”%d,%d”,3,4);
上述代码看似简单,实际上却需要我们解决许多问题。在我们设计printf的时候,我们是不知道到底会传入几个参数的。在这种未知的情况下,我们需要解决下面几个问题:
怎么告诉printf我们会传入几个参数
printf怎么去访问这些参数
函数调用完成后,系统怎么把参数从传递用的堆栈中释放
为了解决这些问题,我们首先要解释cdecl调用约定(参见论调用约定),所有使用不定参数的函数必须是使用cdecl(全局函数)或者this call(类成员函数)调用约定。该约定对于参数传递规定如下:
参数从右向左入栈(也就是如果你调用f(a,b,c),则c先入栈,然后是b,最后是a入栈)
调用者负责清理堆栈
其中第二点直接解决了前面三个问题中的第三个问题。我们来详细说说其他两个问题。
确定参数的个数
在一个函数中,一般有如下prolog代码:
00401020 push ebp
00401021 mov ebp,esp
00401023 sub esp,48h
执行上述代码之后,func(a,b,c)函数所处的堆栈上下文就变成如下布局:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/arong1234/archive/2008/05/18/2456455.aspx
其中,ebp指向保存旧的ebp的堆栈内存的下一个字的地址,ebp+8指向eip地址,ebp+12则指向函数调用的第一个参数,而ebp和esp之间是用于临时变量(也就是堆栈变量)的空间。
注意,由于上述prolog代码的存在,我们很容易通过ebp得到第一个参数的地址,对于不定参数列表之前的类型固定的参数,我们也可以根据类型信息得到其实际的位置(例如,第一个参数的位置偏移第一个参数的大小,就是第二个参数的地址)。
注意不定参数函数有个限制,就是不定参数的列表必须在整个函数的参数列表的最后。我们不可以定义如下的函数:
void func(int a, …, int c)
所有类型固定的参数都必须出现在参数列表的开始。这样根据前面的论述,我们就可以得到所有类型固定的参数。
在设计具有不定参数列表的函数的时候,我们有两种方法来确定到底多少参数会被传递进来。
方法1是在类型固定的参数中指明后面有多少个参数以及他们的类型。printf就是采用的这种方法,它的format参数指明后面每个参数的类型。
方法2是指定一个结束参数。这种情况一般是不定参数拥有同样的类型,我们可以指定一个特定的值来表示参数列表结束。下面这个sum函数就是一个例子:
int sumi(int c, …)
…{
va_list ap;
[...]
Mar 25, 2010
本方法适用于Android SDK 2.1环境下的程序开发
2010-03-24
安装JDK
• 在java.sun.com下载JDK并安装
• 在“系统属性”的“高级”选项卡中点击“环境变量”,然后添加如下系统环境变量:
1. 在PATH环境变量后追加 JDK安装路径中的bin路径,本机为
C:\Program Files\Java\jdk1.6.0_18\bin
2. 新建CLASSPATH环境变量或在CLASSPATH环境变量后追加JDK安装路径中的lib路径和demo路径,本机为
C:\Program Files\Java\jdk1.6.0_18\demo;C:\Program Files\Java\jdk1.6.0_18\lib
安装Eclipse
• 在eclipse.org下载Eclipse IDE for Java Developers的Windows 32bit版本
• 下载完成后解压即可使用
安装Android SDK OR 离线安装
• 在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径
• 运行SDK Setup.exe,点击Available Packages,如果没有出现可安装的包请点击Settings,选中Misc中的”Force https://…”这项,再点击Available Packages
• [...]
Mar 25, 2010
在Oracle收购Sun Microsystems之后,Java之父James Gosling首度在公开场合露面,他一如既往保持着对Java的高度关注,并表示Java在Oracle的掌管下令人放心,随后他还透露了Java的发展方向。
Gosling是在TheServerSide Java Symposium上发表这份公开说明的,当时他的报告主题是Java Today and Tomorrow。他表示目睹了Oracle掌舵Java的方向之后,他深受鼓舞,Java的未来不需要担忧,关于Java的运营以及其技术的发展仍在向着有利的方向继续。
Gosling还公布了一份最新的Java报告,比如JRE (Java Runtime Environment)的每周下载量为1500万;共有100亿个Java-enabled的应用;10亿个Java-enabled的桌面;一亿个Java-enabled的TV设备;26亿个Java-enabled的移动设备;55亿个Java智能卡以及超过650万名Java开发者。
尽管目前大家看到的大多是Oracle在企业端Java的努力,但Gosling表示,Oracle同样也在致力于Java在桌面端、嵌入式、移动领域、高性能计算机及其他系统方面的发展。他说,所有这一切的原则是网络,网络将这些应用和功能链接。
谈到企业端Java,Gosling表示Java EE 6 (Java Platform, Enterprise Edition 6)将是下一代企业软件的基础, Java社区及许多开发者在2009年11月促使了Java EE 6 specification的认可,并发布和升级了一些Java API,Gosling对此表示感谢。
Gosling表示,Java EE 6以模块化为中心,引入了profiles的概念,但是有两个profiles,一个是full profile,另一个是Web profile。Web profile是第一个被定义的Java EE profile,对于现代Web应用开发它是一个功能全面的中型堆栈。
Gosling还提到了Java EE 6 specification中新增的依赖注入(dependency injection)特性。依赖注入可以允许你在代码中注入依赖,你将可以使用JDK 5 [Java Development Kit 5]中的注释特性来析出模板代码[boilerplate],从而EJB [Enterprise JavaBeans]的麻烦一扫而光。有趣的是,就在几年前这些问题还是Java社区内争论的焦点呢。
同时,Gosling宣布了GlassFish应用服务器的升级新版本为Version 3,它也是Java EE 6的参考实现(reference implementation)。GlassFish是全球最流行的下载型应用服务器,每个月的下载量为100万。
另外,Gosling表示Oracle也在积极推进NetBeans IDE,使它积极运用到企业端、移动领域和桌面端开发。
Java很棒的一点是他是一个two-level specification,既是Java语言,同时它的魔力在于VM [virtual machine]以及它可以支持包括Scala, Ruby, Groovy, Python, PHP, JavaScript, JavaFX在内的上百种其他语言。
展望Java语言接下来的五到十年,Gosling表示开发者应当寻求稳定的、逐渐增强的语言,因为这样的语言能够促进开发者的进步。
Sun曾在2009年的时候高调宣布了Java [...]
Mar 25, 2010
作者:张亚勤
[编者按]张亚勤以高层管理者的视角,用五个方程式构建了一个适合高科技人才学习、工作和成长的系统。对于普通开发者来说,这些公式同样适用,因为每个人自成一个系统,所以五个公式又可以变形为个人意义的:创新思维、善于规划、积极尝试、交流协作、开阔视野等。本文转载自《变革中的思索》(作者:张亚勤,2009年12月出版),感谢北京博文视点资讯有限公司的支持。
三年前, 在我担任微软亚洲研究院院长期间, 我曾总结出五条定律来描述IT企业管理和文化的理想状态。今天,当我带着新的思考与使命来看时,发现这些定律仍在代表着微软中国研发集团管理与文化的精髓,只是有了更新的内涵。
1. IT=IQ(Talents)+IP(Intellectual Properties)
吸引和培养第一流的人才,给他们架设一个足以充分发挥其才能的空间,并保护其智慧成果。
这条定律在之前的文章中我已谈过。大体上,IT=IQ+IP,这条定律展示了微软中国研发集团在两个层面的努力。一是为员工构建一个充满引力的创新磁场,让他们同才华横溢的同事们一道,在一个充满机遇与激励的环境下分享彼此的灵感和激情。奋发、进取、和谐、舒适的空间,将淋漓尽致地释放出每个人的潜能,使他们感觉到“英雄自有用武之地”。二是创造机会,让他们有机会参与到核心技术和产品的研发中,激扬其智慧。未来,微软中国研发集团将不断输入资金、领袖及人才,输出一项项对微软公司、对中国用户、对全球IT产业影响巨大的创新成果。
2. E=MC2
吸纳一大批有卓越潜质的人才(M),同时缔造一个过程(C2)——一个完全释放人才潜质的过程。在此过程中,先进的管理方式、富于感染力的企业文化将在个人、群体之间产生一系列正面的连锁反应,从而最大程度地激发出微软中国研发集团的动能(E)。
磁场理论可以解释为何天才的周围很少有庸人——优秀的人物总是像强磁场一样时刻吸引着与他们志同道合的英才。经过多年的积累,当前研发集团形成了金字塔型的人才结构。位于金字塔顶端的员工约占20%,他们大多在微软总部或其他跨国公司的研发机构从事过多年的技术和产品创新,能力超凡,经验丰厚,甚至因成就卓越而享誉国际,形成了人才的品牌效应。这不仅是简单的“志向”上的吸引,更是职业生涯的加速器。在其引导下,新员工将很快成长为谙熟大型软件研发流程的“高手”。
对一个快速成长的研发组织,人才间的“惺惺相惜”固然是吸引和培养人才的渠道,但系统的“360度培养战略”更加重要。在这方面,微软中国研发集团投入了巨大的资源与精力,希望让每个员工在这里都能最大限度地发挥自己的潜能。目前集团内部正在进行的培训项目有100多项,涵盖研究与开发的各个领域,其中我们特地从总部引进了“卓越软件工程”部门(Engineering Excellence Group),通过丰富的培训项目提高我们工程师的实践技能,提升我们工程进展的效率和产品开发的质量。我们正在为每一个职位建立职业发展模型(Career Stage Profile),帮助我们的每一个员工在不同的阶段制定和实施职业发展规划。而名为“Maco Polo”的轮岗计划,则是邀请雷德蒙德总部的资深技术专家来中国工作一段时间,“传道、授业、解惑”。此外,我们还有面向每个员工的“Mentorship”制度,通过经验丰富的员工来担任“导师”,为我们培养了一批又一批的后起之秀,这对我们未来的成功至关重要。
此外,还要为人才提供潜能爆发的环境、过程及必要的“刺激”。微软中国研发集团内开放、自由、平等的氛围,是一个能让研发人员安心去做“可以记一辈子的大事”的地方。同时,在集团各机构工作也需时刻面对压力和挑战,因为团队之间已形成了你追我赶、不甘人后的进取氛围。
3. ΔV • ΔP≥α
鼓励创新,允许失败。创新而不因循。
“粒子的动量与位置这两个变量的乘积大于某个常数”——海森堡测不准原理是量子力学中最重要的理论之一。微软中国研发集团将“测不准理论”引入到管理和文化中。ΔV和ΔP两个变量分别代表研发集团项目目标的准确度和风险度,所得出的乘积便是机构或团队发展的速度。
在确定发展目标和评估研究课题时,微软中国研发集团旗下不同职能的机构就会根据其自身的业务特点而在发展速度与风险度之间权衡一个最佳点。比如在研究院,我们强调“鼓励创新、允许失败”。选择课题时,我们鼓励员工去开掘那种难度极大、风险莫测,但可能给公司、给用户带来巨大利益的项目,因为投入大、风险大,成功后的影响也大。而对于产品开发部门,则更倾向于风险相对较小的项目。当然,无论是企业确定发展方向,还是研究机构评估技术课题,都应该把握一些基本原则,即确保项目是有用的、一流的、主流的、相关的。
微软中国研发集团希望旗下各机构能够在一种“创新而不因循”的机制之下不断健康发展,创造全新的技术和产品成果,最终孵化出深刻影响公司未来及全球用户体验的产品,向全世界展现中国的创新智慧。
4. 1+1≥3
有关企业的内部交流及合作,我认为,只有在1+1≥3(或者说“多赢”)的前提下,才是有价值和有必要的。
微软中国研发集团是由本土高校培养的中国精英、海外归国华人学者及外籍技术专家构成的“多国军团”,而在创新实践时,研发集团员工又与微软雷德蒙德总部产品部的同事以及分布于其他国家的微软员工沟通协作,造就了研发集团独有的内部合作环境。我们强调“融中外、弃劣扬优”,让不同文化背景下成长起来的微软中国研发集团员工都能够互信无疑、合作无间。
另一方面,微软中国研发集团的诞生,标志着微软在华研发资源的完全整合。随着一个由基础研究、技术和产品孵化、产品开发和战略合作所组成的、前所未有的完整研发创新产业链的形成,今后,集团旗下各职能机构之间的合作必然会越来越多样、越来越广泛、越来越深入。在这种趋势下,“1+1≥3”理所当然地成为了合作的一大必要前提。我们希望微软中国研发集团旗下各机构在将创新灵感转化为技术成果、将技术成果转化为实际产品的整个流程中能够坚持“多赢”(对合作各方、对用户、对产业)的理念,从而使每一次合作都可释放出最大化的能量、创造出多元化的价值。
5. △S>0(封闭系统,自发过程)
我们希望构建一个开放的、共赢的IT产业生态圈(Ecosystem),和全球范围内(特别是中国)的学术界、企业界合作伙伴协力创新,共同分享资源、经验与成果。
1850年,德国物理学家鲁道夫•克劳修斯(Rudolf Clausius)提出“热力学第二定律”的定性表述;15年后,他又首次引入了“熵”的概念。作为19世纪最伟大的科学发现之一,热力学第二定律说明:随着时间无限推移,封闭系统中的状态逐渐倾向于无秩序,熵趋于无限大,有规律而可用的能量趋于无限小,最终归于熵寂死的混沌。
IT企业也是这样。在全球技术共享化的今天,任何可能导致闭塞和封锁的举动都会让企业或机构无法辨识未来的机遇或危机,延缓前进的步伐。“零和”的自私心态只能让一个企业走向没落。因此,微软中国研发集团致力于构建一个开放的IT产业生态圈,令我们的研发人员总能在第一时间了解到其所在领域内的最新创新成果,开拓眼界、增强学术素养,以加速他们的成长。另一方面,微软中国研发集团旗下各机构还将积极与中国、亚太乃至国际范围内的IT产业同仁协力创新,共同分享资源、经验与成果。例如,向有需要的国内外企业提供技术授权;帮助合作伙伴寻找商业机遇,向他们移植微软的创新流程,培训富于研发经验、谙熟流程管理的员工等。
合作共赢是微软中国研发集团的重要发展战略。我们成立了战略合作部,通过技术授权、软件外包、人才培养等方式,把与中国信息产业的合作进一步向纵深推广。此外,在业务重点上,除移动与嵌入式技术、数字娱乐、互联网服务及服务器与工具四大领域之外,我们更把面向中国这一新兴市场的产品开发作为发展方向,希望能够通过与中国信息产业的紧密合作,真正的“在中国创造,为中国创造”。
IT产业的技术更新速度极其迅速,对于微软中国研发集团,秉持共赢思路、追求与所在区域产业的共同繁荣也就意味着更多的生机、更多的可能,无论对管理、经营还是文化来说都是一样的。
在微软中国研发集团独有的管理与文化氛围之中,我们正与每位员工一道,共同为早日实现成为“微软全球技术研究和产品开发的核心研发基地”的目标而携手努力。
作者简介:
张亚勤, 现任微软公司全球资深副总裁、微软( 中国) 研发集团主席、微软( 中国) 有限公司董事长, 负责微软公司在亚太地区的研发、技术战略和业务。
(本文来自《程序员》杂志2010年1月刊)
If you enjoyed this post, make sure you subscribe to my RSS feed!