MIDL 的 C-預處理器需求
此頁面僅適用於有特定理由將 Microsoft C/C++ 預處理器取代為 MIDL 使用的預處理器的開發人員,或必須指定自定義預處理器參數的開發人員。 MIDL 參數 /cpp_cmd、/cpp_opt和 /no_cpp 用來覆寫編譯程式的預設行為。 通常沒有理由取代Microsoft C/C++預處理器,也沒有理由指定自定義預處理器參數。
MIDL 編譯程式會在 IDL 檔案的初始處理期間使用 C 預處理器。 編譯 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
MIDL 接受 #line 指示詞,格式如下:
#line digit-sequence "filename" new-line
# digit-sequence "filename" new-line
如需行指示詞和其他預處理器指示詞的完整描述,請參閱所使用之 C 編譯程式的檔。
MIDL 只接受行預處理器指示詞。 因此,如果使用 /no_cpp 參數,輸入檔不得有其他預處理器指示詞,或輸入檔必須在叫用 MIDL 之前處理。
如需詳細資訊,請參閱在IDL檔案 中處理 #defines。