“预编译器指令”“预处理器指令”

时间:2011-06-15 18:00:44

标签: c directive

我想知道“precompile(r)指令”和“预处理程序指令”是否相同?我对前者并不熟悉,但只是听说过它,并通过Google搜索在互联网上找到了一些相关信息,例如Dirk Henkemans和Mark Lee的“C++ programming for the absolute beginner”p40。

3 个答案:

答案 0 :(得分:2)

你的问题相当于在他们说“预编译指令”时询问人们是否意味着“preprocessor指令”,这不是一个可回答的问题。


在C或C ++上下文中,如果他们说“预编译指令”,我怀疑人们非常可能指的是预处理器指令。

你引用的那本书就是一个例子。它正在谈论C预处理器指令“#define”。我怀疑它使用“预编译指令”作为描述,而不是名称。

我发布的所有搜索结果都是那些寻求C预处理程序指令帮助的人的帖子。


尽管如此,我不能肯定地说,所有人在任何时候都是如此。

微软可能根据我做的另一个搜索结果制作了一个使用“预编译器指令”的工具,但它并没有谈论C,C ++或cpp

答案 1 :(得分:1)

是的,它们听起来完全一样。我认为预处理器指令更常用(我从未听说过预编译器)。

这是一个非常好的指令列表/它们的作用: http://www.cplusplus.com/doc/tutorial/preprocessor/

答案 2 :(得分:1)

这取决于上下文,但对于大多数人来说,如果你使用的是纯C代码,那么它们是相同的,尽管'预处理器指令'比'预编译指令'或'更常见'预编译器指令'。

ISO / IEC 9899:1999标准的§6.10预处理指令部分表明'预处理器'或'预处理'比'预编译(r)'更标准。

但是,如果您使用ESQL / C(C语言中的嵌入式SQL),则会有所不同:

  • 预编译器指令针对ESQL / C预编译器,它将ESQL / C转换为纯C。
  • 预处理程序指令针对C预处理程序,它是C编译器的一部分,它(整体上)将C源代码转换为目标代码或可执行文件等。

我使用的ESQL / C编译器具有如下指令:

$include sqlca;
$define APERITIF 32;
$include "header.h";
$ifdef APPETIZERS;
$define AVOCADO 1;
$endif;

#include <stdio.h>

int main(void)
{
    $ int var1;
    $ whenever error stop;
    $ database "whatever";
    $ select max(tabid) into :var1 from systables;
    printf("%d\n", var1);
    return 0;
}

以'$'开头的行是ESQL / C预编译器指令 - 针对预编译器。它们为ESQL / C预编译器提供了帮助它将嵌入式SQL语句转换为C代码所需的信息,然后由完整的C编译器编译。但ESQL / C预编译器也称为ESQL / C预处理器(以区别于C预处理器),因此区别并不像所有那样强硬。在这种情况下,ESQL / C编译器作为一个整体是一个shell脚本,它运行ESQL / C预编译器,然后运行C编译器。 (其中有一些额外的并发症与此问题无关。)