《C程序设计》中宏定义、文件包含、条件编译三种预处理指令说明

1.宏定义

c程序提供的预处理功能之一。包括带参数的宏定义和不带参数的宏定义。具体是指用一个指定的标志符来进行简单的字符串替换或者进行阐述替换。形式为:
#define标志符[(参数表)] 字符串
在上定义中的标志符被称为“宏名”。
在c程序编译时将宏名替换成字符串的过程称为“宏展开”。
——来源于百度百科

1.1不带参数的宏定义

#define 标识符 字符串
#define PI 3.1415926
注:宏定义不是C语句,不必在行末加分号;#define指令出现在程序中的函数的外面,宏名的有效范围为该指令行起到本源文件结束。

1.2带参数的宏定义

#define 宏名(参数表) 字符串
#define S(a,b) a*b

area=S(3,2);
注:带参数的宏定义与函数在本质上是不同的。

2.“文件包含”处理

所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件内容包含到本文件之中,插入到当前的位置。一般形式为
#include “文件名”

#include<文件名>
这种常用在文件头部的被包含的文件称为“标题文件”或“头文件”,常以“.h”为后缀(h为header的缩写)。当然可以不用“.h”为后缀,而用“.c”为后缀或者没有后缀也是可以的,但用“.h”作后缀更能表示此文件的性质。
采用尖括号形式意味着系统到存放C库函数头文件的目录中寻找要包含的文件,这成为标准方式。双引号则意味着系统先在用户当前目录中寻找要包含的文件,若找不到再按标准方式查找。一般来说如为了调用库函数而用#include来包含相关的头文件,则用尖括号,直接从存放C编译系统的目录中找,以节省查找时间。如果要包含的是用户自己编写的文件,一般用双撇号,以便到该目录中找。

3.条件编译

一般情况下,源程序的所有行都参加编译。但有时希望程序中的一部分内容只有在满足一定条件时才进行编译。条件编译指令的一般形式为:
#ifdef 标识符
程序段1
#else
程序段2
#endif

作用为:若指定的标识符已经被#define指令定义过,则在程序编译阶段对程序段1进行编译,否则编译程序段2。

第二种形式为:
#ifndef 标识符
程序段1
#else
程序段2
#endif

作用为:若指定的标识符没有被#define指令定义过,则在程序编译阶段对程序段1进行编译,否则编译程序段2。

第三种形式为:
#if 表达式
程序段1
#else
程序段2
#endif

作用为:若指定的表达式的值为真(非零)时,则在程序编译阶段对程序段1进行编译,否则编译程序段2。

猜你喜欢

转载自blog.csdn.net/qq_39529052/article/details/105904094