条件编译指令将决定那些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。
一.#if、#else、#elif和#endif指令
(1) #if 表达式
语句段1
[#else
语句段2]
#endif
代码实例:
#include<stdio.h>
#include<stdio.h>
#if VAL_MIN < INT_MIN || INT_MAX < VAL_MAX
#error value out of range //表示输出一行错误提示
#endif
如果表达式为真,就编译语句段1,否则编译语句段2
(2) #if 表达式1
语句段1
#elif 表达式2
语句段2
#else
语句段3
#endif
实例代码:
#include<stdio.h>
#include<limits.h>
#if VAL_MIN < INT_MIN || INT_MAX < VAL_MAX
typedef long Val_t; //类型重定义
#else
typedef int Val_t;
#endif
如果表达式1真,则编译语句段1,否则判断表达式2;如果表达式2为真,则编译语句段2,否则编译语句段3
二. #ifdef和#ifndef
(1)#ifdef的一般形式:
#ifdef 宏名
语句段
#endif
作用:如果在此之前已定义了这样的宏名,则编译语句段。 (2)#ifndef的一般形式:
#ifndef 宏名
语句段
#endif
作用:如果在此之前没有定义这样的宏名,则编译语句段。
#else可以用于#ifdef和#ifndef中,但#elif不可以。
三. #error 指令将使编译器显示一条错误信息,然后停止编译。
四. #line 指令可以改变编译器用来指出警告和错误信息的文件号和行号。
五. #pragma 指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。