预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C语言的宏定义分析 C语言的宏定义分析 引导语:你了解C语言吗,知道C语言的宏定义是什么吗,以下是百分网小编分享给大家的C语言的宏定义分析,欢迎阅读! C语言中,预处理器功能: 1.#include<>or""的头文件替换 2.#define对象替换(object-like) 对象替换以第一个空格为分割,之后的'为replacementtokenlist 3.#define()函数替换(function-like) 函数替换()之间不能有任何空白符。但是调用的时候可以在之间有空格。 函数替换的时候需要注意参数表的优先级和类型。如果替换块中需要用--';'是,用do{}while(0)封装, 另外注意宏定义末尾不能有';'否则if-else语句的时候容易出错。 4#ifdefine等条件编译选项 宏定义中比较容易搞错的是##与#的使用。 ##是连接两个参数, #defineMYCASE(item,id)\ caseid:\ item##_##id=id;\ break switch(x){ MYCASE(widget,23); } MYCASE(widget,23);被扩展为 case23: widget_23=23; break; #是把参数变为字符串 #defineQUOTEME(x)#x printf("%s\n",QUOTEME(1+2)); 替换后==> printf("%s\n","1+2"); 在使用##与#的时候,如果想使宏一定的参数也被宏替换(使用其值) 而不是参数名字被使用,应该使用间接访问的方式。 下面是两个例子: ----------------------------------------------------------------------------------------------------------- enum{ OlderSmall=0, NewerLarge=1 }; #defineOlderNewer #defineSmallLarge #define_replace_1(Older,Small)Older##Small #define_replace_2(Older,Small)_replace_1(Older,Small) voidprintout(void) { //_replace_1(Older,Small)becomesOlderSmall(notNewerLarge), //despitethe#definecallsabove. printf("Check1:%d\n",_replace_1(Older,Small)); //Theparametersto_replace_2aresubstitutedbeforethecall //to_replace_1,sowegetNewerLarge. printf("Check2:%d\n",_replace_2(Older,Small)); } resultsis: Check1:0 Check2:1 ----------------------------------------------------------------------------- #defineFOObar #defineQUOTEME_(x)#x #defineQUOTEME(x)QUOTEME_(x) thecode printf("FOO=%s\n",QUOTEME(FOO)); 扩展后==> printf("FOO=%s\n","bar");