关键词不能为空

当前您在: 主页 > 英语 >

define用法以及

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 08:39
tags:

-

2021年2月28日发(作者:十二的英文)


#define


用法以及


#define



typedef


区别



1.


简单的


define


定义



#define MAXTIME 1000



的“函数定义”



define


可以像函数那样接受一些参数,如下


#define max(x,y) (x)>(y)?(x):(y);



因为这个“函数”没有类 型检查,就好像一个函数模板似的,没有模板那么安全就是了。



但是这样做的话存在隐患,例子如下:



#define Add(a,b) a+b;


如果遇到如:


c * Add(a,b) * d


的时候就会出现问题。



另外举一个例子:



#define pin (int*);


pin a,b;


本意是


a



b


都是

< p>
int


型指针,但是实际上变成


int* a,b;


a



int


型指针,而


b



int


型变量。



这时应该使用

typedef


来代替


define


,这样


a



b


就都是


int


型指针了。



我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。



3.


宏的单行定义(少见用法)



#define A(x) T_##x


#define B(x) #@x


#define C(x) #x



我们假设:


x=1


,则有:

< br>


A(1)------



T_1


B(1)------



'1'


C(1)------



< br>



的多行定义



define


可以替代多行的代码,例如


MFC


中的宏定义(非常的经典,虽然让人看了恶心)



#define MACRO(arg1, arg2) do {


/* declarations */


stmt1;


stmt2;


/* ... */


} while(0) /* (no trailing ) */

< p>
关键是要在每


一个换行的时候加上一个


< p>



5.


在大规模的开发 过程中,特别是跨平台和系统的软件里,


define


最重要的 功


能是


条件编译



就是:



#ifdef WINDOWS


......


......


#endif


#ifdef LINUX


......


......


#endif



可以在编译的时候通过


#define


设置编译环境。



6.


如何定义宏、取消宏



#define [MacroName] [MacroValue] //


定义宏



#undef [MacroName] //


取消宏



#define PI (3.1415926) //


普通宏



#define max(a,b) ((a)>(b)? (a),(b)) //


带参数的宏



7.


条件编译



#ifdef XXX


?


(#else)


?


#endif


例如



#ifdef DV22_AUX_INPUT


#define AUX_MODE 3


#else


#define AUY_MODE 3


#endif


#ifndef XXX


?


(#else)


?


#endif



8.



防止一个头文件被重复包含



由于头文 件包含可以嵌套,那么


C


文件就有可能多次包含同一个头文件, 就可能出现重复定义的问题的。



通过条件编译开关来避免重复包含(重复定义)



例如



#ifndef __headerfileXXX__


#define __headerfileXXX__


?



//


文件内容



?



#endif





Instances




1.


防止一个头文件被重复包含



#ifndef COMDEF_H



#define COMDEF_H



//


头文件内容



#endif



当你所建的工程有多个 源文件组成时,很可能会在多个文件里头包含了同一个头文件,如果借用上面的宏


定义就 能够避免同一个头文件被重复包含时进行多次编译。因为当它编译第一个头文件时总是没有定义

< br>#d


efine COMDEF_H


,那么它将编译一遍 头文件中所有的内容,包括定义


#define COMDEF_H

。这样编译再往下


进行时如果遇到同样要编译的头文件,那么由于语句


#ifndef COMDEF_H


的存在它将不再重复的编译这个头


文件。



2.


重新定 义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节


数差异,方便移植。



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 */



3.


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



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



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



4.


求最大值和最小值



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



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


-


-


-


-


-


-


-


-



本文更新与2021-02-28 08:39,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/679951.html

define用法以及的相关文章