预处理命令
一、宏定义
C语言标准允许在程序中用一个标识符来表示一个字符串,成为宏。标识符为宏名 ,在编译预处理时,将程序中所有的宏名用相应的字符串来替换,这个过程称为宏替换,宏分为两种:无参数的宏和有参数的宏。
1.无参数的宏
无参数宏定义的一般形式为:#define 标识符字符串
“#”代表本行是编译预处理命令。define是宏定义的关键词,标识符是宏名。字符串是宏名所代替的内容,可以是常数、表达式等。
例如:
2.有参数的宏定义
有参数的宏定义类似于有参数的函数,其定义的一般形式为:
#define 标识符(形参表)字符串。
例如:
二、文件包含
文件包含是指是把指定源文件的全部内容包括到当前源程序文件中。
文件包含命令的一般形式为:
#include "文件名"或 #include <文件名>
三、条件编译
条件编译是指在特定的条件下,满足条件和不满足条件的情况分别进行处理——满足条件编译某些语句,不满足条件时编译另一些语句。
条件编译命令有以下几种模式。
模式一:
#ifndef 标识符
程序段1:
#endif
其含义是:如果没有定义标识符,则编译程序段1。
这里的程序段1既可以是语句组,也可以执行命令。
例如:
#ifndef getkey; #define getkey; #include<sys\types.h> #endif;
代码含义是:如果没有定义符号常量getkey,就定义该产量并且包含头文件sys/types.h。
模式二:
#ifndef 标识符
程序段1
#else
程序段2
#endif
其含义是:如果没有定义标识符,就编译程序段1,否则就编译程序段2。
模式三:
#ifdef 标识符
程序段1
#endif
其含义是:如果定义了标识符,就编译程序段1,否则就不编译该程序段。
例如:
#ifdef DEBUG printf("a=%d,b=%d",a,b); #endid
在调用程序时,可以在程序头部加入如下语句:
#define DEBUG
模式四:
#ifdef 标识符
程序段
#else
程序段2
#endif
其含义是:如果定义了标识符,就编译程序段1,否则就编译程序段2.
模式五:
#if 表达式
程序段1
#endif
其含义是:如果表达式成立,则编译程序段1,否则不编译程序段。
模式六:
#if 表达式
程序段1
#else
程序段2
#endif
其含义是:如果表达式成立,就编译程序段1,否则就编译程序段2。