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

C语言预处理指令笔记 by STP

2015-12-01 18:14 357 查看
预处理是C语言的一个重要功能, 它由预处理程序负责完成。当对一个源文件进行编译时, 系统自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译。

C语言提供了多种预处理功能,如宏定义文件包含
条件编译
等。合理使用预处理功能可令程序便于阅读、修改、 移植和调试,也有利于模块化程序设计。

为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号(;)

预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件。


1.宏定义 #define

不带参数格式:
#define ABC 23


作用:编译时将源程序中的ABC替换成23,常用来定义常量。

带参数格式:
#define AVG(a,b) (((a)+(b))/2)


作用:AVG(3,5),(((3)+(5))/2),输出结果为:4;

      类似于函数,但不涉及储存空间分配,参数类型匹配,参数传递,返回值等问题,在编译预处理阶段执行,比函数效率更高。

使用习惯注意:宏一般用大写字母,以便与变量名区分开来;

            使用带参数的宏注意将参数计算结果用括号包起来,确保计算结果正确




2.条件编译 #if、#elif、#else、#endif

格式:

#if 条件1
code1
#elif 条件2
code2
#else 条件3
code3
#endif


使用习惯注意:#if 和 #elif 后面的条件一般为而不是判断变量,因为条件编译是在编译之前做的判断,宏定义也是编译之前定义的,而变量是
            在运行时才产生的、才有使用的意义;

 
          条件编译结束后一定要加#endif;

 
          #if defined(),#if !defined()判断是否定义过某个宏;

 
          #ifdef 等同于#if defined(), #ifndef等同于#if
!defined() ;

 
          条件编译与宏结合使用可用于iOS版本适配

 


3.文件包含 #include



格式1:

#include <xxx.h>
<div style="color: rgb(51, 51, 51); font-family: 'courier new', courier; font-size: 14px; line-height: 25.2000007629395px; margin: 0px; padding: 0px; background-color: rgb(254, 254, 242);">格式2:</div><div style="color: rgb(51, 51, 51); font-family: 'courier new', courier; font-size: 14px; line-height: 25.2000007629395px; margin: 0px; padding: 0px; background-color: rgb(254, 254, 242);"><pre name="code" class="objc">#include "xxx.h"



作用:将一个文件的全部内容copy到另一个文件中

     使用#include容易引起重复包含文件,降低编译效率,可结合条件编译#ifndef使用,避免重复包含(一般OC中使用#import解决该问题,这      里稍作了解就可以了)
      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息