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


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

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

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