<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feeds.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feeds.feedsky.com/csdn.net/joliny" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feeds.feedsky.com/csdn.net/joliny" type="application/rss+xml"></fs:self_link><lastBuildDate>Tue, 26 May 2009 14:19:00 GMT</lastBuildDate><title>在水一方</title><description>炕上等你</description><link>http://blog.csdn.net/joliny/</link><item><title>80386汇编+GCC的内嵌汇编</title><link>http://blog.csdn.net/joliny/archive/2009/05/26/4217160.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/4217160.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/4217160.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=4217160</trackback:ping><description>&lt;br /&gt;&lt;br /&gt;
__asm__ __volatile__ GCC的内嵌汇编语法 AT&amp;T汇编语言语法&lt;br /&gt;这篇帖子由于没署作者名，所以我转的时候也没怎么署，但还是谢谢了。&lt;br /&gt;
AT&amp;T ASM Syntax&lt;br /&gt;
1 Overview &lt;br /&gt;
开发一个OS，尽管绝大部分代码只需要用C/C++等高级语言就可以了，但至少和硬件相关部分的代码需要使用汇编语言，另外，由于启动部分的代码有大小限
制，使用精练的汇编可以缩小目标代码的Size。另外，对于某些需要被经常调用的代码，使用汇编来写可以提高性能。所以我们必须了解汇编语言，即使你有可
能并不喜欢它。&lt;br /&gt;
如果你是计算机专业的话，在大学里你应该学习过Intel格式的8086/80386汇编，这里就不再讨论。如果我们选择的OS开发工具是GCC以及GAS的话，就必须了解AT&amp;T汇编语言语法，因为GCC/GAS只支持这种汇编语法。&lt;br /&gt;
本书不会去讨论8086/80386的汇编编程，这类的书籍很多，你可以参考它们。这里只会讨论AT&amp;T的汇编语法，以及GCC的内嵌汇编语法。&lt;br /&gt;&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/4217160.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/223255890/joliny/csdn.net/s.gif?r=http://blog.csdn.net/joliny/archive/2009/05/26/4217160.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255890/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255890/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 26 May 2009 22:19:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/05/26/4217160.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/05/26/4217160.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/05/26/4217160.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255890/1359958</fs:itemid></item><item><title>Mercurial - 分布式版本控制系统</title><link>http://blog.csdn.net/joliny/archive/2009/03/25/4024519.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/4024519.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/4024519.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=4024519</trackback:ping><description>&lt;br /&gt;运 国莲 (yunguol@cn.ibm.com), 软件工程师, IBM&lt;br /&gt;李 振刚 (lizg@cn.ibm.com), 软件工程师, IBM&lt;br /&gt;2008 年  9 月  04 日是
一个轻量级的分布式版本控制系统，它以方便的控制、极强的扩展性赢得了众多开放源代码项目的青睐。本文从版本控制系统中的基本概念、操作和扩展性等方面，
有侧重的介绍了 Mercurial。此外本文列出了几个其他常用的分布式版本控制系统，并和 Mercurial
作了简单的比较。通过阅读本文，读者可以了解基础的Mercurial操作，进而熟悉这个备受青睐的工具。&lt;br /&gt;Mercurial 简介&lt;br /&gt;Mercurial 是一种轻量级分布式版本控制系统，采用 Python 语言实现，易于学习和使用，扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。相对于传统的版本控制，具有如下优点：
更轻松的管理。传统的版本控制系统使用集中式的 repository，一些和
repository相关的管理就只能由管理员一个人进行。&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/4024519.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255891/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255891/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 26 Mar 2009 03:46:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/25/4024519.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/25/4024519.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/25/4024519.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255891/1359958</fs:itemid></item><item><title>Linux守护进程的编程方法</title><link>http://blog.csdn.net/joliny/archive/2009/03/14/3990498.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/3990498.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/3990498.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=3990498</trackback:ping><description>&lt;br /&gt;Linux 守护进程的编程方法 &lt;br /&gt;&lt;br /&gt;守
护进程（Daemon）是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。
Linux的大多数服务器就是用守护进程实现的。比如，Internet服务器inetd，Web服务器httpd等。同时，守护进程完成许多系统任务。
比如，作业规划进程crond，打印进程lpd等。 &lt;br /&gt;守护进程的编程本身并不复杂，复杂的是各种版本的Unix的实现机制不尽相同，造成不同
Unix环境下守护进程的编程规则并不一致。这需要读者注意，照搬某些书上的规则（特别是BSD4.3和低版本的System
V）到Linux会出现错误的。下面将全面介绍Linux下守护进程的编程要点并给出详细实例。 &lt;br /&gt;一． 守护进程及其特性 &lt;br /&gt;守护进程最
重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次，守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述
符，控制终端，会话和进程组，工作目录以及文件创建掩模等。这些&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/3990498.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255892/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255892/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 15 Mar 2009 02:26:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/14/3990498.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/14/3990498.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/14/3990498.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255892/1359958</fs:itemid></item><item><title>解惑dup/dup2</title><link>http://blog.csdn.net/joliny/archive/2009/03/14/3990494.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/3990494.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/3990494.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=3990494</trackback:ping><description>&lt;br /&gt;&lt;br /&gt;    最近一段时间在用c写cgi程序，接触了这两个系统调用dup/dup2，碰到了一些&lt;br /&gt;&lt;br /&gt;问题，　也解决了一些问题，　写出来与大家分享，也方便以后参考:)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. 文件描述符在内核中数据结构&lt;br /&gt;&lt;br /&gt;    在具体说dup/dup2之前，　我认为有必要先了解一下文件描述符在内核中的形态。&lt;br /&gt;&lt;br /&gt;一个进程在此存在期间，会有一些文件被打开，从而会返回一些文件描述符，从shell&lt;br /&gt;&lt;br /&gt;中运行一个进程，默认会有3个文件描述符存在(0、１、2), 0与进程的标准输入相关联，&lt;br /&gt;&lt;br /&gt;１与进程的标准输出相关联，2与进程的标准错误输出相关联，一个进程当前有哪些打开&lt;br /&gt;&lt;br /&gt;的文件描述符可以通过/proc/进程ID/fd目录查看。　下图可以清楚的说明问题：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　进程表项&lt;br /&gt;————————————————&lt;br /&gt;&lt;br /&gt;　　　fd标志　文件指针&lt;br /&gt;      ___________&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/3990494.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255893/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255893/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 15 Mar 2009 02:24:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/14/3990494.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/14/3990494.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/14/3990494.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255893/1359958</fs:itemid></item><item><title>开源数据库连接池 SQL Relay 的安装配置和应用</title><link>http://blog.csdn.net/joliny/archive/2009/03/14/3990383.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/3990383.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/3990383.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=3990383</trackback:ping><description>sqlrelay 的安装配置和应用&lt;br /&gt;作者：tonyvicky&lt;br /&gt;来自：LinuxSir.Org&lt;br /&gt;摘要：FreeTDS: 是在Linux系统中连接SQL Server的程序，本文不介绍此软件的安装方法，我们主要介绍SQL Relay的配置和应用；&lt;br /&gt;&lt;br /&gt;本文来源：http://www.linuxsir.org/main/?q=node/144&lt;br /&gt;&lt;br /&gt;目录&lt;br /&gt;一、SQL Relay是什么；&lt;br /&gt;二、SQL Relay支持哪些数据库；&lt;br /&gt;三、安装和配置；1、安装Rudiments；&lt;br /&gt;2、安装SQL Relay；&lt;br /&gt;3、设置PHP；&lt;br /&gt;4、修改SQL Relay的配置文件；&lt;br /&gt;四、启动SQL Relay，并测试；1、启动 SQL Relay；&lt;br /&gt;2、使用SQL工具；&lt;br /&gt;3、测试PHP；&lt;br /&gt;五、关于本文；&lt;br /&gt;六、相关文档；&lt;br /&gt;&lt;br /&gt;++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/3990383.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255894/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255894/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 15 Mar 2009 01:14:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/14/3990383.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/14/3990383.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/14/3990383.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255894/1359958</fs:itemid></item><item><title>Linux下GUI开发：GTK+ 2.0 + anjuta + glade</title><link>http://blog.csdn.net/joliny/archive/2009/03/11/3979855.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/3979855.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/3979855.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=3979855</trackback:ping><description>&lt;br /&gt;在Linux，可以考虑用GTK(The GIMP Toolkit)来做GUI(Graphic User interface)开发，开发工具建议使用anjuta + glade(貌似eclipse+cdt也可以)。&lt;br /&gt;建议：&lt;br /&gt;一、先学习GTK+ 2.0本身，比如用vim+gcc+gdb+make+automake+autoconf...这样对基于GTK的图形开发过程就有了基本了解，以后用anjuata+glade自动生成代码的时候容易阅读和分析。&lt;br /&gt;在学习GTK时，可以先系统的阅读一本相关教程，阅读和做一些实例，在这个过程中参考
GTK+ 2.0的手册和FAQ。如果能静下心系统的学，建议直接看英文文档（到google.com搜索“GTK+ 2.0
homepage&quot;即可找到首页，去首页看documentation即可找到英文文档，其他东西的首页可以类似地找到）。&lt;br /&gt;资料：&lt;br /&gt;1. 大家一起用gtk编程(一个序列)&lt;br /&gt;http://bbs.chinaunix.net/viewthread.php?tid=832923&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/3979855.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255895/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255895/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2009 21:33:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/11/3979855.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/11/3979855.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/11/3979855.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255895/1359958</fs:itemid></item><item><title>static</title><link>http://blog.csdn.net/joliny/archive/2009/03/11/3979169.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/3979169.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/3979169.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=3979169</trackback:ping><description>&lt;br /&gt;　C++的static有两种用法：面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数，不涉及类；后者主要说明static在类中的作用。&lt;br /&gt;　　一、面向过程设计中的static &lt;br /&gt;
　　1、静态全局变量 &lt;br /&gt;
　　在全局变量前，加上关键字static，该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子，如下： &lt;br /&gt;
　　//Example 1#include void
fn();static int n; //定义静态全局变量void main(){ n=20;
cout&lt;br /&gt;
　　静态全局变量有以下特点： &lt;br /&gt;
　　该变量在全局数据区分配内存； &lt;br /&gt;
　　未经初始化的静态全局变量会被程序自动初始化为0（自动变量的值是随机的，除非它被显式初始化）； &lt;br /&gt;
　　静态全局变量在声明它的整个文件都是可见的，而在文件之外是不&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/3979169.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255896/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255896/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2009 18:53:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/11/3979169.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/11/3979169.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/11/3979169.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255896/1359958</fs:itemid></item><item><title>C关于assert</title><link>http://blog.csdn.net/joliny/archive/2009/03/11/3979095.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/3979095.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/3979095.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=3979095</trackback:ping><description>&lt;br /&gt;ASSERT是一个宏，只判断宏参数是否为假或者空
&lt;br /&gt;一般用来判断一个等式是否成立。如果成立就不会影响。
&lt;br /&gt;int *p = NULL;
&lt;br /&gt;ASSERT(p);//p为空，运行时会出错。
&lt;br /&gt;ASSERT(p==NULL);//p==NULL值为真，对程序没影响。
&lt;br /&gt;&lt;br /&gt;此宏只对debug版本有效。在release版本中将被忽略。&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/3979095.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255897/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255897/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2009 18:39:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/11/3979095.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/11/3979095.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/11/3979095.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255897/1359958</fs:itemid></item><item><title>C语言的宏定义</title><link>http://blog.csdn.net/joliny/archive/2009/03/11/3979090.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/3979090.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/3979090.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=3979090</trackback:ping><description>&lt;br /&gt;&lt;br /&gt;C语言的宏定义 &lt;br /&gt;发表于 2006-12-22 11:55:19 &lt;br /&gt;写好C语言，漂亮的宏定义很重要，使用宏定义可以防止出错，提高可移植性，可读性，方便性 等等。下面列举一些成熟软件中常用得宏定义：&lt;br /&gt;1，防止一个头文件被重复包含 &lt;br /&gt;#ifndef COMDEF_H &lt;br /&gt;#define COMDEF_H &lt;br /&gt;//头文件内容 &lt;br /&gt;#endif &lt;br /&gt;2，重新定义一些类型，防止由于各种平台和编译器的不同，而产生的类型字节数差异，方便移植。 &lt;br /&gt;typedef  unsigned char      boolean;     /* Boolean  type. */ &lt;br /&gt;typedef  unsigned long int  uint32;      /* Unsigned 32 bit  */ &lt;br /&gt;typedef  unsigned short     uint16;      /* Unsigned 16 bit  */ &lt;br /&gt;typedef  unsigned cha&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/3979090.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255898/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255898/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2009 18:38:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/11/3979090.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/11/3979090.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/11/3979090.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255898/1359958</fs:itemid></item><item><title>函数指针与typedef</title><link>http://blog.csdn.net/joliny/archive/2009/03/11/3979085.aspx</link><wfw:comment>http://blog.csdn.net/joliny/comments/3979085.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/joliny/comments/commentRss/3979085.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=3979085</trackback:ping><description>（一）简单的函数指针的应用。&lt;br /&gt;//形式1：返回类型(*函数名)(参数表)&lt;br /&gt;char (*pFun)(int); &lt;br /&gt;char glFun(int a){ return;} &lt;br /&gt;void main() &lt;br /&gt;{ &lt;br /&gt;    pFun = glFun; &lt;br /&gt;    (*pFun)(2); &lt;br /&gt;}&lt;br /&gt;        第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针，这种函数参数是一个int型，返回值是char类型。只有第一句我们还无法使用这个指针，因为我们还未对它进行赋值。&lt;br /&gt;        第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针，函数名指向该函数的代码在内存中的首地址。&lt;br /&gt;        然后就是可爱的main()函数了，它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中“*pFun”显然是取pF&lt;img src =&quot;http://blog.csdn.net/joliny/aggbug/3979085.aspx&quot; width = &quot;1&quot; height = &quot;1&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/joliny/223255899/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/joliny/223255899/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2009 18:36:00 +0800</pubDate><author>蒋涛</author><comments>http://blog.csdn.net/joliny/archive/2009/03/11/3979085.aspx#Feedback</comments><guid isPermaLink="false">http://blog.csdn.net/joliny/archive/2009/03/11/3979085.aspx</guid><dc:creator>蒋涛</dc:creator><fs:srclink>http://blog.csdn.net/joliny/archive/2009/03/11/3979085.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/joliny/rss.aspx</fs:srcfeed><fs:itemid>csdn.net/joliny/~1354820/223255899/1359958</fs:itemid></item></channel></rss>