- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用括号避免出错 替代正文各参数和整段应括起,避免出错。例如 #define SQUARE(x) x * x 在特定环境下可能出问题, 例如 z = SQUARE(a + b); 展开后变成 z = a + b * a + b; 明显错了 慎重使用宏展开 注意,宏展开可能会引起多次计算带来意外的很难发现的错误,要慎重使用 #define MIN(A,B) ((A)(B)?(A):(B)) z = ((n++) (m++)?(n++):(m++)); 宏替换 预处理前的源代码 预处理后的程序代码 z = MIN(n++, m++); 3. 宏名字定义 #define 标识符 定义一个标识符,告诉预编译器定义了这样的名字。通过判定是否存在某宏名,配合#if, #ifdef, #ifndef等实现一些特定编译预处理目的 如设LabFunctions.h中有如下代码 #ifndef LABFUNCTIONS_H_ #define LABFUNCTIONS_H_ … #endif 判定是否曾定义过LABFUNCTIONS_H_ 如果没有定义过,则定义一个这样的标识符 目的:避免头文件的重复包含以免产生问题 4. #undef与defined 宏定义可以取消,语法 #undef 宏名字 功能:取消已有宏名字定义 特殊谓词defined,使用形式 defined 标识符 defined(标识符) 当标识符是有定义的宏名字时,defined(标识符) 得到1,否则得0 5. 说明 带参宏的展开可避免函数调用开销,但将使最终的源程序变长。 复杂宏定义展开后出错很难定位。 应谨慎使用(尽量少使用)宏。 写宏定义的常见错误是在定义行最后写分号。该分号将被代入程序,有可能引起语法错误。 宏定义从定义处起作用直到文件结束。 一个文件里不允许对同一宏名字重复定义。 * 1.宏名一般都用大写字母表示,以区别于变量; 2.宏定义只是替代,减少了在程序中书写的工作量,只是一个简单的代替,不作语法检查; 3.宏定义不是语句,不必再其后加上“;”; 4.在宏定义中可以进行多层的替代. #definre R 3.0 #define PI 3.1415 #define L 2*PI*R #define S PI*R*R main(){printf(“L=%f\nS=%f\n”, L, S);} * 例 #includestdio.h #define PI 3.1415 #define S(r) PI*r*r int main() { double a, area; a = 3.6; area = S(a); printf(“r=%f\narea=%f\n”, a, area); return 0; } * 例 #include stdio.h #define M 3 #define N M+2 #define S(N) N*N*N int main() { printf(%d\n,S(N)); return 0; } 运行结果为:17 四、条件编译命令 * 条件编译 一、引入条件编译的原因: 只对源程序中满足条件的部分内容进行编译。 可以减少被编译的语句,从而减少目标程序的长度。 二、定义形式: * 程序段可以是语句串,也可以是命令行 方式3为嵌套定义 方式2: #if 整型表达式 程序段1 #else 程序段2 #endif 方式1: #if 整型表达式 程序段1 #endif 方式3: #if 整型表达式 程序段1 #elif 整型表达式 程序段2 #elif 整型表达式 程序段3 …… #else 程序段n #endif * #ifdef 标识符 相当于 #if defined(标识符) #ifndef 标识符 相当于 #if !defined(标识符) 方式4: #ifdef 标识符 程序段1 #else 程序段2 #endif 方式5: #ifndef 标识符 程序段1 #else 程序段2 #endif * #define COMPUTER_A 1 #ifdef COMPUTER_A #define INTEGER_SIZE 16 #else #define INTEGER_SIZE 20 #endif #define DEBUG 1 #ifdef DEBUG printf(“x=%d,y=%d,z=%d\n”, x, y, z); #endif 预处理后只剩下#define INTEGER_SIZE 16参与编译 预处理后printf参与编译,若不在希望编译printf得到输出,则删除#define DEBUG 1命令行。 *
您可能关注的文档
最近下载
- 学术资源利用与检索思维学堂在线期末考试答案.docx VIP
- 《土石坝渗流计算分析过程案例综述》2100字.docx
- 安徽省合肥高新区2024-2025学年度第一学期期末质量抽测九年级语文试卷(文字版,含答案).docx VIP
- 2025年贵州省贵阳市辅警招聘公安基础知识考试题库及答案.docx VIP
- 变脸表演专业知识培训课件.pptx
- 投标项目总体架构及技术解决方案.docx VIP
- 鱼类养殖学 第九章 活鱼运输(2学时).ppt
- JB∕T 9054-2015 离心式除尘器.pdf VIP
- 05SG522钢与混凝土组合楼(屋)盖结构构造(OCR).pdf VIP
- D-L 5068-2014 发电厂化学设计规范(高清可复制).pdf VIP
原创力文档


文档评论(0)