Требования к препроцессору 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.