﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-unixflanker25su</title><link>http://www.cppblog.com/unixflanker25su/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 03:52:37 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 03:52:37 GMT</pubDate><ttl>60</ttl><item><title>borland传奇故事 -- 英雄[Anders]落难</title><link>http://www.cppblog.com/unixflanker25su/archive/2006/04/14/5540.html</link><dc:creator>风中的雷鸟</dc:creator><author>风中的雷鸟</author><pubDate>Fri, 14 Apr 2006 08:00:00 GMT</pubDate><guid>http://www.cppblog.com/unixflanker25su/archive/2006/04/14/5540.html</guid><wfw:comment>http://www.cppblog.com/unixflanker25su/comments/5540.html</wfw:comment><comments>http://www.cppblog.com/unixflanker25su/archive/2006/04/14/5540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/unixflanker25su/comments/commentRss/5540.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/unixflanker25su/services/trackbacks/5540.html</trackback:ping><description><![CDATA[英雄落难 <br /><br />
Philippe Kahn和Anders共同创造了传奇的Borland，两人之间有着浓厚的感情。在 <br />
Borland工作时，对于Anders任何的想法和计划，Philippe Kahn都是不遗余力地支持。 <br />
也正是这个重要的支持力量，才有随后极为成功的Borland Pascal以及Delphi的问世。 <br /><br />
但是在Philippe Kahn离开Borland之后，Anders再也没有了这股来自最亲密战友的强 <br />
力支援。1997年，Borland新的CEO Delbert Yocam在掌握了大权之后，Borland整个 <br />
公司开始走向第二个重要的转变，Delbert对于Borland产品的开发和趋势也有了不同 <br />
于Philippe Kahn的看法。当Java在1996年逐渐快速发展之后，睿智的Anders也看到 <br />
了Java成功的未来。因此在Anders不再积极参与Delphi 2/3的开发工作之后，他非常 <br />
希望能够主导Borland Java开发工具的开发，期望能够像当初的Delphi 1.0一样，为 <br />
Borland再次开发出全世界一级的Java开发工具。
 <br /><br />
不过，由于当时Delphi是Borland最重要的收入来源，高层仍然希望Anders继续在 <br />
Delphi产品线上投入全力，因此当时的Borland CEO Delbert Yocam并没有批准Anders <br />
的请求。Borland的下一个重要的开发工具JBuilder，当时的产品开发名称为Latte， <br />
仍然交由其他小组负责。依据我的推想，由于当时Anders对于Java已经有许多的想法， <br />
因此才会有后来的VJ++以及C#，这些产品和程序语言的许多特性想必已经在Anders的脑 <br />
中存在了一段时间了。 <br /><br />
Delbert没有允许Anders带领Latte开发小组，但Anders仍然没有放弃他的新计划。也 <br />
许是Anders注定和Borland的缘分已经到了尽头，这个时候正好Microsoft展开了有史 <br />
以来对Borland最大的挖角行动。在Anders无法在Borland取得满意的支持之后， <br />
Microsoft提供的优厚条件顿时对Anders产生了致命的吸引力，从而造成了Borland无 <br />
法挽回的遗憾。 <br /><br />
虽然Anders没有显赫的学历，无法获得Turning Awards(即图灵奖，信息科学界最高 <br />
荣誉的奖项，等同于诺贝尔奖)。但是我认为Anders的实力和贡献绝不输于任何一位 <br />
Turning
 Awards的得奖人。Anders是最好的信息实践型人物，在2001年，他终于获得 <br />
了信息界最具权威的信息刊物Dr. Dobbs' Journal颁发的Excellent Programming <br />
Awards，以表彰Anders为信息界做出的卓越贡献。我想Anders应该是许多本身没有高 <br />
学历或不是计算机信息科系出身的优秀程序员最好的效仿对象。 <br /><br />
Anders Hejlsberg这位不世出的软件天才，是目前全世界最顶尖的软件技术人员之一。 <br />
论实现技术，Anders可能是目前的第一高手，因为他精通程序语言、编译器技术、开发 <br />
工具、Framework以及系统架构。我虽然知道许多软件界重要的人物和好手，但是尚 <br />
不知有任何人能像Anders一样在这么多领域都能成为大家。下面是笔者整理出 <br />
Anders Hejlsberg到目前为止重要的功绩、贡献以及获颁的重要大奖： <br /><br />
" 和Philippe Kahn共同创办Borland <br /><br />
" 开发出Turbo Pascal，当时首创的In-Memory Compiler震惊了全世界 <br /><br />
" 开发出全世界最畅销的Pascal产品，Turbo Pascal(这是许多信息人员学习Pascal <br />
和Data Structure使用的经典产品)以及Borland Pascal。Turbo/Borland Pascal合 <br />
计销售超过了数百万套。Dr. N.
 Wirth(Pascal语言的创始人员)也应该向Anders致敬， <br />
表达Anders对于Pascal语言的贡献 <br /><br />
" Anders使用汇编语言撰写编译器，其功力无人能出其右。创造出了全世界速度最快、 <br />
品质也是一流的Pascal编译器。在Anders离开了Borland之后，几乎没有人能够修改 <br />
Anders的编译器 <br /><br />
" 开发出影响深远的Delphi这个伟大的RAD工具 <br /><br />
" 开发出VJ++语言 <br /><br />
" Microsoft .NET的Architect <br /><br />
" Microsoft颁授Microsoft Distinguish Engineer大奖 <br /><br />
" 发明C#这个又将造成重大影响的语言 <br /><br />
" 获颁2001年Dr. Dobbs' Journal的Excellence In Programming大奖 <br /><br />
一个人一生能够做出几件让全世界都津津乐道的事业呢？Anders却成就了无数PC界伟 <br />
大的功绩，并且在程序语言、编译器、开发工具以及Framework方面都有重要的贡献。 <br />
PC软件界因为有了Anders而精彩、丰富了许多，也创造了许多令人惊叹的故事。更 <br />
棒的是Anders现在仍然在继续贡献他惊人的天分，就让我们拭目以待，看看Anders还 <br />
能创造什么功迹吧。不过，不管以后如何，相信Anders应该是大部分软件人员希望学
 <br />
习的目标。Anders的功力也是大部分软件人员一生企望能够达到的境界。 <br /><br />
在2002年Borland Developers' Conference中，Anders Hejlsberg是排名第一的 <br />
Keynote Speaker，尚在Java的创始人James Gosling之前。根据现场同时聆听这两场 <br />
Keynote Speech的听众报道，Anders的Keynote Speech是非常精彩的，而James的 <br />
Keynote Speech则相对的枯燥，许多人因此而提前离席。而且Anders在开始进行 <br />
Keynote Speech之时，便获得了现场所有听众起立鼓掌致敬，看来，在大多数Borland <br />
开发工具使用者的心中，Anders Hejlsberg是永远的巨星。 <br /><br />
Microsoft的挖角和Anders的离开 <br /><br />
Anders在不介入Delphi的开发、并且无法主导Borland Java开发工具开发的情况下充 <br />
满了挫折感。没有了Philippe Kahn的强力支援，Anders虽然是Borland最顶尖的技术 <br />
人才，却也无法对抗Borland管理阶层的力量。当然这也是从Philippe Kahn离开了 <br />
Borland之后、Bodand开始转型有关，这在稍后Borland的转变一文中，我会作详细的 <br />
说明。 <br /><br />
虽然Anders在Borland遇到了挫折，但是对于Microsoft来说这却是千载难逢的好机会，
 <br />
在此时Microsoft展开了大规模的挖角行动，而且是明目张胆地进行，正是由于 <br />
Microsoft如此大胆的行动，因此也造成了不久之后Borland对于Microsoft的法律控诉。 <br /><br />
这次的挖角行动中，Microsoft同时锁定了数个Borland最杰出或是重要的人物，当然 <br />
Anders是名列第一的挖角对象。时值1996年，Microsoft终于展开了行动，使用的方 <br />
式是最直接的攻击。Microsoft直接派遣加长型的大轿车到Borland大门口找Anders吃 <br />
饭，第一次Microsoft开出了年薪百万美元以上的条件。不过在Borland知道了这件事 <br />
情之后，也很快进行了加码的动作，因此Anders并没有对Microsoft进行响应。 <br />
Microsoft在苦等无应、按捺不住之下，很快就再次用大轿车找Anders。这次Microsoft <br />
提出了两百万美元以上的条件，希望Anders能够首肯。对于这次的喊价，Borland可有 <br />
点为难了，因为两百万美元不是笔小数目，这已经比当时Borland许多副总裁的年薪还 <br />
高。此外，如果Borland答应也加到两百万以上，那么是不是Chuck也要如此加码？其 <br />
他的Delphi R&amp;D小组要如何调整？这些都是非常棘手的问题。
 <br /><br />
不过Borland很快找到了解决的方案，那就是允许Anders从每一套卖出的Delphi版本 <br />
中抽取一定数量的版权费。如此一来Delphi卖得愈好，Anders便能取得愈多的回馈。 <br />
不过就我的了解，Anders注重的并不是金钱上的问题，因为在Borland创立的初期， <br />
由于Turbo Pascal的编译器都是Anders撰写的，因此当时Anders也是卖一套Turbo <br />
Pascal就可以抽取版税的。依照Turbo/Borland Pascal全世界销售数百万套来算， <br />
Anders早就是富翁了。薪水多一点，少一点并无所谓，Anders心中想的是自由发展的 <br />
空间。在Borland提出了Delphi的随版抽税，再加上Microsoft并不知道Anders真正想 <br />
要的东西，因此Anders仍然没有响应Microsoft提出的优厚条件。 <br /><br />
不过，Anders实在是太重要的人物，而且Microsoft在面对Java与日俱增的威胁下， <br />
非常渴望能够有像Anders这样的人才带领Microsoft开发下一代的开发工具，这当然 <br />
也是由于Microsoft以前向Borland挖来的人都做出了不小的贡献所致。Microsoft食 <br />
髓知味，当然希望能够得到Borland的镇山之宝。在Anders两次不为所动之后， <br />
Microsoft决定祭出最后的王牌，由Bill
 Gates亲自找Anders吃饭，进行最终的挖角 <br />
行动。 <br /><br />
不管读者喜不喜欢Bill Gates，不可否认的是Bill也是一个天才。自古英雄惜英雄， <br />
在Anders和Bill相谈甚欢的情形下，Microsoft开出了年薪三百万以上、数万股的 <br />
Microsoft股票这个超高的条件，再以当时Microsoft高贵的股价来计算，真是一笔庞 <br />
大的数字，也许对于搞软件技术的人来说，这已经是不可能的天文数字了。不过这些 <br />
条件并不是打动Anders的主要原因，Bill最后提出的条件是"答应给Anders一个小组 <br />
和极多的资源，让Anders尽情地发挥"。这个条件可说是打到了Anders的心底，因为 <br />
Anders正渴望有人能够支持他完成新的计划和想法。我想，在软件产业中大概也只有 <br />
Microsoft能够拥有这种雄厚的资源可以挖角任何人吧。 <br /><br />
在Bill Gates提了这样的条件之后，Borland再也没有本钱能够和Microsoft进行比价 <br />
了，只好眼睁睁地看着Anders离开Borland前往Microsoft再开创下一个人生的高峰。 <br />
在Anders到了Microsoft之后，Bill Gates果然重用Anders，也立刻让Anders负责激 <br />
活Microsoft的下一拨开发工具计划，当然这个计划也是Microsoft对抗SUN/Java的整
 <br />
体计划之一。Anders到了Microsoft之后立刻展现了实力，让Microsoft的编译器技术 <br />
又精进不少，最明显的例子就是Microsoft后期的Java Virtual Machine是PC上执行 <br />
效率最好的，而且在2、3年后，VJ++编译出来的虚拟机械码的执行效率不但比任何的 <br />
Java开发工具还快，在某些方面甚至比原生的Windows开发工具，例如Delphi、VB、 <br />
甚至是VC++还有效率。这真是令人震撼，当然Anders为VJ++打下的基础现在也展现在 <br />
NET的C#编译器以及.NET的JIT(Just In Time)编译器之上，.NET的JIT在许多程序代 <br />
码最佳化方面比Delphi还先进。因此在2、3年前当VJ++即将推出之际，在Borland内 <br />
部也引起了非常大的骚动，并且严阵以待，当然这又是另外一个故事了。 <br /><br />
对于Anders来说，到了Microsoft之后不久又再次登上了生涯的另一个巅峰。因为当 <br />
初Anders在Borland之时，就有如孙子兵法中叙述的"藏于九地之下"，虽然是不世出 <br />
的天才，但是仅为少数的人所知，即使是使用Borland产品的人在当时可能也不知道 <br />
Anders这号人物。因为Anders和Borland的作风很像，都是行事低调，不到最后绝不
 <br />
随意出手。但是Anders被挖角到Microsoft之后，由于Microsoft的企业文化向来是前 <br />
进、积极的侵略性方式，因此Anders也就转变为"动于九天之上"，负责Microsoft开 <br />
发工具大军的核心大将，不但广为人知，成为许多软件人员效法的对象，而且屡获大 <br />
奖。他不但获得了信息软件业界的推崇，最后也终于获得了信息学术界的认可，可说 <br />
是实至名归。 <br /><br />
Anders的离开对于Borland来说是一个很大的损失，不过对于Delphi R&amp;D小组来说却 <br />
是有好有坏，因为Delphi开发小组虽然失去了最重要的支柱，但是也给Danny Thorpe <br />
一个快速崛起的机会，在1年后，Danny果然立刻成为了Delphi/C++Builder/Kylix中 <br />
最杰出的人物之一(另外一个当然就是Anders的老搭挡Chuck Jazdzewski了)，Danny <br />
也是我认为目前在Borland RAD(注)部门中功力最厉害的人物。在稍后的内文中我会 <br />
对Danny进行比较详细的说明。 <br /><br />
注：Borland RAD部门是指Borland的Rapid Application Development部门，RAD负责 <br />
的产品包含了C++Builder、Delphi、Kylix以及未来的.NET以及Mobile的新产品。<br /><br />
转至 &lt;http://www.gameres.com &gt;<br /><img src ="http://www.cppblog.com/unixflanker25su/aggbug/5540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/unixflanker25su/" target="_blank">风中的雷鸟</a> 2006-04-14 16:00 <a href="http://www.cppblog.com/unixflanker25su/archive/2006/04/14/5540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用C/C++库实现的一个简单的词法分析器</title><link>http://www.cppblog.com/unixflanker25su/archive/2006/04/14/5538.html</link><dc:creator>风中的雷鸟</dc:creator><author>风中的雷鸟</author><pubDate>Fri, 14 Apr 2006 07:52:00 GMT</pubDate><guid>http://www.cppblog.com/unixflanker25su/archive/2006/04/14/5538.html</guid><wfw:comment>http://www.cppblog.com/unixflanker25su/comments/5538.html</wfw:comment><comments>http://www.cppblog.com/unixflanker25su/archive/2006/04/14/5538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/unixflanker25su/comments/commentRss/5538.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/unixflanker25su/services/trackbacks/5538.html</trackback:ping><description><![CDATA[/* gg.h */<br />
/* another file to define macros */<br />
#ifndef GG_H<br />
#define GG_H<br />
#include &lt;string&gt;<br />
#include &lt;vector&gt;<br />
#include &lt;fstream&gt;<br />
#include &lt;iostream&gt;<br />
using namespace std;<br /><br />
/* function declaration */<br />
string readFile(char* filename);       // deal with files in C++ methds<br />
void startprint();<br />
void endprint();<br />
vector&lt;string&gt; findwords(const char* str); // calculate words number<br />
void statistics(vector&lt;string&gt; strstr);<br />
void numscore();<br />
// void lastmodified();            // complete the last invoked for main function<br /><br />
#define LENGTH(x) (sizeof(x) / sizeof(*(x)))    // the length of array...<br /><br />
typedef struct code{<br />
    char num[20];<br />
    int nnm;<br />
}NUMCODE;<br /><br />
#endif<br /><br />
#include "gg.h"<br />
#include &lt;cstdio&gt;<br />
#include &lt;fstream&gt;<br />
#include &lt;string&gt;<br />
#include &lt;vector&gt;<br />
#include &lt;iostream&gt;<br />
using namespace std;<br /><br />
/* define globa variable */<br />
NUMCODE array[]={<br />
    { "sy_if",     0 },<br />
    { "sy_then",     1},<br />
    { "sy_else",     2},<br />
    { "sy_while",     3},<br />
    { "sy_begin",     4},<br />
    { "sy_do",      5},<br />
    { "sy_end",    6},<br />
    { "a",        7},<br />
    { "semicolon",     8},<br />
    { "e",        9},<br />
    { "jinghao",    10},<br />
    { "S",        11},<br />
    { "L",        12},<br />
    { "tempsy",    13},<br />
    { "EA",        18},<br />
    { "EO",        19},<br />
    { "#",    30},<br />
    { "/",  31},<br />
    { "*",  32},<br />
    { "-",  33},<br />
    { "+",    34},<br />
    { "times",     36},<br />
    { "becomes",     38},<br />
    { "Op_and",    39},<br />
    { "Op_or",    40},<br />
    { "Op_not",    41},<br />
    { "rop",    42},<br />
    { "(",    48},<br />
    { ")",    49},<br />
    { "ident",    56},<br />
    { "intconst",    57}<br />
};<br />
int linecount =0;<br />
int element = 0;<br /><br />
void startprint(){<br />
    puts("--------------START---------------");<br />
}<br /><br />
void endprint(){<br />
    puts("--------------END--------------");<br />
}<br /><br />
/* a function read a file and puts its words to a container <br />
 * using C++ standard library */<br />
string readFile(char *filename){<br />
    vector&lt;string&gt; words;<br />
    string word;<br />
    string strtext;<br /><br />
    ifstream in(filename);<br />
    <br />
    while(getline(in, word)){<br />
        strtext += word + '\n';<br />
        ++linecount;<br />
    }<br />
        <br />
    cout &lt;&lt; strtext &lt;&lt; endl;<br />
    return strtext;<br />
}<br />
 <br />
/* searching for words and other print them */<br />
vector&lt;string&gt; findwords(const char *str){<br />
    char *pf = const_cast&lt;char*&gt;(str);    // type cast<br />
    char *ptemp;<br />
    int i = 0;<br />
    int j = 0;        // calculate <br />
    bool isword = false;<br />
    bool redundance = false;<br />
    vector&lt;string&gt; strs;<br />
    vector&lt;char&gt; ch;<br /><br />
    if( !isspace(*pf) )<br />
        isword = true;<br />
    <br />
    while(*pf){<br />
        if(isword){<br />
            ptemp = pf;<br />
            ++i;        // the number of words<br />
        }<br />
        <br />
        if( isalpha(*pf) || isdigit(*pf) || *pf == '_' \<br />
        &amp;&amp; *pf != '(' &amp;&amp; *pf != ')' &amp;&amp; *pf != ';' &amp;&amp;\<br />
        *pf != '+' &amp;&amp; *pf != '-' &amp;&amp; *pf != '*' &amp;&amp; *pf != '/'){<br />
            isword = false;<br />
            j++;<br />
        }<br /><br />
        if( isspace(*pf) || *pf == '(' || *pf ==')' || \<br />
            *pf == '[' || *pf == ']' || *pf == '+' || *pf == '-'\<br />
            || *pf == '*'
|| *pf == '/' || *pf == '#'){    // || ispunct(*pf)){<br />
            <br />
            // adds special characters<br />
            if(*pf == '(' || *pf == ')' || *pf == '#'\<br />
            || *pf == '+' || *pf == '-' || *pf == '*'\<br />
            || *pf == '/' || *pf == ':'){<br />
                string tempstr;<br />
                tempstr = *pf;<br />
                strs.push_back(tempstr);<br />
                redundance = true;<br />
            }<br />
            else<br />
                redundance = false;<br />
            if(redundance)<br />
                goto xxx;<br /><br />
            ptemp[j] = '\0';<br />
            strs.push_back(ptemp);<br /><br />
            isword = true;<br />
            j = 0;<br />
            ptemp = pf;<br />
        }<br />
        xxx:    pf++;<br />
    }<br />
    return strs;<br />
}<br /><br />
/* statistics the words which is in words table */<br />
void statistics(vector&lt;string&gt; strstr){<br />
    int i;<br />
    int j;<br />
    bool isin = false;<br />
    cout &lt;&lt; "\n  the words can be recognized as follows" &lt;&lt; endl;<br />
    cout &lt;&lt; "==========================================\n";<br />
    <br />
    for(i = 0; i &lt; strstr.size(); i++){    <br />
        for(j = 0; j &lt; LENGTH(array); j++){<br />
            if( 0 == strcmp(strstr[i].data(), array[j].num)){<br />
           
    cout &lt;&lt; "(\""&lt;&lt;strstr[i]&lt;&lt;"\","
&lt;&lt;array[j].nnm &lt;&lt; " )" &lt;&lt; endl;<br />
                ++element;<br />
                continue;<br />
            }<br />
            else if (j ==
LENGTH(array)-1 &amp;&amp; 0 != strcmp(strstr[i].data(), "\0")
&amp;&amp;\<br />
           
    0 != strcmp(strstr[i].data(), "+") &amp;&amp; 0 !=
strcmp(strstr[i].data(), "-")&amp;&amp;\<br />
           
    0 != strcmp(strstr[i].data(), "*") &amp;&amp; 0 !=
strcmp(strstr[i].data(), "/")&amp;&amp;\<br />
           
    0 != strcmp(strstr[i].data(), "(") &amp;&amp; 0 !=
strcmp(strstr[i].data(), ")")){<br />
           
    cout &lt;&lt; "(\"" &lt;&lt; strstr[i] &lt;&lt; "\",
" &lt;&lt; 56 &lt;&lt; ")"&lt;&lt; endl;<br />
                ++element;<br />
            }<br />
        }<br />
    }<br />
    return ;<br />
}<br /><br />
void numscore(){<br />
    cout &lt;&lt; "----------------- numbers of elements ------------- "&lt;&lt; endl;<br />
    cout &lt;&lt; "\tlines\t\telements" &lt;&lt;endl;<br />
    cout &lt;&lt; "\t" &lt;&lt; linecount &lt;&lt; "\t\t" &lt;&lt; element &lt;&lt; endl;<br />
}<br /><br />
//=====================================================<br />
/* gg.cpp <br />
 * compiler: g++, c++ <br />
 * abet standard C/C++ library<br />
 */<br />
#include "gg.h"<br /><br />
int main(char argc, char **args){<br />
    const char *filearray;<br />
    vector&lt;string&gt; dealstr;<br />
    string strname;<br /><br />
    startprint();<br />
    if(argc == 1){<br />
        printf("error: please input file name.\n");<br />
        printf("dirpath: %s\n", args[argc-1]);<br />
        <br />
        while(true){<br />
            cout &lt;&lt; "Please input file name: ";<br />
            cin &gt;&gt; strname;<br />
            filearray = readFile((char*)strname.data()).data();<br />
            dealstr = findwords(filearray);<br />
           
statistics(dealstr);       
    numscore();<br />
            break;<br />
        }<br />
        <br />
        endprint();<br />
        system("PAUSE");<br />
        exit(0);<br />
    }else if(argc == 2){<br />
        printf("filename: %s\n", args[argc-1]);<br />
        puts("---text content----");<br />
        filearray = readFile(args[argc-1]).data();<br />
        <br />
        endprint();<br />
        dealstr = findwords(filearray);<br />
        statistics(dealstr);            numscore();<br />
    }<br />
    system("PAUSE");<br />
}<br />
// 里面的算法感觉都非常的笨,可是又想不出来好的,好的东西从哪里来...<br /><img src ="http://www.cppblog.com/unixflanker25su/aggbug/5538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/unixflanker25su/" target="_blank">风中的雷鸟</a> 2006-04-14 15:52 <a href="http://www.cppblog.com/unixflanker25su/archive/2006/04/14/5538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>