概述
预处理名称 | 意 义 |
---|---|
#define | 宏定义 |
#undef | 撤销已定义过的宏名 |
#include | 使编译程序将另一源文件嵌入到带有#include 的源文件中 |
#if | 如果条件为真,则执行相应操作 |
#elif | 如果前面条件为假,而该条件为真,则执行相应操作 |
#else | 如果前面条件均为假,则执行相应操作 |
#endif | 结束相应的条件编译指令 |
#ifdef | 如果该宏已定义,则执行相应操作 |
#ifndef | 如果该宏没有定义,则执行相应操作 |
#ifdef | 用#ifdef 与#ifndef 命令分别表示“如果有定义”及“如果无定义”,是条件编译的另一种方法。 |
#ifndef | |
#line | 改变当前行数和文件名称,它们是在编译程序中预先定义的标识符命令的基本形式如下:#line number[“filename”] |
#error | 编译程序时,只要遇到 #error 就会生成一个编译错误提示消息,并停止编译 |
#pragma | 为实现时定义的命令,它允许向编译程序传送各种指令例如,编译程序可能有一种选择,它支持对程序执行的跟踪。可用#pragma 语句指定一个跟踪选择。 |
另外 ANSI 标准 C 还定义了如下几个宏:
预处理名称 | 意 义 |
---|---|
LINE | 表示正在编译的文件的行号 |
FILE | 表示正在编译的文件的名字 |
DATE | 表示编译时刻的日期字符串,例如: “25 Dec 2007” |
TIME | 表示编译时刻的时间字符串,例如: “12:30:55” |
STDC | 判断该文件是不是定义成标准 C 程序, |
NULL: | 表示空指针常量。 |
EOF: | 表示文件结束符。 |
true 和 false: | 表示布尔类型的真值和假值,C99引入了 <stdbool.h> 头文件来定义这两个符号。 |
宏定义(#define、#under)
用#define定义数值常量:
#define PI 3.141592654
…
// code
#undef PI //后面代码不能使用 PI 了
用#define定义字符串常量
#define ENG_PATH_1 E:\English\listen_to_this\listen_to_this_3
#define ENG_PATH_2 "E:\English\listen_to_this\listen_to_this_3"
ENG_PATH_1 定义时没使用双引号,在使用时就需要再加双引号,写成 "ENG_PATH_1" ,否则会报错;
ENG_PATH_2 定义时使用了双引号,可以直接使用ENG_PATH_2去表示字符串
用 #define 宏定义表达式
#define SEC_A_YEAR 60*60*24*365 // 这个可能会溢出
#define SEC_A_YEAR (60*60*24*365)UL
条件编译(#if、#else、#elif、#endif)
1
// 如果标识符已被 #define 命令定义过则对程序段 1 进行编译,否则对程