您的位置:首页 > 编程语言 > C语言/C++

c++基础(3.5)预处理:宏、文件包含、条件编译

2018-03-05 21:57 567 查看
宏定义相关注意点
1.不带参数的宏定义:
(1)宏名一般用大写(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义(3)可以用#undef命令终止宏定义的作用域(4)宏定义可以嵌套2.带参数的宏定义:
(1)实参如果是表达式容易出问题#define S(r) r*rarea=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;正确的宏定义#define S(r) ((r)*(r))(2)宏名和参数的括号间不能有空格(3)宏替换只作替换,不做计算,不做表达式求解(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存(5)宏的哑实结合不存在类型,也没有类型转换。(程的引用就是调用一个过程。建立过程的目的就是建立可多次重复执行的程序段,以便多次调用它们。通常过程是带有参数的,在Fortran中把参数称为变元(实元或哑元),过程定义中的变元是哑元,过程引用中的变元是实元。在调用过程时,要用实元代替哑元,这就是哑实结合。
哑实结合必须遵循三个一致的原则,否则运行出错:哑元与实元位置一致;哑元与实元个数一致;哑元与实元类型一致。这就要求记住每个哑元的名及其位置,阅读实元表时对其中每个表达式要追溯到它原来的哑元是什么,非常不便,为此F90可以通过如下方法放宽这三个一致的原则:用关键字变元放宽位置一致;用可选择变元放宽个数一致;用类属过程放宽类型一致。)
(6)宏展开(预处理(预编译)工作)使源程序变长,函数调用不会(7)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
文件包含相关注意点
    (1)编译时以包含处理以后的文件为编译单位,被包含的文件是源文件的一部分。
(2)文件1包含文件2,文件2用到文件3,则文件3的包含命令#include应放在文件1的头部第一行;(3)包含可以嵌套;(4)<文件名>称为标准方式,系统到头文件目录查找文件,"文件名"则先在当前目录查找,而后到头文件目录查找;(5)被包含文件中的静态全局变量不用在包含文件中声明。
条件编译
有些语句希望在条件满足时才编译。格式:(1)#ifdef 标识符程序段1#else程序段2#endif或#ifdef程序段1#endif当标识符已经定义时,程序段1才参加编译。格式:(2)#ifndef 标识符#define 标识1程序段1#endif如果标识符没有被定义,则重定义标识1,且执行程序段1。格式:(3)#if 表达式1程序段1#elif 表达式2程序段2……#elif 表达式n程序段n#else程序段n+1#endif当表达式1成立时,编译程序段1,当不成立时,编译程序段2。使用条件编译可以使目标程序变小,运行时间变短。预编译使问题或算法的解决方案增多,有助于我们选择合适的解决方案。此外,还有布局控制:#pragma,这也是我们应用预处理的一个重要方面,主要功能是为编译程序提供非常规的控制流信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐