??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美日韩一区,国产三级视频在线看,国产乱子伦精品http://www.aygfsteel.com/yglwxl/category/25566.htmlzh-cnSun, 23 Sep 2007 13:55:08 GMTSun, 23 Sep 2007 13:55:08 GMT60typedef 的两U用??http://www.aygfsteel.com/yglwxl/archive/2007/09/19/146499.html九宝九宝Wed, 19 Sep 2007 07:23:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2007/09/19/146499.htmlhttp://www.aygfsteel.com/yglwxl/comments/146499.htmlhttp://www.aygfsteel.com/yglwxl/archive/2007/09/19/146499.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/146499.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/146499.html 从而达C码简? 促进跨^台开发的目的.
下面是typedef的最l常的用?

typedef struct{
  int a;
  int b;
}MY_TYPE;

q里把一个未命名l构直接取了一个叫MY_TYPE的别? q样如果你想定义l构的实例的时候就可以q样:
MY_TYPE tmp;

q是typedef的第一U用? 比较? 是 typedef 原变量类?别名
怼的例?
typedef  unsigned long DWORD;  无符号长?br /> typedef void far       *LPVOID; //void far *是原变量cd, 表示一个void 型指?far ?2位系l里面已l没有意义了)
{等

typedefq有W二U用? 可能q种用法初学者没有接触过.
比如:
typedef int (*MYFUN)(int, int);
q种用法一般用在给函数定义别名的时?(其实质还是和上面的用法一L)
上面的例子定义MYFUN 是一个函数指? 函数cd是带两个int 参数, q回一个int

在分析这UŞ式的定义的时候可以用下面的方?
先去掉typedef 和别? 剩下的就是原变量的类?
比如上面的例?
Ltypedef和MYFUN以后剩:
int (*)(int, int)

M我前面一N面讨论的 <<l说如何定一个变量的cd>>的朋友应该很Ҏ得个类型指的时?
一个函数指? 函数cd是带两个int 参数, q回一个int


九宝 2007-09-19 15:23 发表评论
]]>
C语言宏定义技??http://www.aygfsteel.com/yglwxl/archive/2007/09/12/144538.html九宝九宝Wed, 12 Sep 2007 08:55:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2007/09/12/144538.htmlhttp://www.aygfsteel.com/yglwxl/comments/144538.htmlhttp://www.aygfsteel.com/yglwxl/archive/2007/09/12/144538.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/144538.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/144538.htmlC语言宏定义技??

写好C语言Q漂亮的宏定义很重要Q用宏定义可以防止出错Q提高可UL性,可读性,方便?nbsp;{等。下面列举一些成熟Y件中常用得宏定义。。。。。?

 

1Q防止一个头文g被重复包?

#ifndef COMDEF_H

#define COMDEF_H

  //头文件内?

#endif

2Q重新定义一些类型,防止׃各种q_和编译器的不同,而生的cd字节数差异,方便UL?

typedef  unsigned char      boolean;     /* Boolean value type. */

 

typedef  unsigned long int  uint32;      /* Unsigned 32 bit value */

typedef  unsigned short     uint16;      /* Unsigned 16 bit value */

typedef  unsigned char      uint8;       /* Unsigned 8  bit value */

 

typedef  signed long int    int32;       /* Signed 32 bit value */

typedef  signed short       int16;       /* Signed 16 bit value */

typedef  signed char        int8;        /* Signed 8  bit value */

 

 

//下面的不使用

typedef  unsigned char     byte;         /* Unsigned 8  bit value type. */

typedef  unsigned short    word;         /* Unsinged 16 bit value type. */

typedef  unsigned long     dword;        /* Unsigned 32 bit value type. */

 

typedef  unsigned char     uint1;        /* Unsigned 8  bit value type. */

typedef  unsigned short    uint2;        /* Unsigned 16 bit value type. */

typedef  unsigned long     uint4;        /* Unsigned 32 bit value type. */

 

typedef  signed char       int1;         /* Signed 8  bit value type. */

typedef  signed short      int2;         /* Signed 16 bit value type. */

typedef  long int          int4;         /* Signed 32 bit value type. */

 

typedef  signed long       sint31;       /* Signed 32 bit value */

typedef  signed short      sint15;       /* Signed 16 bit value */

typedef  signed char       sint7;        /* Signed 8  bit value */

 

3Q得到指定地址上的一个字节或?

#define  MEM_B( x )  ( *( (byte *) (x) ) )

#define  MEM_W( x )  ( *( (word *) (x) ) )

4Q求最大值和最?

   #define  MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )

   #define  MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )

5Q得C个field在结构体(struct)中的偏移?

#define FPOS( type, field ) \

/*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */

6,得到一个结构体中field所占用的字节数

#define FSIZ( type, field ) sizeof( ((type *) 0)->field )

7Q按照LSB格式把两个字节{化ؓ一个Word

#define  FLIPW( ray ) ( (((word) (ray)[0]) * 256) + (ray)[1] )

8Q按照LSB格式把一个Word转化Z个字?

#define  FLOPW( ray, val ) \

  (ray)[0] = ((val) / 256); \

  (ray)[1] = ((val) & 0xFF)

9Q得C个变量的地址Qword宽度Q?

#define  B_PTR( var )  ( (byte *) (void *) &(var) )

#define  W_PTR( var )  ( (word *) (void *) &(var) )

10Q得C个字的高位和低位字节

#define  WORD_LO(xxx)  ((byte) ((word)(xxx) & 255))

#define  WORD_HI(xxx)  ((byte) ((word)(xxx) >> 8))

11Q返回一个比X大的最接近?的倍数

#define RND8( x )       ((((x) + 7) / 8 ) * 8 )

12Q将一个字母{换ؓ大写

#define  UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

13Q判断字W是不是10q值的数字

#define  DECCHK( c ) ((c) >= '0' && (c) <= '9')

14Q判断字W是不是16q值的数字

#define  HEXCHK( c ) ( ((c) >= '0' && (c) <= '9') ||\

                       ((c) >= 'A' && (c) <= 'F') ||\

((c) >= 'a' && (c) <= 'f') )

15Q防止溢出的一个方?

#define  INC_SAT( val )  (val = ((val)+1 > (val)) ? (val)+1 : (val))

16Q返回数l元素的个数

#define  ARR_SIZE( a )  ( sizeof( (a) ) / sizeof( (a[0]) ) )

17Q返回一个无W号数n值MOD_BY_POWER_OF_TWO(X,n)=X%(2^n)

#define MOD_BY_POWER_OF_TWO( val, mod_by ) \

           ( (dword)(val) & (dword)((mod_by)-1) )

18Q对于IOI间映射在存储空间的l构Q输入输出处?

  #define inp(port)         (*((volatile byte *) (port)))

  #define inpw(port)        (*((volatile word *) (port)))

  #define inpdw(port)       (*((volatile dword *)(port)))

  

  #define outp(port, val)   (*((volatile byte *) (port)) = ((byte) (val)))

  #define outpw(port, val)  (*((volatile word *) (port)) = ((word) (val)))

  #define outpdw(port, val) (*((volatile dword *) (port)) = ((dword) (val)))

[2005-9-9d] 

19,使用一些宏跟踪调试

A N S I标准说明了五个预定义的宏名。它们是Q?

_ L I N E _

_ F I L E _

_ D A T E _

_ T I M E _

_ S T D C _

如果~译不是标准的,则可能仅支持以上宏名中的几个Q或Ҏ不支持。记住编译程?

也许q提供其它预定义的宏名?

_ L I N E _及_ F I L E _宏指令在有关# l i n e的部分中已讨论,q里讨论其余的宏名?

_ D AT E _宏指令含有Ş式ؓ??q的Ԍ表示源文件被译C码时的日期?

源代码翻译到目标代码的时间作Z包含在_ T I M E _中。串形式为时Q分Q秒?

如果实现是标准的Q则宏_ S T D C _含有十进制常?。如果它含有M其它敎ͼ则实现是

非标准的?

可以定义宏,例如:

当定义了_DEBUGQ输出数据信息和所在文件所在行

#ifdef _DEBUG

#define DEBUGMSG(msg,date) printf(msg);printf(“%d%d%d”,date,_LINE_,_FILE_)

#else

      #define DEBUGMSG(msg,date) 

#endif

 

20Q宏定义防止使用是错?

用小括号包含?

例如Q?define ADD(a,b) Qa+bQ?

用do{}while(0)语句包含多语句防止错?

例如Q?difne DO(a,b) a+b;\

                   a++;

应用Ӟif(….)

          DO(a,b); //产生错误

        else

        

解决Ҏ: #difne DO(a,b) do{a+b;\

                   a++;}while(0)



九宝 2007-09-12 16:55 发表评论
]]>
C/C++ include预处理指C符 ?gcc的参?-Idirnamehttp://www.aygfsteel.com/yglwxl/archive/2007/09/04/142619.html九宝九宝Tue, 04 Sep 2007 06:36:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2007/09/04/142619.htmlhttp://www.aygfsteel.com/yglwxl/comments/142619.htmlhttp://www.aygfsteel.com/yglwxl/archive/2007/09/04/142619.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/142619.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/142619.html #include 头文件一般有两种格式
一U是 <>  q有一U是""
?
 #include <iostream.h>
 #include "myfile.h"

两者的区别在于:
如果文g名用括?lt;>括v?表示文g是一个标准头文g,查找q程会预定义目录.
如果文g名用一对引?"括v?表明文g是用h供的头文件查找该文g时将从当前文件目录开?

所以用标准头文件时?lt;>
用自定义的头文g时用""

关于gcc的参?-Idirname
-IdirnameQ将dirname所指出的目录加入到E序头文件目录列表中Q是在预~译q程中用的参数。CE序中的头文件包含两U情况∶
A)#include
B)#include “myinc.h”
其中QAcM用尖括号(< >)QBcM用双引号(“ ”)?br /> 对于Ac,预处理程序cpp在系l预讑֌含文件目??usr/include)中搜ȝ应的文gQ?br /> 而对于Bc,cpp在当前目录中搜寻头文Ӟq个选项的作用是告诉cppQ如果在当前目录中没有找到需要的文gQ就到指定的dirname目录中去L。在E序设计中,如果我们需要的q种包含文g分别分布在不同的目录中,需要逐个使用-I选项l出搜烦路径



九宝 2007-09-04 14:36 发表评论
]]>
վ֩ģ壺 | | ٲ| | ׯ| | | | | ɽʡ| ¬| | Ϫ| | | | ͼƬ| г| ݰ| | ȳ| | | ɽ| ̽| | | | | | | | | | | ͨ| | ۩| | | |