预处理器可能是最好的思想作为一个独立运行的程序,在编译的时候你编译你的程序。它的目的是处理指令。指令的具体指令开始一个#符号和一个换行符结束(不是一个分号)。有几种不同类型的指示,我们将盖的下面。预处理器是不聪明,不理解C++语法;相反,它处理文本在编译器之前得到它。
包括
你已经看到了#包括指令的行动。#包括告诉预处理器将所包含的文件到当前文件的#点包括指令的内容。这是有用的当你的信息需要被包含在多个场合(如向前声明经常是)。
该#包括命令有两种形式:
#包括<文件>告诉编译器查找文件在一个特殊的地方在头文件的运行时库操作系统定义举行。
#包括“文件名”告诉编译器对寻找包含源文件做#目录文件包括。如果失败,它将相同的角括号的情况。
宏定义
宏定义采取的形式:
#定义标识符替换
每当遇到这种预处理器指令,任何进一步发生identifier被置换取代。标识符是传统上键入字母全部大写,用下划线表示空格。
例如,考虑下面的代码片段:
1
2
3
#定义my_name“亚历克斯”
cout <<“你好,”my_name << endl <<;
预处理器将为以下:
1
2
3
#定义my_name“亚历克斯”
cout <<“你好,”<<“亚历克斯”<< endl;
其中,当运行时,打印输出,你好,亚历克斯。
#定义了用这种方式有两个重要性质。首先,他们允许你给一个描述性的名字的东西,如一个数字。
例如,考虑下面的代码片段:
1
int Nyen = ndollars×122;
一些如在上面的程序被称为神奇的数字122。一个神奇的数字是硬编码的数量在代码中没有任何上下文的122是什么意思?这是一个转换率?这是什么?它真的不清楚。在更复杂的程序,它往往是不可能知道一个硬编码的数字代表。
这段代码是清晰的:
1
2
#定义yen_per_dollar 122
int Nyen = ndollars * yen_per_dollar;
第二,#定义数字可以使程序更容易改变。承担汇率从122变化到123,和我们的计划必须反映。考虑下面的程序:
1
2
3
4
5
国际nyen1 = ndollars1×122;
国际nyen2 = ndollars2×122;
国际nyen3 = ndollars3×122;
国际nyen4 = ndollars4×122;
setwidthto(122);
更新程序以使用新的汇率,我们要更新第一四报表从122到123。那第五个是什么声明吗?这122个具有相同的含义,为其他122s?如果是这样的话,它应该被更新。如果不是,它应该被单独留下,或者我们可以打破我们的程序在别的地方。
现在考虑#定义的值相同的程序: