简体   繁体   中英

“precompiler directive” “preprocessor directive”

I was wondering if "precompile(r) directive" and "preprocessor directive" are the same thing? I am not familiar with the former, but just heard of it and found a little information about it on the internet with this Google search, such as p40 of " C++ programming for the absolute beginner " by Dirk Henkemans and Mark Lee.

Your question amounts to asking if people mean " preprocessor directive" when they say "precompile directive", and that's not an answerable question.


In a C or C++ context, I suspect people are very likely to be referring to preprocessor directives if they say "precompile directive".

The book you quote is one example of this. It's talking about the C preprocessor directive " #define ". I suspect it's using "precompile directive" as a description, not a name.

All of the search results you posted that I examined are posts by people seeking help with C preprocessor directives.


That said, I can't say for certain that's the case for all people at all times, though.

Microsoft possibly made a tool that uses "precompiler directives" according to the result of another search I made, but it wasn't talking about C, C++ or cpp .

Yes, they sound like the exactly the same thing. I think preprocessor directive is more commonly used (I've never heard of precompiler).

This is a pretty good list of directives / what they do: http://www.cplusplus.com/doc/tutorial/preprocessor/

It depends a bit on context, but for most people most of the time, if you are working in pure C code, they are the same thing, though 'preprocessor directive' is far more common than 'precompile directive' or 'precompiler directive'.

Section §6.10 Preprocessing Directives of the ISO/IEC 9899:1999 standard indicates that 'preprocessor' or 'preprocessing' is more standard than 'precompile(r)'.

If, however, you work with ESQL/C (Embedded SQL in C), then there is a difference:

  • The precompiler directives are aimed at the ESQL/C precompiler, which converts ESQL/C into pure C.
  • The preprocessor directives are aimed at the C preprocessor, which is one part of the C compiler which (overall) converts C source code into object code or executables, etc.

The ESQL/C compiler I work with has directives such as:

$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;
}

The lines starting with a '$' are ESQL/C precompiler directives - aimed at the precompiler. They give the ESQL/C precompiler the information needed to help it convert the embedded SQL statements into C code, which is then compiled by a full C compiler. But the ESQL/C precompiler is also called the ESQL/C preprocessor (to distinguish it from the C preprocessor), so the distinction is not as hard and fast as all that. In this case, the ESQL/C compiler as a whole is a shell script that runs the ESQL/C precompiler and then the C compiler. (There are some extra complications in it that don't concern this question.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM