C预处理器
使用预处理的二大原因:1是,由于写程序时可能将某个特定数量在程序中出现的所有实例统统加以修改。我们希望能够通过程序中只改动一处数值,然后重新编译就可以实现。预处理器可以做到这一点。
2 大多数C语言实现在函数调用时都会带来重大的系统开销。因此,我们也许希望有这样一种程序块,它看上去像一个函数,但却没有函数调用的开销。举例来说getchar,putchar 经常被实现为宏,以避免在每次执行输入或输出一个字符这样简单的操作时,都要调用相应的函数而造成系统效率的下降。
预处理器指令从#号开始,到其后第一个换行符为止。预处理器不进行计算,它只是按照指令进行文字替换操作
带参数的宏
#include#define ABS(x) x>0?x:-x#define ABS1(x) (x)>0?(x):-(x)#define ABS2(x) ((x)>0?(x):-(x))int main(void){ int a=1; int b=4; printf("The value =%d /n",ABS(a-b)); printf("The value =%d /n",ABS1(a-b)); int c =4; int d=1; printf("The value =%d /n",ABS1(c-d)-1); printf("The value =%d /n",ABS2(c-d)-1); return 0;}结果:The value =-5 The value =3 The value =3 The value =2
#运算符
#include#define PSQR(x) printf("The square of "#x" is %d /n",((x)*(x)))int main(void){ int y =5; PSQR(y); PSQR(2+4); return 0;}结果:The square of y is 25 The square of 2+4 is 36
可变宏:... 和__VA_ARGS__
#include#include #define PR(X,...) printf("Message " #X":"__VA_ARGS__)int main(void){ double x =48; double y; y=sqrt(x); PR(1,"X=%g/n",x); PR(2,"X=%.2f,y=%.4f/n",x,y); return 0; }编译时:Gcc variadic.c –lm结果:Message 1:X=48Message 2:X=48.00,y=6.9282注意:省略号只能代替最后的参数。
预定义宏
#includevoid why_me();int main(void){ printf("The file is %s./n",__FILE__); printf("The date is %s./n",__DATE__); printf("The time is %s./n",__TIME__); //printf("The version is %ld./n",__STDC_VERSION__); printf("This is line %d./n",__LINE__); printf("This function is %s/n",__func__); why_me(); return 0;}void why_me(){ printf("This function is %s./n",__func__); printf("This is line %d./n",__LINE__);}结果:The file is predef.c.The date is Dec 13 2013.The time is 22:52:07.This is line 10.This function is mainThis function is why_me.This is line 18.
>更多相关文章
- 09-29如何通过wrap malloc定位C/C++程序的内存泄漏
- 02-25打车软件大战升级,补贴还能维持多久?
- 12-23BMP文件右旋90度[c语言]
- 12-23寻找直方图中面积最大的矩形(C语言版)
- 12-23[ndk,2]ndk开发案例和错误处理
- 12-23[ndk,1]ndk开发,C语言入门讲解
- 12-23C语言连续存储实现队列机制
- 12-23Objective-c 数据类型
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复
相关文章
24小时热门资讯
24小时回复排行
热门推荐
最新资讯
操作系统
黑客防御