【Asp.net精品源码栏目提醒】:网学会员为需要Asp.net精品源码的朋友们搜集整理了Chapter11_预编译和命名空间 - 其它资料相关资料,希望对各位网友有所帮助!
C语言基础 预处理 学习目标了解预编译的使用。
了解命名空间的使用。
C语言的预处理功能C提供的预处理功能主要有以下3种: 1、宏定义 2、文件包含 3、条件编译 分别用宏定义命令、文件包含命令、条件编译命令来 实现。
预编译预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。
可见预处理过程先于编译器对源代码进行处理。
在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。
要完成这些工作,就需要使用预处理程序。
尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。
预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。
预处理过程还会删除程序中的注释和多余的空白字符。
预处理指令是以号开头的代码行。
号必须是该行除了任何空白字符外的第一个字符。
后是指令关键字,在关键字和号之间允许存在任意个数的空白字符。
整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。
常用指令 指令 用途 空指令,无任何效果 include 包含一个源代码文件 define 定义宏 undef 取消已定义的宏 if 如果给定条件为真,则编译下面代码 ifdef 如果宏已经定义,则编译下面代码 ifndef 如果宏没有定义,则编译下面代码 elif 如果前面的if给定条件不为真,当前条件为真,则编译下面代码 endif 结束一个if……else条件编译块 error 停止编译并显示错误信息 文件包含 include预处理指令的作用是在指令处展开被包含的文件。
包含可以是多重 的,也就是说一个被包含的文件中还可以包含其他文件。
标准C编译器至少支 持八重嵌套包含。
预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次 包含。
这样就可以在多次包含同一个头文件时,通过给定编译时的条件来达到 不同的效果。
例如: define AAA include t.c undef AAA include t.c 为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时条 件来进行控制。
例如: /my.h/ ifndef MY_H define MY_H …… endif 文件包含 在程序中包含头文件有两种格式: include include my.h 第一种方法是用尖括号把头文件括起来。
这种格式告诉预处理 程序在编译器自带的或外部库的头文件中搜索被包含的头文件。
第二种方法是用双引号把头文件括起来。
这种格式告诉预处理 程序在当前被编译的应用程序的源代码文件中搜索被包含的头 文件,如果找不到,再搜索编译器自带的头文件。
采用两种不同包含格式的理由在于,编译器是安装在公共子 目录下的,而被编译的应用程序是在它们自己的私有子目录下 的。
一个应用程序既包含编译器提供的公共头文件,也包含自 定义的私有头文件。
采用两种不同的包含格式使得编译器能够 在很多头文件中区别出一组公共的头文件。
宏宏定义了一个代表特定内容的标识符。
预处理过程会把源代码中出现的宏标识符替换成宏定义时的值。
宏最常见的用法是定义代表某个值的全局符号。
宏的第二种用法是定义带参数的宏,这样的宏可以象函数一样被调用,但它是在调用语句处展开宏,并用调用时的实际参数来代替定义中的形式参数。
1.define指令 define预处理指令是用来定义宏的。
该指令最简单的格式是:首先神明一个标识符,然后给出这个标识符代表的代码。
在后面的源代码中,就用这些代码来替代该标识符。
这种宏把程序中要用到的一些全局值提取出来,赋给一些记忆标识符。
define MAX_NUM 10 int arrayMAX_NUM fori0i