﻿<?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++博客- 攀升·Uranus-随笔分类-C/C++</title><link>http://www.cppblog.com/iuranus/category/4275.html</link><description>&lt;br&gt;&lt;font color="#ADFF2F"&gt;Something Different，Something New&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 19:51:31 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 19:51:31 GMT</pubDate><ttl>60</ttl><item><title>C++怎么实现AOP</title><link>http://www.cppblog.com/iuranus/archive/2007/12/14/38507.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Fri, 14 Dec 2007 06:02:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2007/12/14/38507.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/38507.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2007/12/14/38507.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/38507.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/38507.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AOP技术的诞生并不算晚，早在1990年开始，来自Xerox Palo Alto Research Lab（即PARC）的研究人员就对面向对象思想的局限性进行了分析。他们研究出了一种新的编程思想，借助这一思想或许可以通过减少代码重复模块从而帮助开发人员提高工作效率。随着研究的逐渐深入，AOP也逐渐发展成一套完整的程序设计思想，各种应用AOP的技术也应运而生。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AOP技术在Java平台下是最先得到应用的。就在PARC对于面向方面编程进行研究的同时，美国Northeastern University的博士生Cristina Lopes和其同事也开始了类似的思考。最终，美国国防先进技术研究计划署（Defense Advanced Research Projects Agency即DARPA）注意到了这项工作，并提供了科研经费，鼓励将二者的工作成果结合起来。他们通过定义一套Java语言的扩展系统，使开发者可以方便的进行面向方面的开发，这套扩展系统被称为AspectJ。之后，AspectJ在2002年被转让给Eclipse Foundation，从而成为在开源社区中AOP技术的先锋，也是目前最为流行的AOP工具。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么对于C++技术来说，怎样来开展AOP呢，幸好<strong>有Olaf Spinczyk</strong> 这样的人存在，我们也有了aspect c++。它使用了插入代码的方法。一个典型的Aspect C++示例需要一个C++源文件(.cpp)、一个aspect C++源文件(.ah)，通过ac++编译器把C++源文件和aspect C++源文件转换成混合的C++源文件(如果有头文件也会转换)，最后通过普通的C++编译器编译出可执行文件。<br>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么我现在如果不想用第三方编译器，自己去实现AOP，不知道CPPBLOG里的大虾有什么想法？<br></p>
<img src ="http://www.cppblog.com/iuranus/aggbug/38507.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2007-12-14 14:02 <a href="http://www.cppblog.com/iuranus/archive/2007/12/14/38507.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小谈const  熟练C/C++（二）</title><link>http://www.cppblog.com/iuranus/archive/2007/10/11/33967.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Thu, 11 Oct 2007 13:09:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2007/10/11/33967.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/33967.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2007/10/11/33967.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/33967.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/33967.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:    const关键字可以说是用途广泛，从对变量的限定到对函数的限定，尤其是那个指向常量的指针（const int *p），指针常量(int * const p)，指向常量的指针常量(const  int* const p)更让初学者摸不到头脑。这里我主要想描述下最近项目中关于const的一个问题。其实有的时候还不能被表面现象迷惑了，简单代码如下&nbsp;&nbsp;<a href='http://www.cppblog.com/iuranus/archive/2007/10/11/33967.html'>阅读全文</a><img src ="http://www.cppblog.com/iuranus/aggbug/33967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2007-10-11 21:09 <a href="http://www.cppblog.com/iuranus/archive/2007/10/11/33967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>返回内部静态成员  熟练C/C++（一）  </title><link>http://www.cppblog.com/iuranus/archive/2007/04/13/21798.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Fri, 13 Apr 2007 08:07:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2007/04/13/21798.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/21798.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2007/04/13/21798.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/21798.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/21798.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看完陈皓的</span><span>C/C++</span><span>返回内部静态成员的陷阱，认识到自己确实对</span><span>C/C++</span><span>本身语法研究的不够清楚，所以这些时间就在对基本知识进行回顾，真的还蛮有意思的。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我在用</span><span>C/C++</span><span>函数时，从没有全面考虑过该函数功能，只是知道它能做，基本对函数细节没有了解，就拿下面这个函数做个例子：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *inet_ntoa(struct in_addr in);</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct in_addr {<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>unsigned long int s_addr; }</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看到这个我就能想到该函数是把一个</span><span>unsigned long type</span><span>的数转换成一个字符串。其它什么都不想。现在让我们来仔细品读里面的东西。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我传入一个</span><span>unsigned long type</span><span>的数据，它给我传出一个</span><span>char *</span><span>，那这个</span><span>char * </span><span>在函数里怎么分配空间的。首先不可能是堆分配，因为如果是那样的话，你用完这个函数后还要释放资源。其次不可能是栈分配，因为那样函数返回后栈也会跟着释放。那还有可能是全局变量，如果这样的话，</span><span>C/C++</span><span>中已经有好多全局了。那还有一种是</span><span>static</span><span>的可能，</span><span>static</span><span>不会随着函数的返回而释放，也就是说，它是一块长期被分配的内存空间，现在在假若我在程序中这样写：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;%s, %s&#8221;, inet_ntoa(a), inet_ntoa(b));&nbsp;//a, b </span><span>是两个不相等的值</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>输出会让我大吃一惊，输出结果一样。原因很简单，就是</span><span>printf</span><span>先求</span><span>b</span><span>，把值给了那个</span><span>static</span><span>，然后再求</span><span>a, </span><span>把值又给了</span><span>static</span><span>，</span><span>static</span><span>的那块内存最终被写入了</span><span>a</span><span>的值，这个时候输出，那当然就输出的同一个值了。还有一种错误写法，如下：</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Char *tmp1 = inet_ntoa(a);</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Char *tmp2 = inet_ntoa(b);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>这样也是有问题的，因为</span><span>tmp1</span><span>和</span><span>tmp2</span><span>都指向了一块内存，当前的</span><span>static</span><span>的值就是</span><span>b</span><span>的值了。所以总结如下，使用这种函数一定要</span><span>copy</span><span>函数返回的值，而不能去保存其内存地址！<br>附inet_ntoa()源码：<br>#include &lt;stdio.h&gt;<br>#include &lt;stdlib.h&gt;<br>#include &lt;arpa/inet.h&gt;<br>#include &lt;bits/libc-lock.h&gt;<br><br><span class=cc><font color=#006600>/* The interface of this function is completely stupid, it requires a<br>&nbsp;&nbsp; static buffer.&nbsp; We relax this a bit in that we allow at least one<br>&nbsp;&nbsp; buffer for each thread.&nbsp; */</font></span><br><br><span class=cc><font color=#006600>/* This is the key for the thread specific memory.&nbsp; */</font></span><br>static __libc_key_t key;<br><br><span class=cc><font color=#006600>/* If nonzero the key allocation failed and we should better use a<br>&nbsp;&nbsp; static buffer than fail.&nbsp; */</font></span><br>static char local_buf[18];<br><span style="COLOR: red">static char *static_buf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //静态</span><br><br><span class=cc><font color=#006600>/* Destructor for the thread-specific data.&nbsp; */</font></span><br><a name=a0></a>static void init (void);<br>static void free_key_mem (void *mem);<br><br><br>char *<br><strong class=cchl id=m0><font style="BACKGROUND-COLOR: #aaffff">inet_ntoa</font></strong> (struct in_addr in)<br>{<br>&nbsp; __libc_once_define (static, once);<br>&nbsp; char *buffer;<br>&nbsp; unsigned char *bytes;<br><br>&nbsp; <span class=cc><font color=#006600>/* If we have not yet initialized the buffer do it now.&nbsp; */</font></span><br>&nbsp; __libc_once (once, init);<br><br>&nbsp; if (static_buf != NULL)<br>&nbsp;&nbsp;&nbsp; buffer = static_buf;<br>&nbsp; else<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=cc><font color=#006600>/* We don't use the static buffer and so we have a key.&nbsp; Use it<br>to get the thread-specific buffer.&nbsp; */</font></span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer = __libc_getspecific (key);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buffer == NULL)<br>{<br>&nbsp; <span class=cc><font color=#006600>/* No buffer allocated so far.&nbsp; */</font></span><br>&nbsp; buffer = malloc (18);<br>&nbsp; if (buffer == NULL)<br>&nbsp;&nbsp;&nbsp; <span class=cc><font color=#006600>/* No more memory available.&nbsp; We use the static buffer.&nbsp; */</font></span><br>&nbsp;&nbsp;&nbsp; buffer = local_buf;<br>&nbsp; else<br>&nbsp;&nbsp;&nbsp; __libc_setspecific (key, buffer);<br>}<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp; bytes = (unsigned char *) &amp;in;<br>&nbsp; __snprintf (buffer, 18, "%d.%d.%d.%d",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bytes[0], bytes[1], bytes[2], bytes[3]);<br><br>&nbsp; return buffer;<br>}<br><br><br><span class=cc><font color=#006600>/* Initialize buffer.&nbsp; */</font></span><br>static void<br>init (void)<br>{<br>&nbsp; if (__libc_key_create (&amp;key, free_key_mem))<br>&nbsp;&nbsp;&nbsp; <span class=cc><font color=#006600>/* Creating the key failed.&nbsp; This means something really went<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wrong.&nbsp; In any case use a static buffer which is better than<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nothing.&nbsp; */</font></span><br>&nbsp;&nbsp;&nbsp; static_buf = local_buf;<br>}<br></span></p>
<img src ="http://www.cppblog.com/iuranus/aggbug/21798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2007-04-13 16:07 <a href="http://www.cppblog.com/iuranus/archive/2007/04/13/21798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>心情不错</title><link>http://www.cppblog.com/iuranus/archive/2007/03/28/20799.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Wed, 28 Mar 2007 11:52:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2007/03/28/20799.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/20799.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2007/03/28/20799.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/20799.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/20799.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">经过一些时候项目中对</span> <span lang=EN-US>C++</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的使用，我算是有一个</span> <span lang=EN-US>C++</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的项目经验，但是反过来说，我只是写些基本的程序，没有深入到构架，主要还是用</span> <span lang=EN-US>C</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的思想，昨天写</span> <span lang=EN-US>struct</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，我发现在</span> <span lang=EN-US>C</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span> <span lang=EN-US>C++</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中写法是不是样的。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>C</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span> <span lang=EN-US></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span>struct Node{<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">声明</span> <span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int node;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>struct Node *next;<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span>};</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span>struct Node list;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span>typedef<span style="mso-spacerun: yes">&nbsp; </span>Node {<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int node;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>struct Node *next; </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><span lang=EN-US>}ListLink;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span>ListLink list;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>C++:</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span>struct Node{</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>Int node;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>Node *next;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><span lang=EN-US>};</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"><span lang=EN-US>Node list;<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">搞定了</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样一看</span> <span lang=EN-US>C++</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的确实在代码的层面上简单了，但理解起来却不是很舒服！</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今天刚接到任务做</span> <span lang=EN-US>Wireless-Lan</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，好长时间没做正事了（这两天主要在写文档）东西还比较多，但是和我一组的</span> <span lang=EN-US>Danel人很好</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，给我讲了下整个</span> <span lang=EN-US>class diagram</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的流程，虽没有</span> <span lang=EN-US>sequence </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么容易理解，但我还是懂了。而且我发现他写程序时特别开心，心态很好，这也是我在追求的，慢慢来吧。总监说这周五之前做出点东西，呵呵，不能让他失望呀，过会再看看代码，</span> <span lang=EN-US>GUI</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，我蛮喜欢写的。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">再说说今天用的那个工具，</span> <span lang=EN-US>SOURCE INSIGHT</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，真爽。看代码的强有力工具。下次给</span> <span lang=EN-US>PASSION</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的兄弟们介绍下。</span> </p>
<img src ="http://www.cppblog.com/iuranus/aggbug/20799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2007-03-28 19:52 <a href="http://www.cppblog.com/iuranus/archive/2007/03/28/20799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> C的基本实现</title><link>http://www.cppblog.com/iuranus/archive/2006/12/31/17092.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Sun, 31 Dec 2006 08:00:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2006/12/31/17092.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/17092.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2006/12/31/17092.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/17092.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/17092.html</trackback:ping><description><![CDATA[<h3 class=post-title>C的实现都是有两个不同的环境：翻译与执行<br></h3>
翻译：<br>
<ol>
    <li>把多个源文件编译成目标代码。编译分为预处理器(把类似与#define的替换源文件)，然后解析，也就是来识别代码，大多数错误和警告产生在这步，最后目标代码便生成。这个过程中也可以加入优化器来优化代码。
    <li>把目标代码与标准库函数用链接器捆绑在一起，用于执行。</li>
</ol>
<p>执行：</p>
<ol>
    <li>程序载入内存。
    <li>程序执行。
    <li>程序终止。</li>
</ol>
<img src ="http://www.cppblog.com/iuranus/aggbug/17092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2006-12-31 16:00 <a href="http://www.cppblog.com/iuranus/archive/2006/12/31/17092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>