关键词不能为空

当前您在: 主页 > 英语 >

#define 用法大全

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

-

2021年2月28日发(作者:wonder)



#define


用法集锦

[


修正版


]


Definitio n[


定义


]




The #define Directive


You can use the #define directive to give a meaningful name to a


constant in your program. The two forms of the syntax are:


Syntax


#define identifier token-stringopt


#define identifier[( identifieropt, ... , identifieropt )] token-stringopt


Usag e[


用法


]




1.


简单的


define


定义



#define MAXTIME 1000


一个简单的


MAXTIME


就定义好 了,它代表


1000


,如果在程序里面写



if(i


编译器在处理这个代码乊前会对


MAXTIME


迚行处理替换为


1000




这样的定义看起来类似于普通的常量定义


CONST

< p>
,但也有着不同,因为


define


的定义更像是简单的文本



替换,而不 是作为一个量来使用,这个问题在下面反映的尤为突出。






函数定义


”< /p>



define


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



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

< p>
这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函 数模



板似的,当然,它绝对没有模板那么安全就是了。可以作 为一个简单的模板来使用而已。



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



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


在一般使用的时候是没有问题的,但是如果遇到如:


c * Add(a,b) * d


的时候就会出现问题,代数式的本意




a+b


然后去和

< br>c



d


相乘,但是因为使用了


define


(它只是一个简单的替换),所以式子实际上变成 了



c*a + b*d


另外举一个例子:



#define pin (int*);


pin a,b;


本意是


a



b


都是


int


型指针,但是实际上变成


int* a,b;


a



int


型指针,而


b



int


型变量。



这是应该使用


typedef


来代替


define


,这样


a



b


就都是


int


型指针了。





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



3.1


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



#define A(x) T_##x


#define B



x) #@x


#define C



x) #x


我们假设:


x=1


,则有:



A(1)------



T_1


B(1)------



'1'


C(1)------



< br>(这里参考了


hustli


的文章)



3.2 define


的多行定义



define


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


MFC


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



#define MACRO(arg1, arg2) do {


/* declarations */


stmt1;


stmt2;


/* ... */


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

< p>
关键是要在每一个换行的时候加上一个



4.


条件编译



在大规模开収,

< br>特别是跨平台和系统的软件里,


define


最重要的功 能是条件编译。



就是:



#ifdef WINDOWS


......


......


#endif


#ifdef LINUX


......


......


#endif


可以在编译的时候通过


#define


设置编译环境



5.


如何定义宏、取消宏



//


定义宏



#define [MacroName] [MacroValue]


//


取消宏



#undef [MacroName]


//


普通宏



#define PI (3.1415926)


带参数的宏





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


关键是十分容易产生错误,包括机器和人理解上的差异等等。



6.


条件编译



#ifdef XXX




(#else)




#endif


例如



#ifdef DV22_AUX_INPUT


#define AUX_MODE 3


#else


#define AUY_MODE 3


#endif


#ifndef XXX




(#else)




#endif


7.


头文件

< p>
(.h)


可以被头文件或


C


文件包含;



重复包含(重复定义)



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


C


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



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



例如



#ifndef __headerfileXXX__


#define __headerfileXXX__




//


文件内容





#endif

< br>Instances[


实例


]




1


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



#ifndef COMDEF_H


#define COMDEF_H


//


头文件内容



#endif


2


、重新定义一些类型



防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。



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


-


-


-


-


-


-


-


-



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

#define 用法大全的相关文章