Поделиться через


Требования к препроцессору C для MIDL

Эта страница относится только к разработчикам, у которых есть конкретные причины заменить препроцессор Microsoft C/C++ в качестве препроцессора, используемого MIDL, или для разработчиков, которым необходимо указать настраиваемые параметры препроцессора. Параметры MIDL /cpp_cmd, /cpp_opt и /no_cpp используются для переопределения поведения компилятора по умолчанию. Как правило, нет оснований для замены препроцессора Microsoft C/C++ и указания настраиваемых параметров препроцессора.

Компилятор MIDL использует препроцессор C во время начальной обработки IDL-файла. Среда сборки, используемая при компиляции IDL-файлов, связана с препроцессором C/C++ по умолчанию. Если будет использоваться другой препроцессор, параметр /cpp_cmd компилятора MIDL включает переопределение имени препроцессора C/C++по умолчанию:

midl /cpp_cmd preprocessor_name filename

preprocessor_name

Указывает имя препроцессора, используемого MIDL. Можно указать путь к двоичному файлу. Расширение .exe является необязательным.

Имени файла

Указывает имя IDL-файла.

  • Компилятор MIDL ожидает, что любой препроцессор будет соблюдать следующие соглашения:
  • Входной файл указывается в качестве последнего аргумента в командной строке.
  • Препроцессор должен перенаправлять выходные данные на стандартное устройство вывода stdout.
  • В выходном потоке препроцессора присутствуют директивы #line для улучшения диагностических сообщений.
  • Директивы строки являются единственными директивами препроцессора в выходном потоке.

MIDL предполагает, что порожденный препроцессор удалил все директивы препроцессора из входного потока компилятора, за исключением вхождения директивы строки, необходимой для точного определения расположения источника в сообщениях компилятора. При указании препроцессора, отличного от препроцессора Microsoft C/C++, или при указании параметров препроцессора с помощью параметра /cpp_opt необходимо указать соответствующий параметр препроцессора, который помещает директивы строки во входной поток компилятора. Например, для препроцессора Microsoft C/C++ необходимо использовать параметр /E :

midl /cpp_cmd cl.exe /cpp_opt "/E" file.idl

Директива #line принимается MIDL в одной из следующих форм:

#line digit-sequence "filename" new-line
 
# digit-sequence "filename" new-line

Полное описание директивы line и других директив препроцессора см. в документации по используемому компилятору C.

MIDL принимает только директиву препроцессора строки. Таким образом, если используется параметр /no_cpp , входной файл не должен иметь других директив препроцессора или входной файл должен быть обработан до вызова MIDL.

Дополнительные сведения см. в статье Работа с #defines в файлах IDL.