预处理程序指令

时间:2011-01-21 09:15:12

标签: c++ c-preprocessor preprocessor-directive

当我们看到#include <iostream>时,它被称为预处理程序指令

#include ---&gt;指令

而且,我认为:

<iostream> ---&gt;预处理器

但是,“预处理器”和“指令”是什么意思?

3 个答案:

答案 0 :(得分:8)

#include预处理程序指令,除了这个指令之外,<iostream>只是一个参数,在这种情况下恰好是文件名。

某些预处理程序指令采用参数,有些则不采用,例如

#define FOO 1

#ifdef _NDEBUG
    ....
#else
    ....
#endif

#warning Untested code !

常见的功能是它们都以#开头。

Olden Times 中,预处理器是一个单独的工具,它在将源代码传递给编译器前端,执行宏替换和包括头文件等之前预处理源代码。处理器通常是编译器不可或缺的一部分,但它基本上只是做同样的工作。

答案 1 :(得分:5)

考虑“指令”与“给定指示”(即订单)之间的关系可能会有所帮助。 “预处理程序指令”是预处理程序关于在编译后期阶段应该对代码所做的更改的指示。但是,预处理程序是什么?好吧,它的名字有点递归:它只是处理文本源代码,以各种方式修改它。这个额外的过程在选择,组合甚至生成程序的各个部分时提供了更大的灵活性。

EDIT寻址@SWEngineer的评论:想想预处理器是一个修改C ++程序的独立程序,然后将其输出提供给“真正的”C ++编译器(这与以前的方式非常相似)。当预处理器看到“#include”时,它认为“啊哈哈 - 这是我理解的东西,我将照顾它,而不是盲目地将它传递给C ++编译器”。因此,它会搜索许多目录(某些标准目录,例如/ usr / include以及编译器安装自己的标头的位置,以及在命令行上使用-I指定的其他目录),以查找名为“iostream”的文件。当它找到它时,它会将输入程序中的行替换为“#include”,并将该文件的完整内容替换为“iostream”,并将结果添加到输出中。但是,它接下来移动到它从“iostream”文件读取的第一行,寻找它理解的更多指令。

因此,预处理器非常简单。它可以理解#include,#define,#if / #elif /#endif,#warning,但不是很多。它不知道“int”是什么,模板,类或任何“真正的”C ++东西。它更像是一些自动编辑器,它可以剪切和粘贴部分文件和代码,为C ++编译器最终将要查看和处理的程序做好准备。预处理器仍然非常有用,因为它知道如何在所有这些不同的目录中找到程序的一部分(编译的下一个阶段不需要知道任何关于它的东西),并且它可以删除可能在其他一些目录上工作的代码计算机系统但对使用中的系统无效。它还可以允许程序使用简短的宏语句,生成大量真正的C ++代码,使程序更易于管理。

答案 2 :(得分:0)

预处理程序指令(例如#define#ifdef)通常用于使源程序易于更改,并且易于在不同的执行环境中编译。源文件中的指令告诉预处理器执行特定操作。例如,预处理器可以替换文本中的标记,将其他文件的内容插入到源文件中......

#include是一个预处理程序指令,意味着它由编译器的预处理程序部分使用。这发生在编译过程之前。 #include需要指定要包含的内容,这由参数iostream提供。这告诉预处理器包含文件iostream.h

更多信息: