«директива препроцессора» «директива препроцессора» - PullRequest
0 голосов
/ 15 июня 2011

Мне было интересно, являются ли "директива precompile (r)" и "директива препроцессора" одинаковыми?Я не знаком с первым, но только что услышал об этом и нашел немного информации об этом в Интернете с помощью этого Google поиска, такого как p40 " C ++ программирования для абсолютного новичка"Дирком Хенкемансом и Марком Ли.

Ответы [ 3 ]

2 голосов
/ 15 июня 2011

Ваш вопрос сводится к тому, чтобы спросить, имеют ли люди в виду « препроцессор директива», когда они говорят «директива прекомпиляции», и это не ответный вопрос.


В контексте C или C ++ я подозреваю, что люди очень вероятно ссылаются на директивы препроцессора, если они говорят "директива прекомпиляции".

Книга, которую вы цитируете, является одним из примеров этого. Речь идет о директиве препроцессора C "#define". Я подозреваю, что он использует «директиву прекомпиляции» в качестве описания, а не имени.

Все результаты поиска, которые вы опубликовали, которые я исследовал, являются сообщениями людей, обращающихся за помощью с директивами препроцессора C.


Тем не менее, я не могу с уверенностью сказать, что это так для всех людей во все времена, хотя.

Microsoft, возможно, создала инструмент, который использует «директивы прекомпилятора» в соответствии с результатами другого поиска, который я сделал, но речь не шла о C, C ++ или cpp.

1 голос
/ 15 июня 2011

Это немного зависит от контекста, но для большинства людей большую часть времени, если вы работаете в чистом C-коде, это одно и то же, хотя «директива препроцессора» гораздо более распространена, чем «директива прекомпиляции» или «Директива прекомпилятора '.

Раздел §6.10 Директивы предварительной обработки стандарта ISO / IEC 9899: 1999 указывают, что «препроцессор» или «предварительная обработка» более стандартны, чем «прекомпиляция (r)».

Если, однако, вы работаете с ESQL / C (Embedded SQL in C), то есть разница:

  • Директивы прекомпилятора предназначены для прекомпилятора 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, предназначенные для pr.ecompiler.Они предоставляют прекомпилятору ESQL / C информацию, необходимую для преобразования преобразованных операторов SQL в код C, который затем компилируется полноценным компилятором C.Но прекомпилятор ESQL / C также называется препроцессором ESQL / C (чтобы отличить его от препроцессора C), поэтому различие не так сложно и быстро, как все это.В этом случае компилятор ESQL / C в целом является сценарием оболочки, который запускает прекомпилятор ESQL / C, а затем компилятор C.(Есть некоторые дополнительные осложнения, которые не касаются этого вопроса.)

1 голос
/ 15 июня 2011

Да, они звучат как одно и то же.Я думаю, что директива препроцессора используется чаще (я никогда не слышал о прекомпиляторе).

Это довольно хороший список директив / что они делают: http://www.cplusplus.com/doc/tutorial/preprocessor/

...