﻿<?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>BlogJava-yglwxl-随笔分类-C++/C</title><link>http://www.blogjava.net/yglwxl/category/25566.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 23 Sep 2007 13:55:08 GMT</lastBuildDate><pubDate>Sun, 23 Sep 2007 13:55:08 GMT</pubDate><ttl>60</ttl><item><title>typedef 的两种用法(转)</title><link>http://www.blogjava.net/yglwxl/archive/2007/09/19/146499.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Wed, 19 Sep 2007 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2007/09/19/146499.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/146499.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2007/09/19/146499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/146499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/146499.html</trackback:ping><description><![CDATA[typedef是c/c++代码中经常用到的一个关键字. 他的主要做用是给变量类型定义一个别名. <br />
从而达到代码简化, 促进跨平台开发的目的. <br />
下面是typedef的最经常的用法: <br />
<br />
typedef struct{ <br />
&nbsp; int a; <br />
&nbsp; int b; <br />
}MY_TYPE; <br />
<br />
这里把一个未命名结构直接取了一个叫MY_TYPE的别名, 这样如果你想定义结构的实例的时候就可以这样: <br />
MY_TYPE tmp; <br />
<br />
这是typedef的第一种用法. 比较简单. 就是 typedef 原变量类型 别名 <br />
相似的例子: <br />
typedef &nbsp;unsigned long DWORD;&nbsp; 无符号长型<br />
typedef void far &nbsp; &nbsp; &nbsp; *LPVOID; //void far *是原变量类型, 表示一个void 型指针(far 在32位系统里面已经没有意义了) <br />
等等 <br />
<br />
typedef还有第二种用法. 可能这种用法初学者没有接触过. <br />
比如: <br />
typedef int (*MYFUN)(int, int); <br />
这种用法一般用在给函数定义别名的时候.(其实质还是和上面的用法一样的) <br />
上面的例子定义MYFUN 是一个函数指针, 函数类型是带两个int 参数, 返回一个int <br />
<br />
在分析这种形式的定义的时候可以用下面的方法: <br />
先去掉typedef 和别名, 剩下的就是原变量的类型. <br />
比如上面的例子: <br />
去掉typedef和MYFUN以后就剩: <br />
int (*)(int, int) <br />
<br />
读了我前面一课里面讨论的 &lt;&lt;细说如何确定一个变量的类型&gt;&gt;的朋友应该很容易就得出这个类型指的时是 <br />
一个函数指针, 函数类型是带两个int 参数, 返回一个int <br />
<img src ="http://www.blogjava.net/yglwxl/aggbug/146499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2007-09-19 15:23 <a href="http://www.blogjava.net/yglwxl/archive/2007/09/19/146499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言宏定义技巧(转)</title><link>http://www.blogjava.net/yglwxl/archive/2007/09/12/144538.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Wed, 12 Sep 2007 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2007/09/12/144538.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/144538.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2007/09/12/144538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/144538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/144538.html</trackback:ping><description><![CDATA[<div class="postTitle">C语言宏定义技巧(转) </div>
<p align="left">
<table style="table-layout: fixed" border="0">
    <tbody>
        <tr>
            <td>写好C语言，漂亮的宏定义很重要，使用宏定义可以防止出错，提高可移植性，可读性，方便性&nbsp;等等。下面列举一些成熟软件中常用得宏定义。。。。。。 <br />
            <br />
            &nbsp; <br />
            <br />
            1，防止一个头文件被重复包含 <br />
            <br />
            #ifndef&nbsp;COMDEF_H <br />
            <br />
            #define&nbsp;COMDEF_H <br />
            <br />
            &nbsp;&nbsp;//头文件内容 <br />
            <br />
            #endif <br />
            <br />
            2，重新定义一些类型，防止由于各种平台和编译器的不同，而产生的类型字节数差异，方便移植。 <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Boolean&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            &nbsp; <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;long&nbsp;int&nbsp;&nbsp;uint32;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsigned&nbsp;32&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsigned&nbsp;16&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsigned&nbsp;8&nbsp;&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            &nbsp; <br />
            <br />
            typedef&nbsp;&nbsp;signed&nbsp;long&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;int32;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;32&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;signed&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;16&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;signed&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;8&nbsp;&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            &nbsp; <br />
            <br />
            &nbsp; <br />
            <br />
            //下面的不建议使用 <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsigned&nbsp;8&nbsp;&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;word;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsinged&nbsp;16&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dword;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsigned&nbsp;32&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            &nbsp; <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsigned&nbsp;8&nbsp;&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;uint2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsigned&nbsp;16&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;unsigned&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Unsigned&nbsp;32&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            &nbsp; <br />
            <br />
            typedef&nbsp;&nbsp;signed&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;8&nbsp;&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;signed&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;16&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;long&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;32&nbsp;bit&nbsp;value&nbsp;type.&nbsp;*/ <br />
            <br />
            &nbsp; <br />
            <br />
            typedef&nbsp;&nbsp;signed&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sint31;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;32&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;signed&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sint15;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;16&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            typedef&nbsp;&nbsp;signed&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sint7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Signed&nbsp;8&nbsp;&nbsp;bit&nbsp;value&nbsp;*/ <br />
            <br />
            &nbsp; <br />
            <br />
            3，得到指定地址上的一个字节或字 <br />
            <br />
            #define&nbsp;&nbsp;MEM_B(&nbsp;x&nbsp;)&nbsp;&nbsp;(&nbsp;*(&nbsp;(byte&nbsp;*)&nbsp;(x)&nbsp;)&nbsp;) <br />
            <br />
            #define&nbsp;&nbsp;MEM_W(&nbsp;x&nbsp;)&nbsp;&nbsp;(&nbsp;*(&nbsp;(word&nbsp;*)&nbsp;(x)&nbsp;)&nbsp;) <br />
            <br />
            4，求最大值和最小值 <br />
            <br />
            &nbsp;&nbsp;&nbsp;#define&nbsp;&nbsp;MAX(&nbsp;x,&nbsp;y&nbsp;)&nbsp;(&nbsp;((x)&nbsp;&gt;&nbsp;(y))&nbsp;?&nbsp;(x)&nbsp;:&nbsp;(y)&nbsp;) <br />
            <br />
            &nbsp;&nbsp;&nbsp;#define&nbsp;&nbsp;MIN(&nbsp;x,&nbsp;y&nbsp;)&nbsp;(&nbsp;((x)&nbsp;&lt;&nbsp;(y))&nbsp;?&nbsp;(x)&nbsp;:&nbsp;(y)&nbsp;) <br />
            <br />
            5，得到一个field在结构体(struct)中的偏移量 <br />
            <br />
            #define&nbsp;FPOS(&nbsp;type,&nbsp;field&nbsp;)&nbsp;\ <br />
            <br />
            /*lint&nbsp;-e545&nbsp;*/&nbsp;(&nbsp;(dword)&nbsp;&amp;((&nbsp;type&nbsp;*)&nbsp;0)-&gt;&nbsp;field&nbsp;)&nbsp;/*lint&nbsp;+e545&nbsp;*/ <br />
            <br />
            6,得到一个结构体中field所占用的字节数 <br />
            <br />
            #define&nbsp;FSIZ(&nbsp;type,&nbsp;field&nbsp;)&nbsp;sizeof(&nbsp;((type&nbsp;*)&nbsp;0)-&gt;field&nbsp;) <br />
            <br />
            7，按照LSB格式把两个字节转化为一个Word <br />
            <br />
            #define&nbsp;&nbsp;FLIPW(&nbsp;ray&nbsp;)&nbsp;(&nbsp;(((word)&nbsp;(ray)[0])&nbsp;*&nbsp;256)&nbsp;+&nbsp;(ray)[1]&nbsp;) <br />
            <br />
            8，按照LSB格式把一个Word转化为两个字节 <br />
            <br />
            #define&nbsp;&nbsp;FLOPW(&nbsp;ray,&nbsp;val&nbsp;)&nbsp;\ <br />
            <br />
            &nbsp;&nbsp;(ray)[0]&nbsp;=&nbsp;((val)&nbsp;/&nbsp;256);&nbsp;\ <br />
            <br />
            &nbsp;&nbsp;(ray)[1]&nbsp;=&nbsp;((val)&nbsp;&amp;&nbsp;0xFF) <br />
            <br />
            9，得到一个变量的地址（word宽度） <br />
            <br />
            #define&nbsp;&nbsp;B_PTR(&nbsp;var&nbsp;)&nbsp;&nbsp;(&nbsp;(byte&nbsp;*)&nbsp;(void&nbsp;*)&nbsp;&amp;(var)&nbsp;) <br />
            <br />
            #define&nbsp;&nbsp;W_PTR(&nbsp;var&nbsp;)&nbsp;&nbsp;(&nbsp;(word&nbsp;*)&nbsp;(void&nbsp;*)&nbsp;&amp;(var)&nbsp;) <br />
            <br />
            10，得到一个字的高位和低位字节 <br />
            <br />
            #define&nbsp;&nbsp;WORD_LO(xxx)&nbsp;&nbsp;((byte)&nbsp;((word)(xxx)&nbsp;&amp;&nbsp;255)) <br />
            <br />
            #define&nbsp;&nbsp;WORD_HI(xxx)&nbsp;&nbsp;((byte)&nbsp;((word)(xxx)&nbsp;&gt;&gt;&nbsp;8)) <br />
            <br />
            11，返回一个比X大的最接近的8的倍数 <br />
            <br />
            #define&nbsp;RND8(&nbsp;x&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((((x)&nbsp;+&nbsp;7)&nbsp;/&nbsp;8&nbsp;)&nbsp;*&nbsp;8&nbsp;) <br />
            <br />
            12，将一个字母转换为大写 <br />
            <br />
            #define&nbsp;&nbsp;UPCASE(&nbsp;c&nbsp;)&nbsp;(&nbsp;((c)&nbsp;&gt;=&nbsp;'a'&nbsp;&amp;&amp;&nbsp;(c)&nbsp;&lt;=&nbsp;'z')&nbsp;?&nbsp;((c)&nbsp;-&nbsp;0x20)&nbsp;:&nbsp;(c)&nbsp;) <br />
            <br />
            13，判断字符是不是10进值的数字 <br />
            <br />
            #define&nbsp;&nbsp;DECCHK(&nbsp;c&nbsp;)&nbsp;((c)&nbsp;&gt;=&nbsp;'0'&nbsp;&amp;&amp;&nbsp;(c)&nbsp;&lt;=&nbsp;'9') <br />
            <br />
            14，判断字符是不是16进值的数字 <br />
            <br />
            #define&nbsp;&nbsp;HEXCHK(&nbsp;c&nbsp;)&nbsp;(&nbsp;((c)&nbsp;&gt;=&nbsp;'0'&nbsp;&amp;&amp;&nbsp;(c)&nbsp;&lt;=&nbsp;'9')&nbsp;||\ <br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((c)&nbsp;&gt;=&nbsp;'A'&nbsp;&amp;&amp;&nbsp;(c)&nbsp;&lt;=&nbsp;'F')&nbsp;||\ <br />
            <br />
            ((c)&nbsp;&gt;=&nbsp;'a'&nbsp;&amp;&amp;&nbsp;(c)&nbsp;&lt;=&nbsp;'f')&nbsp;) <br />
            <br />
            15，防止溢出的一个方法 <br />
            <br />
            #define&nbsp;&nbsp;INC_SAT(&nbsp;val&nbsp;)&nbsp;&nbsp;(val&nbsp;=&nbsp;((val)+1&nbsp;&gt;&nbsp;(val))&nbsp;?&nbsp;(val)+1&nbsp;:&nbsp;(val)) <br />
            <br />
            16，返回数组元素的个数 <br />
            <br />
            #define&nbsp;&nbsp;ARR_SIZE(&nbsp;a&nbsp;)&nbsp;&nbsp;(&nbsp;sizeof(&nbsp;(a)&nbsp;)&nbsp;/&nbsp;sizeof(&nbsp;(a[0])&nbsp;)&nbsp;) <br />
            <br />
            17，返回一个无符号数n尾的值MOD_BY_POWER_OF_TWO(X,n)=X%(2^n) <br />
            <br />
            #define&nbsp;MOD_BY_POWER_OF_TWO(&nbsp;val,&nbsp;mod_by&nbsp;)&nbsp;\ <br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;(dword)(val)&nbsp;&amp;&nbsp;(dword)((mod_by)-1)&nbsp;) <br />
            <br />
            18，对于IO空间映射在存储空间的结构，输入输出处理 <br />
            <br />
            &nbsp;&nbsp;#define&nbsp;inp(port)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((volatile&nbsp;byte&nbsp;*)&nbsp;(port))) <br />
            <br />
            &nbsp;&nbsp;#define&nbsp;inpw(port)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((volatile&nbsp;word&nbsp;*)&nbsp;(port))) <br />
            <br />
            &nbsp;&nbsp;#define&nbsp;inpdw(port)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((volatile&nbsp;dword&nbsp;*)(port))) <br />
            <br />
            &nbsp;&nbsp; <br />
            <br />
            &nbsp;&nbsp;#define&nbsp;outp(port,&nbsp;val)&nbsp;&nbsp;&nbsp;(*((volatile&nbsp;byte&nbsp;*)&nbsp;(port))&nbsp;=&nbsp;((byte)&nbsp;(val))) <br />
            <br />
            &nbsp;&nbsp;#define&nbsp;outpw(port,&nbsp;val)&nbsp;&nbsp;(*((volatile&nbsp;word&nbsp;*)&nbsp;(port))&nbsp;=&nbsp;((word)&nbsp;(val))) <br />
            <br />
            &nbsp;&nbsp;#define&nbsp;outpdw(port,&nbsp;val)&nbsp;(*((volatile&nbsp;dword&nbsp;*)&nbsp;(port))&nbsp;=&nbsp;((dword)&nbsp;(val))) <br />
            <br />
            [2005-9-9添加]&nbsp; <br />
            <br />
            19,使用一些宏跟踪调试 <br />
            <br />
            A&nbsp;N&nbsp;S&nbsp;I标准说明了五个预定义的宏名。它们是： <br />
            <br />
            _&nbsp;L&nbsp;I&nbsp;N&nbsp;E&nbsp;_ <br />
            <br />
            _&nbsp;F&nbsp;I&nbsp;L&nbsp;E&nbsp;_ <br />
            <br />
            _&nbsp;D&nbsp;A&nbsp;T&nbsp;E&nbsp;_ <br />
            <br />
            _&nbsp;T&nbsp;I&nbsp;M&nbsp;E&nbsp;_ <br />
            <br />
            _&nbsp;S&nbsp;T&nbsp;D&nbsp;C&nbsp;_ <br />
            <br />
            如果编译不是标准的，则可能仅支持以上宏名中的几个，或根本不支持。记住编译程序 <br />
            <br />
            也许还提供其它预定义的宏名。 <br />
            <br />
            _&nbsp;L&nbsp;I&nbsp;N&nbsp;E&nbsp;_及_&nbsp;F&nbsp;I&nbsp;L&nbsp;E&nbsp;_宏指令在有关#&nbsp;l&nbsp;i&nbsp;n&nbsp;e的部分中已讨论，这里讨论其余的宏名。 <br />
            <br />
            _&nbsp;D&nbsp;AT&nbsp;E&nbsp;_宏指令含有形式为月/日/年的串，表示源文件被翻译到代码时的日期。 <br />
            <br />
            源代码翻译到目标代码的时间作为串包含在_&nbsp;T&nbsp;I&nbsp;M&nbsp;E&nbsp;_中。串形式为时：分：秒。 <br />
            <br />
            如果实现是标准的，则宏_&nbsp;S&nbsp;T&nbsp;D&nbsp;C&nbsp;_含有十进制常量1。如果它含有任何其它数，则实现是 <br />
            <br />
            非标准的。 <br />
            <br />
            可以定义宏，例如: <br />
            <br />
            当定义了_DEBUG，输出数据信息和所在文件所在行 <br />
            <br />
            #ifdef&nbsp;_DEBUG <br />
            <br />
            #define&nbsp;DEBUGMSG(msg,date)&nbsp;printf(msg);printf(&#8220;%d%d%d&#8221;,date,_LINE_,_FILE_) <br />
            <br />
            #else <br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;DEBUGMSG(msg,date)&nbsp; <br />
            <br />
            #endif <br />
            <br />
            &nbsp; <br />
            <br />
            20，宏定义防止使用是错误 <br />
            <br />
            用小括号包含。 <br />
            <br />
            例如：#define&nbsp;ADD(a,b)&nbsp;（a+b） <br />
            <br />
            用do{}while(0)语句包含多语句防止错误 <br />
            <br />
            例如：#difne&nbsp;DO(a,b)&nbsp;a+b;\ <br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a++; <br />
            <br />
            应用时：if(&#8230;.) <br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DO(a,b);&nbsp;//产生错误 <br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            <br />
            解决方法:&nbsp;#difne&nbsp;DO(a,b)&nbsp;do{a+b;\ <br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a++;}while(0) <br />
            </td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://www.blogjava.net/yglwxl/aggbug/144538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2007-09-12 16:55 <a href="http://www.blogjava.net/yglwxl/archive/2007/09/12/144538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C/C++ include预处理指示符 和 gcc的参数 -Idirname</title><link>http://www.blogjava.net/yglwxl/archive/2007/09/04/142619.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Tue, 04 Sep 2007 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2007/09/04/142619.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/142619.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2007/09/04/142619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/142619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/142619.html</trackback:ping><description><![CDATA[<p>&nbsp;<font face="Times New Roman" color="#000000" size="3">#include 头文件一般有两种格式<br />
一种是 &lt;&gt;&nbsp; 还有一种是"" <br />
如:<br />
&nbsp;#include &lt;iostream.h&gt;<br />
&nbsp;#include "myfile.h"</font></p>
<p><font face="Times New Roman" color="#000000" size="3">两者的区别在于:<br />
如果文件名用尖括号&lt;&gt;括起来,表示文件是一个标准头文件,查找过程会预定义目录.<br />
如果文件名用一对引号""括起来,表明文件是用户提供的头文件查找该文件时将从当前文件目录开始.</font></p>
<p><font face="Times New Roman" color="#000000" size="3">所以用标准头文件时用&lt;&gt;<br />
用自定义的头文件时用""<br />
<br />
关于gcc的参数 -Idirname<br />
-Idirname，将dirname所指出的目录加入到程序头文件目录列表中，是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶ <br />
A)#include <br />
B)#include &#8220;myinc.h&#8221; <br />
其中，A类使用尖括号(&lt; &gt;)，B类使用双引号(&#8220; &#8221;)。<br />
对于A类，预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件，<br />
而对于B类，cpp在当前目录中搜寻头文件，这个选项的作用是告诉cpp，如果在当前目录中没有找到需要的文件，就到指定的dirname目录中去寻找。在程序设计中，如果我们需要的这种包含文件分别分布在不同的目录中，就需要逐个使用-I选项给出搜索路径 <br />
</font></p>
 <img src ="http://www.blogjava.net/yglwxl/aggbug/142619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2007-09-04 14:36 <a href="http://www.blogjava.net/yglwxl/archive/2007/09/04/142619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>