c 预处理 指令和c宏
9页1、C 预处理指令和C宏C预处理指令和C宏C语言程序在被编译成可执行文件时,也许你使用的IDE只需点击一下编译按钮,或者使用gcc编译器的,也是一条命令就完成了(当然使用命令时,会有些必须的参数)。但是真正实际情况,这个过程需要经历:预处理-编译-链接-装载。当然我们的编译器已经高度发达,将这些内容全部实现了。而预处理最长被我们使用一条指令是#include。我们用它来加载头文件。同时还会有些使用预处理指令的C宏或是编译条件等。一:首先先将C语言所有预处理指令简单介绍一下:1.#define指令:该条指令最常被用来定义符号常量或明显的常量,当然定一个类函数宏也是需要使用它的。每个#define行由三部分组成,第一部分是指令自身#define,第二部分是所选择的缩略语,这些缩略语称为宏(macro)。第三部分为宏替换的主体(或列表)。举例如下:#definePXprintf(xis%dn,x)#definePXprintf(xis%dn,x)预处理指令宏主体(替换列表)其中对于第二部分(宏)有如下要求:宏的名字中不能有空格,而且必须遵循C变量命名规则:只能使用字母、数字和下划线(_)而且第一
2、个字符不能为数字。同时要注意,对于所有预处理指令都是从开始到第一个换行符结束。#define指令的作用范围是从出现位置开始到文件结束。预处理器在处理时,将源文件中出现的宏用其主体做替换。而且这种替换是可嵌套的。这种嵌套替换举例如下:#defineTWO2#defineFOURTWO*TWO则FOUR将被做如下处理:第一次替换后变为:TWO*TWO,再次替换后变为2*2。在const关键字得到C的支持后,又提供了一种创建常量的灵活方法。使用const可以创建全局常量和局部常量、数字常量、数组常量和结构常量。对使用#define定义的符号常量可以被用来指定标准数组的大小,与const的简单举例类比。#defineLIMIT20constintLIM=50;staticintdata1LIMIT;/合法staticintdata2LIM;/无效constintLIM2=2*LIMIT;/合法constintLIM3=2*LIM;/无效在#define中使用参数。通过使用参数可以创建外形和作用都与函数相似的类函数宏。宏的参数也用圆括号括起来。举例如下:#defineMEANX,Y预处理指令宏(
3、X和Y为宏的参数)替换主体带参数的宏外形与函数非常相似,但是在使用时与真正的函数调用不完全相同。如果不能理解替换这种预处理形式很有可能出现意料之外的错误。见如下例子程序:/*mac_arg.c-macroswitharguments*/#includestdio.h#defineSQUARE(X)X*X#definePR(X)printf(Theresultis%d.n,X)intmain(void)intx=4;intz;printf(x=%dn,x);z=SQUARE(x);printf(EvaluatingSQUARE(x):);PR(z);z=SQUARE(2);printf(EvaluatingSQUARE(2):);PR(z);printf(EvaluatingSQUARE(x+2):);PR(SQUARE(x+2);printf(Evaluating100/SQUARE(2):);PR(100/SQUARE(2);printf(xis%d.n,x);printf(EvaluatingSQUARE(+x):);PR(SQUARE(+x);printf(Afterincrem
4、enting,xis%x.n,x);return0;使用gcc4.3.2编译后输出的结果如下:(在不同的编译器出现的结果可能不同)x=4EvaluatingSQUARE(x):Theresultis16.EvaluatingSQUARE(2):Theresultis4.EvaluatingSQUARE(x+2):Theresultis14.Evaluating100/SQUARE(2):Theresultis100.xis4.EvaluatingSQUARE(+x):Theresultis36.Afterincrementing,xis6.前两项的结果正确的但是接下来的则有些出乎意外。PR(SQUARE(x+2);时x值为4,那么x+2的SQUARE(x+2)时应该是6*6结果应该为36。而程序运行的结果则是14.如果你使用替换原则将SQUARE(x+2)替换则变为x+2*x+2这时x=4则计算结果正是14.要处理这种情况(优先级问题),可以采用对替换主题加圆括号保证优先级。最好参数本身也使用括号,保证优先级正确性。修改如下:#defineSQUARE(X)X*X之后的情况类似。特别指
《c 预处理 指令和c宏》由会员小**分享,可在线阅读,更多相关《c 预处理 指令和c宏》请在金锄头文库上搜索。
2020年高考真题——理科综合(全国卷Ⅲ)+Word版含答案
2021年绝味鸭脖策划书
2021年熟食店创业方案
2021年熟食店开店策划
2021年卤菜店创业计划书
2021年周黑鸭网络营销策划方案
东大21年1月考试《现代设计方法》考核作业
谈我国行政管理效率的现状及其改观对策(论文)
单证员考试-备考辅导-复习资料:无贸易背景信用证案分析.docx
土木工程毕业生答辩自述.docx
建筑学毕业后工作状态真实写照.doc
C#代码规范(湖南大学).doc
xx区食药监局2019年工作总结及2020年工作计划
2019年中医院药物维持治疗门诊工人先锋号先进事迹
2019年度xx乡镇林长制工作总结
2019年性艾科工作计划书
2019年人才服务局全国扶贫日活动开展情况总结
关于组工信息选题的几点思考
摘了穷帽子 有了新模样
2019年某集团公司基层党支部书记培训班心得体会
2024-03-21 40页
2024-03-21 32页
2024-03-21 44页
2024-03-13 36页
2024-03-13 12页
2024-03-13 15页
2024-03-13 35页
2024-03-04 55页
2024-03-04 57页
2024-03-04 137页