<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[kaffeel的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/kaffeel</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; kaffeel]]></copyright><item><title><![CDATA[基于S3C6410的U-boot启动代码分析（一）]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/6594587</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/6594587</guid><author>kaffeel</author><pubDate>Sat, 09 Jul 2011 13:08:07 +0800</pubDate><description><![CDATA[预备知识可执行文件由许多链接在一起的对象文件组成。对象文件有许多节，如文本、数据、init 数据、bss等。这些对象文件都是由一个称为 链接器脚本（*lds）的文件链接并装入的。这个链接器脚本的功能是将输入对象文件的各节映射到输出文件中；换句话说，它将所有输入对象文件都链接到单一]]></description><category></category></item><item><title><![CDATA[在Fedora 14 搭建Android 开发环境]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/6007698</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/6007698</guid><author>kaffeel</author><pubDate>Sat, 13 Nov 2010 23:39:00 +0800</pubDate><description><![CDATA[经过一天的折腾，终于在Fedora 14上配置好了Android开发环境，并在Android模拟器上成功运行第一个Hello Fedora 程序。由于Fedora 14 自带的Eclipse 版本为3.6.1，而此版本安装Android插件总是失败，于是自己下载Eclipse 3.5.1 并进行配置。下面记录以下具体实现步骤：1、 首要步聚下载 Android SDK for Linux       下载地址为: http://androidappdocs.appspot.com/sdk/index.htm]]></description><category></category></item><item><title><![CDATA[C/C++程序员需要注意的11个知识点（转）]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5961762</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5961762</guid><author>kaffeel</author><pubDate>Sat, 23 Oct 2010 23:33:00 +0800</pubDate><description><![CDATA[ 下面的这些要点是对所有的C++程序员都适用的。我之所以说它们是最重要的，是因为这些要点中提到的是你通常在C++书中或网站上无法找到的。如：指向成员的指针，这是许多资料中都不愿提到的地方，也是经常出错的地方，甚至是对一些高级的C++程序员也是如此。       这里的要点不仅仅是解释怎样写出更好的代码，更多的是展现出语言规则里面的东西。很显然，它们对C++程序员来说是永久的好资料。我相信这一篇文章会使你收获不小。        首先，我把一些由不同层次的C++程序员经常问的问题归到一起。我惊奇的发现有很多是]]></description><category></category></item><item><title><![CDATA[成为一名优秀程序员所需要知道的那些事(转载)]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5961761</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5961761</guid><author>kaffeel</author><pubDate>Sat, 23 Oct 2010 23:24:00 +0800</pubDate><description><![CDATA[导读：编程虽是复杂活，但成就优秀程序员的很多因素和我们在学校中最早学到的相差无几。    1. 懂得分享。尽可能使用开源，并且当你有能力的时候，要对其有所贡献。聚全社会之智慧，胜过某些“大”公司之短视。     2. 公平竞争。尝试其他技术、框架、方法和观点。不要总以为只有你的选择才是可行的。别的选择也有可能比你的要强得多。要以开放的心态，来检验其他人的选择。     3. 不要攻击他人。像第2条所说的，不要仅仅因为别人恰巧使用.Net、Java或PHP就去攻击他们(我在这方面有一次教训)。有时，它们或许要]]></description><category></category></item><item><title><![CDATA[C++的类]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5955604</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5955604</guid><author>kaffeel</author><pubDate>Wed, 20 Oct 2010 19:59:00 +0800</pubDate><description><![CDATA[C++程序中类概念的目标就是为程序员提供一种建立新类型的工具，使这些新类型的使用能够像内部类型一样方便。我们设计一个新的类型，是为了给某个内部类型中没有直接对应物的概念提供一个定义。而定义一个新类型的基本思想就是将实现中那些非必然的细节（如用于存储该类型的对象所采用的数据的布局），与那些对这个类型的正确使用至关重要的性质（如能够访问其中数据的完整的函数列表）区分开来。  1、类  一个类就是一个用户定义类型。在一个类中声明的函数叫做类的成员函数，这种函数只能通过适当类型的特定变量，采用标准的结构成员访问语法]]></description><category></category></item><item><title><![CDATA[指向函数的指针]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5953963</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5953963</guid><author>kaffeel</author><pubDate>Wed, 20 Oct 2010 05:34:00 +0800</pubDate><description><![CDATA[程序员对一个函数只能够做两件事：一是调用它，二是获取它的地址。通过获取一个函数的地址而得到的指针，可以在后面用于调用这个函数。  例如：  void error(string s) {/*  ......   */}  void (*efct)(string);   //指向函数的指针。  void  f()  {          efct = &error; //efct指向函数error          efct("error"); //通过函数指针调用error函数  }  在上面的例子中，编译器]]></description><category></category></item><item><title><![CDATA[C ++ 中的函数]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5953929</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5953929</guid><author>kaffeel</author><pubDate>Wed, 20 Oct 2010 05:13:00 +0800</pubDate><description><![CDATA[1、函数的声明       在C和C++的程序里，完成一项工作的一种典型的方式就是调用一个函数去做那件事。定义函数是程序员刻画怎样完成某个操作的一种方式。一个函数只有先声明后才能够调用。      在一个函数的生命中，需要给出函数的名字，这个函数返回值的类型，以及在调用这个函数的时候必须提供的参数的个数和参数类型。看如下声明：      void fun(x,y) ;//这种声明是毫无意义的，因为参数类型未知。  2、函数的定义      在程序中调用某个函数，首先必须在某个地方定义（仅仅定义一次）。一个函]]></description><category></category></item><item><title><![CDATA[指向void类型的指针]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5953374</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5953374</guid><author>kaffeel</author><pubDate>Wed, 20 Oct 2010 02:16:00 +0800</pubDate><description><![CDATA[指向void的指针是个非常有趣的东西，一个指向任何对象类型的指针都可以赋值给类型为void *的变量，void *可以赋值给另一个void *，两个void *可以比较是否相等（当两个指针比较时，是看它们是否指向同一块内存地址），而且可以显示的将void *转换到另一个类型。初次之外，其他任何对void *的操作都是不安全的，因为编译器不知道它实际指向哪个对象。请看下面的实例：  void f(int *pi)   {        void *pv =pi;              //可以，从int*]]></description><category></category></item><item><title><![CDATA[关于数组和数组初始化的问题]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5952779</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5952779</guid><author>kaffeel</author><pubDate>Tue, 19 Oct 2010 16:09:00 +0800</pubDate><description><![CDATA[数组的定义：  float  v[3];  //定义了一个数组v，它包含三个float型的元素；  char *v1[3];  //定义了一个数组v1，它包含3个char *型的元素。  数组元素的个数，即数组的届必须是一个常量表达式。如 int i； int a[i];//错误，数组大小必须是常量表达式  数组初始化：  int v2[] = {1,2,3,4};         char v3[] = {‘a’, 'b', 'c', 'd'}；  上述数组声明时没有给出数组大小，但是有初始化列表时，数组]]></description><category></category></item><item><title><![CDATA[typedef和#define的用法和区别]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5948375</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5948375</guid><author>kaffeel</author><pubDate>Mon, 18 Oct 2010 11:49:00 +0800</pubDate><description><![CDATA[一、typedef的用法        1、在C/C++语言中，typedef常用来定义一个标识符及关键字的别名，它是语言编译过程的一部分，但它并不实际分配内存空间，实例像：     typedef    int       INT;         typedef    char*  Pchar;       typedef   (int*)   pINT;       typedef    unsigned char uchar;     // 将频繁使用且较长的类型定义一个别名       2、typ]]></description><category></category></item><item><title><![CDATA[C++中，局部变量可以和全局变量重名吗？]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5948228</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5948228</guid><author>kaffeel</author><pubDate>Mon, 18 Oct 2010 10:53:00 +0800</pubDate><description><![CDATA[这是一个作用域的问题。一个声明将一个名字引进一个作用域；局部变量（通常在函数中定义）的作用域是从声明的那一点开始，直到这个声明所在的块结束为止（一个块就是由{}围起来的一段代码）。全局变量（在所有函数、类、命名空间之外定义）的作用域从声明的那一点开始，直到这个声明所在的文件的结束。与全局变量重名的局部变量可以屏蔽全局变量，如果想在块内使用全局变量需要通过作用域解析运算符::引用。 见下例：  //global_local.cpp   #include     using namespace std;   i]]></description><category></category></item><item><title><![CDATA[C / C++中的零（0）]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5948699</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5948699</guid><author>kaffeel</author><pubDate>Mon, 18 Oct 2010 06:30:00 +0800</pubDate><description><![CDATA[零（0）是一个整数。由于各种标准转换，0可以被用于表示任意整数（布尔量：bool，字符型：char，整型数：int）、浮点类型、指针、还有指向成员的指针的量。0的类型将由上下文确定。  由于没有任何对象会被分配到地址0，因此，0也被当做一个指针常量，表明一个指针当时并没有指向任何对象。在C语言中非常流行的就是用NULL宏表示0指针。由于C++收紧的类型检查规则，采用普通的0表示空指针比NULL更好一些。如果你习惯了使用NULL来表示0指针，那么最好采用如下定义：  const    int NULL = 0]]></description><category></category></item><item><title><![CDATA[输入一个字符常量，输出此字符常量对应的整数值。]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5947843</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5947843</guid><author>kaffeel</author><pubDate>Sun, 17 Oct 2010 18:07:00 +0800</pubDate><description><![CDATA[//File Name：Test.cpp  #include   using namespace std;  int main()  {     char c;    cout> c;    cout]]></description><category></category></item><item><title><![CDATA[Axure介绍]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5814232</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5814232</guid><author>kaffeel</author><pubDate>Sun, 15 Aug 2010 21:36:00 +0800</pubDate><description><![CDATA[      互联网行业产品经理的一项重要工作，就是进行产品原型设计(Prototype Design)。而产品原型设计最基础的工作，就是结合批注、大量的说明以及流程图画框架图wireframe，将自己的产品原型完整而准确的表述给 UI、UE、程序工程师，市场人员，并通过沟通会议，反复修改prototype 直至最终确认，开始投入执行。  进行产品原型设计的软件工具也有很多种，我写的这个教程所介绍的Axure RP，是taobao、dangdang等国内大型网络公司的团队在推广使用的原型设计软件。同时，此软件]]></description><category></category></item><item><title><![CDATA[Fedora下gtk+开发包安装手记]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5811276</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5811276</guid><author>kaffeel</author><pubDate>Sat, 14 Aug 2010 06:29:00 +0800</pubDate><description><![CDATA[   基本package：        gtk+ 是基于以下三个库开发的：         glib：gtk+与gnome的底层核心库，主要提供了C数据结构、可移植封装、运行时功能接口，譬如事件循环、多线程、动态装载和对象机制等；         pango：国际化文本陈列及渲染库，它是gtk+的文本与字体处理核心；         atk：可访问接口库。使用ATK库，可以让你的程序很方便的使用屏幕阅读器、放大镜，以及一些输入设备等。         另外，还有cairo库也是安装gtk+所必须的。car]]></description><category></category></item><item><title><![CDATA[errno.h头文件介绍]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5772502</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5772502</guid><author>kaffeel</author><pubDate>Wed, 28 Jul 2010 23:03:00 +0800</pubDate><description><![CDATA[<br />查看错误代码errno是调试程序的一个重要方法。当linux C  API函数发生异常时,一般会将errno变量(需包含errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。比较麻烦的是每次都要去linux源代码里面查找错误代码的含义，现在把它贴出来，以后需要查时就来这里看了。<br />以下来自linux 2.4.20-18的内核代码中的/usr/include/asm/errno.h<br />#ifnde]]></description><category></category></item><item><title><![CDATA[Signal & Slot]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5569006</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5569006</guid><author>kaffeel</author><pubDate>Sat, 08 May 2010 09:36:00 +0800</pubDate><description><![CDATA[信号和 槽是用来在对象间通讯的方法，当一个特定事件发生的时候，signal会被 emit 出来，slot 调用是用来响应相应的 signal 的。QT 对象已经包含了许多预定义的 signal，但我们总是可以在派生类中添加新的 signal。QT 对象中也已经包含了许多预定义的 slog，但我们可以在派生类中添加新的 slot 来处理我们感兴趣的 signal.signal 和 slot 机制]]></description><category></category></item><item><title><![CDATA[QT signal & slot 定义及用法]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5568954</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5568954</guid><author>kaffeel</author><pubDate>Sat, 08 May 2010 09:09:00 +0800</pubDate><description><![CDATA[信号和槽是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。在前几个例子中，我们已经连接了信号和槽，声明了控件自己的信号和槽，并实现了槽函数，发送了自己的信号。现在来更深入了解这个机制。槽和普通的c++成员函数很像。它们可以是虚函数（virtual），也可被重载（overload），可以是公有的（public），保护的（protective），也可是私]]></description><category></category></item><item><title><![CDATA[一步到位设置Linux系统时间]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5553356</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5553356</guid><author>kaffeel</author><pubDate>Mon, 03 May 2010 21:11:00 +0800</pubDate><description><![CDATA[       咱就说说linux怎么一步到位设置系统时间。拿linux虚拟机做实验的朋友会知道。当你把linux还原到某个点的时候，vmware帮不了你把系统时间也给重设了。所以这时候就要手工来搞。关于咋设linux时间。网上介绍也很多，但是都是抄来抄去的东西。那怎么才能高效快捷的设置系统时间呢？      开始的时候，或者网上都有的说法，比如说把时间设为2009-11-12 18:30:50]]></description><category></category></item><item><title><![CDATA[UML核心元素之 用例]]></title><link>https://blog.youkuaiyun.com/kaffeel/article/details/5471567</link><guid>https://blog.youkuaiyun.com/kaffeel/article/details/5471567</guid><author>kaffeel</author><pubDate>Sat, 10 Apr 2010 23:10:00 +0800</pubDate><description><![CDATA[    用例在UML中是最重要的一个元素。之所以说它重要，是因为UML是面向对象的，除用例之外其他元素都是“封装”的、“独立”的。基本概念    用例（Use Case）是一种把现实世界的需求捕获下来的方法。这个世界功能性体现在，首先有某个人的一个愿望，这个愿望驱使人去做事并获得一个确定的结果。一个系统就是由各种各样的愿望组成的。换句话说，各种各样的人为了各自的目的做着各种各样的事情共同组]]></description><category></category></item></channel></rss>