﻿<?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++博客-wsgyj-随笔分类-C知识</title><link>http://www.cppblog.com/wsgyj/category/11761.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 11 Sep 2009 13:57:17 GMT</lastBuildDate><pubDate>Fri, 11 Sep 2009 13:57:17 GMT</pubDate><ttl>60</ttl><item><title>C数组定义不可省略第二维及更高的维数  原因分析</title><link>http://www.cppblog.com/wsgyj/archive/2009/09/11/95960.html</link><dc:creator>gyj</dc:creator><author>gyj</author><pubDate>Fri, 11 Sep 2009 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/wsgyj/archive/2009/09/11/95960.html</guid><wfw:comment>http://www.cppblog.com/wsgyj/comments/95960.html</wfw:comment><comments>http://www.cppblog.com/wsgyj/archive/2009/09/11/95960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wsgyj/comments/commentRss/95960.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wsgyj/services/trackbacks/95960.html</trackback:ping><description><![CDATA[C语言书中写到在定义二维数组时，可以省略第一维的坐标，如&nbsp; int a[][3] = {{4,1,6},{2,3,5}};&nbsp; 是合法的<br>但是不可以省略二维或者更高维的坐标。 如&nbsp; int a[3][] = {{4,1,6},{2,3,5}}; 是不合法的<br><br>这是由编译器原理限制的。 如 定义a[2][3], 在我们引用数组元素a[1][2]时 编译器的寻址方式是 a+ 1*3+2，若不指定第二维<br>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 则编译器将不知道数组的列数也就无法寻址。 
<img src ="http://www.cppblog.com/wsgyj/aggbug/95960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wsgyj/" target="_blank">gyj</a> 2009-09-11 21:11 <a href="http://www.cppblog.com/wsgyj/archive/2009/09/11/95960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言编译过程</title><link>http://www.cppblog.com/wsgyj/archive/2009/09/09/95697.html</link><dc:creator>gyj</dc:creator><author>gyj</author><pubDate>Wed, 09 Sep 2009 08:00:00 GMT</pubDate><guid>http://www.cppblog.com/wsgyj/archive/2009/09/09/95697.html</guid><wfw:comment>http://www.cppblog.com/wsgyj/comments/95697.html</wfw:comment><comments>http://www.cppblog.com/wsgyj/archive/2009/09/09/95697.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wsgyj/comments/commentRss/95697.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wsgyj/services/trackbacks/95697.html</trackback:ping><description><![CDATA[C编译的整个过程很复杂，大致可以分为以下四个阶段：<br>1）预处理阶段<br>在该阶段主要完成对源代码的预处理工作，主要包括对宏定义指令，头文件包含指令，预定义指令和特殊字符的处理，如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等，总之这步主要完成一些替换工作，输出是同源文件含义相同但内容不同的文件。<br>2)编译、优化阶段<br>编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。<br>优化包括对中间代码的优化，如删除公共表达式，循环优化等；和对目标代码的生成进行的优化，如如何充分利用机器的寄存器存放有关变量的值，以减少内存访问次数。<br>3）汇编阶段<br>将汇编语言翻译成机器指令<br>4）链接阶段<br>链接阶段的主要工作是将有关的目标文件连接起来，即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来，使得所有的目标文件成为一个能够被操作系统装入执行的统一整体。<br>
<img src ="http://www.cppblog.com/wsgyj/aggbug/95697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wsgyj/" target="_blank">gyj</a> 2009-09-09 16:00 <a href="http://www.cppblog.com/wsgyj/archive/2009/09/09/95697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>