第三讲 预处理-引言

来源:互联网 发布:linux延时函数头文件 编辑:程序博客网 时间:2024/04/29 04:01

往往我说今天上课的内容是预处理时,便有质疑:预处理不就是include 和define 么?这也用得着讲啊?

是的,非常值得讨论,即使是include 和define。

但是预处理仅限于此吗?远远不止。先看几个个常识性问题:

 A),预处理是C 语言的一部分吗?

 B),包含“#”号的都是预处理吗?

C),预处理指令后面都不需要加“;”号吗?
不要急着回答,先看看ANSI 标准定义的C 语言预处理指令: 表(3.1) 预处理指令
另外ANSI 标准C 还定义了如下几个宏: _LINE_ 表示正在编译的文件的行号 _FILE_ 表示正在编译的文件的名字 预处理名称意义 #define 宏定义
#undef 撤销已定义过的宏名

#include 使编译程序将另一源文件嵌入到带有#include 的源文件中

#if #if 的一般含义是如果#if 后面的常量表达式为true,则编译它与#endif 之 间的代码,否则跳过这些代码。

命令#endif 标识一个#if 块的结束。

#else 命令的功能有点象C 语言中的else ,#else 建立另一选择(在# if 失败 的情况下)。

#elif 命令意义与else if 相同,它形成一个if else-if 阶梯状 语句,可进行多种编译选择。 #else #elif #endif

#ifdef 用#ifdef 与#ifndef 命令分别表示“如果有定义”及“如果无定义”,是条 件编译的另一种方法。

#ifndef

#line 改变当前行数和文件名称,它们是在编译程序中预先定义的标识符 命令的基本形式如下: #line number["filename"]
#error 编译程序时,只要遇到#error 就会生成一个编译错误提示消息,并停止 编译

#pragma 为实现时定义的命令,它允许向编译程序传送各种指令例如,编译程序可 能有一种选择,它支持对程序执行的跟踪。

可用#pragma 语句指定一个 跟踪选择。

_DATE_ 表示编译时刻的日期字符串,例如: "25 Dec 2007" _TIME_ 表示编译时刻的时间字符串,例如: "12:30:55" _STDC_ 判断该文件是不是定义成标准C 程序

如果编译器不是标准的,则可能仅支持以上宏的一部分,或根本不支持。

当然编译器也有可能还提供其它预定义的宏名。

注意:宏名的书写由标识符与两边各二条下划线构成。

相信很多初学者,甚至一些有经验的程序员都没有完全掌握这些内容,下面就一一详细 讨论这些预处理指令。

0 0