0

我想知道“预编译(r)指令”和“预处理器指令”是否相同?我对前者不熟悉,只是听说过,并在网上通过这个Google搜索找到了一些关于它的信息,例如Dirk Henkemans 和 Mark Lee的“ C++ 编程绝对初学者”的 p40。

4

3 回答 3

2

您的问题相当于询问人们在说“预编译指令”时是否指“预处理器指令”,这不是一个可以回答的问题


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

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

您发布的所有我检查过的搜索结果都是人们在 C 预处理器指令方面寻求帮助的帖子。


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

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

于 2011-06-15T18:55:17.100 回答
1

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

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

于 2011-06-15T18:04:36.490 回答
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 编译器。(其中有一些额外的复杂性与这个问题无关。)

于 2011-06-15T19:15:37.237 回答