关键词不能为空

当前您在: 主页 > 英语 >

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用法以及的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文