C语言预处理指令
2016-01-05 16:33
239 查看
预处理指令简介
1、C语言在对源程序进行编译之前,会先对一些特殊的预处理指令做解释,产生一个新的源程序(这个过 程叫 做预编译处理),之后再进行通常的编译。
2、为了区分预处理指令和一般c语言的语句,所有预处理指令都以"#"开头,并且结尾不用封号
3、预处理指令可能出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能 将预处理指令写在源程序的开头,这种情况下,它的作用范围就是整个源程序文件。
4、C语言提供的预处理指令主要由:宏定义、文件包含、条件编译。
一、宏定义
宏定义包括两种:有参数和没参数
#define NUM 6
#define sum (a,b) ( (a)*(b) ) //相当于一个函数,返回a*b
注意:1、宏定义带参数时一定要把参数用括号括起来,不然很容易出错。因为宏定义就是单纯的字符替换 (没有类型检测),如 果括号用的不正确,计算的优先级很容易出错。
2、宏定义是在编译之前替换,而函数实在程序运行时调用, 所以宏定义效率要比函数高
宏定义可以出现在程序的任何地方,从他出现的位置开始起作用,一般用来定义常量。
二、条件编译
情况一:满足条件后会把对应的代码进行编译(一般的后面的条件是宏定义而不是变量)。
#if 条件1
...code ...
#elif 条件2
...code ...
#else
...code...
#endif
情况二:如果已经定义了宏MAX,则编译响应代码
#if defined (MAX)
...code ...
#endif
或者
#ifdef MAX
...code ...
#endif
情况三:如果没定义宏,则执行代码
#ifndef (MAX)
...code ...
#endif
或者
#if !defined (MAX)
...code ...
#endif
三、文件包含
1、#include :将一个文件的内容全部拷贝到另一文件中;
情况一: 直接到C语言库函数头文件所在的目录中寻找文件
#include <文件名>
情况二:系统会在源程序当前目录下寻找,若是找不到,遭到操作系统的Path路径下查找,最后才到C语言 库函数的头文件所造目录中查找;
#include "文件名" // 万能的
注意:#include指令允许嵌套包含,比如a.h包含b.h,b.h包含c.h,但是不允许递归包含,例如a.h包含 b.h,b.h包含a.c。
防止头文件重复包含:two.h中
#ifndef _TWO_H_
#define _TWO_H_
...头文件内容..
#endif
1、C语言在对源程序进行编译之前,会先对一些特殊的预处理指令做解释,产生一个新的源程序(这个过 程叫 做预编译处理),之后再进行通常的编译。
2、为了区分预处理指令和一般c语言的语句,所有预处理指令都以"#"开头,并且结尾不用封号
3、预处理指令可能出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能 将预处理指令写在源程序的开头,这种情况下,它的作用范围就是整个源程序文件。
4、C语言提供的预处理指令主要由:宏定义、文件包含、条件编译。
一、宏定义
宏定义包括两种:有参数和没参数
#define NUM 6
#define sum (a,b) ( (a)*(b) ) //相当于一个函数,返回a*b
注意:1、宏定义带参数时一定要把参数用括号括起来,不然很容易出错。因为宏定义就是单纯的字符替换 (没有类型检测),如 果括号用的不正确,计算的优先级很容易出错。
2、宏定义是在编译之前替换,而函数实在程序运行时调用, 所以宏定义效率要比函数高
宏定义可以出现在程序的任何地方,从他出现的位置开始起作用,一般用来定义常量。
二、条件编译
情况一:满足条件后会把对应的代码进行编译(一般的后面的条件是宏定义而不是变量)。
#if 条件1
...code ...
#elif 条件2
...code ...
#else
...code...
#endif
情况二:如果已经定义了宏MAX,则编译响应代码
#if defined (MAX)
...code ...
#endif
或者
#ifdef MAX
...code ...
#endif
情况三:如果没定义宏,则执行代码
#ifndef (MAX)
...code ...
#endif
或者
#if !defined (MAX)
...code ...
#endif
三、文件包含
1、#include :将一个文件的内容全部拷贝到另一文件中;
情况一: 直接到C语言库函数头文件所在的目录中寻找文件
#include <文件名>
情况二:系统会在源程序当前目录下寻找,若是找不到,遭到操作系统的Path路径下查找,最后才到C语言 库函数的头文件所造目录中查找;
#include "文件名" // 万能的
注意:#include指令允许嵌套包含,比如a.h包含b.h,b.h包含c.h,但是不允许递归包含,例如a.h包含 b.h,b.h包含a.c。
防止头文件重复包含:two.h中
#ifndef _TWO_H_
#define _TWO_H_
...头文件内容..
#endif
相关文章推荐
- C++11多线程(八):std::condition_variable 详解
- C++环形矩阵填充实现
- 如何学习C语言
- c++ covariant return type
- C++中静态成员函数和非静态成员函数的区别
- C++文件读写 打开方式等比较全
- c++ 函数返回引用
- C++中引用与指针的区别(详细介绍)
- C++,为什么str=new char[strlen(s)+1];中要加一
- C++11多线程(七):《<future> 详解三:std::future & std::shared_future》
- C++中复制构造函数与重载赋值操作符总结
- C++11多线程(六):《<future> 详解二:std::packaged_task 介绍》
- C语言记忆强化1
- C++补全计划1
- c++ exports def文件
- 浅谈C语言的数据存储(二)
- 浅谈C语言的数据存储(二)
- 浅谈C语言的数据存储(一)
- 浅谈C语言的数据存储(一)
- C++11多线程(五):《<future> 详解一:std::promise 介绍》