沁园春《房》
神州大地,
万人蜗居,亿人盼房。
望北京上海,高楼大厦。
售楼中心,房奴滔滔。
祖孙三代,倾尽所有,欲与房价试比高。
须钞票,
清储蓄贷款,分外心焦。
楼价如此虚高,
逼无数白领竞折腰。
昔秦皇汉武,闻所未闻;
唐宗宋祖,紧捏钱包。
一代天骄,成吉思汗,只好蜗居蒙古包。
俱往矣,
数天价楼盘,还看今朝!
If you enjoyed this post, make sure you subscribe to my RSS feed!
神州大地,
万人蜗居,亿人盼房。
望北京上海,高楼大厦。
售楼中心,房奴滔滔。
祖孙三代,倾尽所有,欲与房价试比高。
须钞票,
清储蓄贷款,分外心焦。
楼价如此虚高,
逼无数白领竞折腰。
昔秦皇汉武,闻所未闻;
唐宗宋祖,紧捏钱包。
一代天骄,成吉思汗,只好蜗居蒙古包。
俱往矣,
数天价楼盘,还看今朝!
If you enjoyed this post, make sure you subscribe to my 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 (2)
#define MUL(a,b) (a*b)
printf(”%d*%d=%d\n”, [...]
*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 [...]
媳妇说:“煮淡一点你就嫌没有味道,现在煮咸一点你却说咽不下。你究竟怎想怎么样?”
母亲一见儿子回来,二话不说便把饭菜往嘴里送。她怒瞪他一眼。
儿子试了一口,马上吐出来, 儿子说:“我不是说过了吗,妈有病不能吃太咸!”
“那好!妈是你的,以后由你来煮!”媳妇怒气冲冲地回房。
儿子无奈地轻叹一声,然后对母亲说:“妈,别吃了,我去煮个面给?”
“仔,你是不是有话想跟妈说,是就说好了,别憋在心里!”
“妈,公司下个月升我职,我会很忙,至于老婆,她说很想出来工作,所以……”
[...]
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!
【Csdn 10月24日 现场报道】10月24日,有Csdn和《程序员》联合主办的代表业界最高水平的技术盛会SD2.0大会进行到了最后一天,在上午,互联网架构师康晓宁向关注架构设计的与会技术人员分享了他多年来的实践心得。
康晓宁的讲演主题很有趣,叫做网站那些事儿,他希望以一种轻松的方式同大家一起交流在架构设计的实践经验。他认为网站只不过是一种特殊的软件,即互联网时代的软件。由于面对的最终用户和市场不同,它的开发呈现出快,猛,糙的特点。对互联网架构师提出更高的需求。
这种高,并不代表需要多么高新的技术,而是架构师针对需求,制定出来合理的架构的能力要求更高。
互联网架构是个年轻的技术领域,互联网架构师面临诸多烦恼。例如,多个层面上的设计,知识面不足;架构设计开发经常要同紧张的时间赛跑;新技术方案和优化手段众多,难以抉择。
随后就是本场课程最有价值的内容康晓宁总结自多年架构实践的互联网架构设计/优化原则。这些原则受到与会学员的极大欢迎。
讲师介绍:康晓宁,Googel软件工程师,清华大学计算机系硕士,曾任清华大学BBS 水木清华站技术站务,供职于数家国内大型网站,从事一线开发和运维工作。
If you enjoyed this post, make sure you subscribe to my RSS feed!
版权声明
本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“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 [...]
对于驱动开发来说,设备模型的理解是根本,毫不夸张得说,理解了设备模型,再去看那些五花八门的驱动程序,你会发现自己站在了另一个高度,从而有了一种俯视的感觉,就像凤姐俯视知音和故事会,韩峰同志俯视女下属。
顾名而思义就知道设备模型是关于设备的模型,既不是任小强们的房模,也不是张导的炮模。对咱们写驱动的和不写驱动的人来说,设备的概念就是总线和与其相连的各种设备了。电脑城的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 [...]
不定参数当年做为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;
[...]
本方法适用于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
• [...]
, 下一页