预处指令#if#esle#endif#ifdef(详细)

预处指令#if#esle#endif#ifdef(详细)

ID:16212678

大小:177.00 KB

页数:33页

时间:2018-08-08

预处指令#if#esle#endif#ifdef(详细)_第1页
预处指令#if#esle#endif#ifdef(详细)_第2页
预处指令#if#esle#endif#ifdef(详细)_第3页
预处指令#if#esle#endif#ifdef(详细)_第4页
预处指令#if#esle#endif#ifdef(详细)_第5页
资源描述:

《预处指令#if#esle#endif#ifdef(详细)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、预处指令#if#esle#endif#ifdef分类: C/C++2006-05-2412:41 1138人阅读 评论(1) 收藏 举报microsoft编译器语言c++wrapper扩展预处理器是一种处理源文件文本的文本处理器,它是翻译起始阶段的一个组成部分。预处理器并不在语法上分析处理源文本,但出于定位宏调用的目的,它将源文本分开语言符号。虽然编译器一般在初次编译时启动预处理器,但预处理器也可以不经编译,单独地处理文本。Microsoft特殊处用/E或/EP编译器选项进行预处理之后,你可以得到一个源代码的

2、列表。在多数情况下,启动预处理器和输出结果文本到输出设备,这两种选项都是控制台指令,这两种选项的区别在于/E包括了#line指令,/EP没有这些指令。Microsoft特殊处结束特殊术语在本书中,名词“参量”指的是传送给一个函数的实体。有时候,它用“actual”或“formal”修饰,它们分别用于表示函数调用时的参量表达式和在函数定义时的参量说明。名词“变量”指的是一种简单的C类型数据对象,名词“对象”指的是C++对象和变量;它是一个含义广泛的名词。翻译阶段C和C++程序由一个或多个源文件组成,它们都包含了

3、程序的某些文本,一个不包含代码部分的源文件和它的包含文件(用#indude预处理器指令包含的文件),若被条件编译指令(比如#if)调用,则称其为一个“转换单元”。源文件可被翻译多次,翻译过去的文件事实上是很正常的。已经翻译了的翻译单元可保存在单独的对象文件或对象代码库里,这些单个的转换单元可被连接形成一个可执行文件或动态链接库(DLL)。转换单元可采用下列形式通信:*调用具有外部连接的函数。*调用具有外部连接的类成员函数。*直接更改具有外部连接的对象。*文件的直接更改。*内部外理通信(仅限于基于Microso

4、ftWindows的应用程序)。以下是编译器翻译文件的各个阶段:字符映射源文件中的字符被映射为内部源代码的形式。此阶段三字母序列被转换为单字符的内部表现形式。行拼接在此阶段,源文件中所有以反斜杠(/)结尾且其后紧跟一换行符的行,将与下一行连接,从而由物理行生成逻辑行。所有非空源文件结束于一个前面没有反斜杠的换行符。语言符号化此阶段源文件被分为预处理语言符号和空白字符。源文件中每个注释被用一个空白字符代替。换行符被保留。预处理此阶段执行预处理指令并将宏扩展至源文件,#include语句调用对所有包括文本启动前面

5、三个翻译步骤开头的翻译过程。字符集映射所有的源字符集成员和转义序列将转换为执行字符集中的等价形式,对于MicrosoftC和C++来说,源字符集和执行字符集都是ASCII码。字符串合并所有相邻的字符串和宽字符文字都将被合并。例如:“String”“concatenation”合并为“Stringconcatenation”。翻译所有的语言符号将按语法和语义规则进行分析;这些语言符号被转换为目标代码。链接此阶段所有的外部引用被分解以生成一个可执行程序或一个动态链接库。编译器在翻译过程中遇到语法错误时,将发出一个

6、警告或错误信息。链接器分解所有的外部引用,并把一个或多个分开处理的转换单元和标准库联接起来,以生成一个可执行程序或动态链接库(DLL)。预处理器指令预处理器指令如#define和#ifdef,一般被用在不同的运行环境下,使源程序易于更改和编译。源文件中的指令指示预处理器执行特有的行为。例如,预处理器可替换文本中的语言符号,将其它的文件内容插入源文件中,或移走文本的一部分以抑制文件中某部分的编译。预处理器行在宏扩展之前被识别且执行。不过,如果宏扩展看起来象一个预处理器指令,该命令将不能被预处理器识别。除转义序列

7、之外,预处理器语句采用与源文件语句相同的字符集。在预处理器语句中的字符集和可执行程序的字符集是一样的。预处理器也可识别负字符值。预处理器可识别如下指令:#define#error#import#undef#elif#if#include#else#ifdef#line#endif#ifndef#pragma数字符号(#)是包含预处理器指令的行中的第一个非空白字符。空白字符可出现在数字符号和指令的第一个字母之间。某些指令包含参量和值。指令之后的任何文本(除作为指令一部分的参量或值之外)必须放在单行注释分界符(/

8、/)之后或注释分界符(/**/)之间。预处理器指令可出现在源文件的任何地方,但它们仅用于源文件的剩余部分。#define指令可以用#define指令给程序中的常量取一个有意义的名称,其语法的两种形式如下:语法#define标识符语言符号字符串opt#define标识符[(标识符opt,...,标识符opt)]语言符号字符串opt#define指令用语言符号字符串替换源文件中一个标识符的所有出现,标识

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。