该程序打印的“鲍伯”,因为print_bob从未#定义。
有条件编译是用相当一点的形式的头卫士。我们将看看下一节课的那些。
定义范围
指令在编译之前解决,从文件的上到下一个文件的基础。一旦预处理完成后,从该文件被丢弃所有的指令。
这意味着指令只从定义它们被定义的文件的结束点起到有效的有效的方法。在一个代码文件中定义的指令不会对同一个项目中的其他代码文件产生影响。
你已经看到了# include指令在行动。当你#包括文件,预处理器复制包含文件为包括在#点文件包含指令的内容。当您有需要被包含在多个地方的信息(如前向声明通常是)时,这是有用的。
的#包括命令有两种形式:
#包括<文件名>告诉预处理器要找的文件在一个特别的地方,由操作系统的C++运行时库的头文件举行。你通常会使用这种形式当你包括头文件来编译(例如,C++标准库的一部分)。
#包括“文件名”告诉预处理器寻找含源文件做#目录文件包括。如果它没有找到头文件,它会检查任何其他包括你指定你的编译器和IDE设置部分路径。该失败,它将采取相同的倾斜括号的情况下。您通常会使用此表单,包括您自己的头文件。
宏定义
的#指令可以用来创建宏。宏是一个规则,它定义了一个输入序列(例如一个标识符)如何被转换成一个替换的输出序列(例如,一些文本)。
有两种基本类型的宏:类的宏和函数类的宏。
函数像宏功能,并有类似的功能。我们不会讨论他们,因为他们的使用通常被认为是危险的,几乎所有的东西,他们可以做的(内联)功能。
像宏一样的对象可以用两种方法中的一种:
有条件编译是用相当一点的形式的头卫士。我们将看看下一节课的那些。
定义范围
指令在编译之前解决,从文件的上到下一个文件的基础。一旦预处理完成后,从该文件被丢弃所有的指令。
这意味着指令只从定义它们被定义的文件的结束点起到有效的有效的方法。在一个代码文件中定义的指令不会对同一个项目中的其他代码文件产生影响。
考虑下面的例子:
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
void doSomething()
{
#ifdef PRINT
std::cout << "Printing!";
#endif
#ifndef PRINT
std::cout << "Not printing!";
#endif
}
你已经看到了# include指令在行动。当你#包括文件,预处理器复制包含文件为包括在#点文件包含指令的内容。当您有需要被包含在多个地方的信息(如前向声明通常是)时,这是有用的。
的#包括命令有两种形式:
#包括<文件名>告诉预处理器要找的文件在一个特别的地方,由操作系统的C++运行时库的头文件举行。你通常会使用这种形式当你包括头文件来编译(例如,C++标准库的一部分)。
#包括“文件名”告诉预处理器寻找含源文件做#目录文件包括。如果它没有找到头文件,它会检查任何其他包括你指定你的编译器和IDE设置部分路径。该失败,它将采取相同的倾斜括号的情况下。您通常会使用此表单,包括您自己的头文件。
宏定义
的#指令可以用来创建宏。宏是一个规则,它定义了一个输入序列(例如一个标识符)如何被转换成一个替换的输出序列(例如,一些文本)。
有两种基本类型的宏:类的宏和函数类的宏。
函数像宏功能,并有类似的功能。我们不会讨论他们,因为他们的使用通常被认为是危险的,几乎所有的东西,他们可以做的(内联)功能。
像宏一样的对象可以用两种方法中的一种: