我沒有看到任何在 cppwinrt.exe 工具中指定“C 版本”的開關!
(我的基本假設是 cppwinrt.exe 工具將 C 17 語法系結到 ABI,我不知道它如何系結 C 20 或未來更新版本的語法)
同樣,C#/WinRT 投影中的 cswinrt.exe 工具從 .winmd 檔案生成 .cs 檔案。同樣的問題也適用,cswinrt.exe 工具如何知道使用哪個“C# 版本”來生成 .cs 檔案?
我也沒有看到任何用于在 cswinrt.exe 工具中指定“C# 版本”的開關!
最終目標:了解“語言版本”如何適應 WinRT 語言預測
uj5u.com熱心網友回復:
cppwinrt.exe工具不允許您指定 C 語言標準。它只是默認為 C 17,能夠通過功能測驗宏來選擇更新的語言功能。
結果是生成的頭檔案可以使用任何 C 17 編譯器,或者支持更高語言版本的編譯器進行編譯。
目前(C /WinRT 版本 2.0.210922.5)有四個 C 20 功能正在使用:
- C 20 協程,由
#ifdef __cpp_lib_coroutine指令保護(盡管這實際上只是決定是否包含來自experimental/目錄的協程頭檔案;自VS 2015 起就支持協程)。 - C 20 模塊。這沒有受到保護,因為客戶端需要通過宣告明確選擇使用winrt.ixx
import。 - 支持 C 20 范圍(在2.0.210329.4中引入)。這是一個有趣的問題,因為所有代碼更改都不需要 C 20 編譯器。當客戶使用<ranges>標準庫頭檔案時,該功能只會為使用 C 20 編譯器的客戶點亮。
- C 20
std::format(在2.0.210922.5中引入),由#ifdef __cpp_lib_format指令保護。
從根本上說,C /WinRT 只是一個 C 庫。因此,它可以采用任何適合提供語言自適應實作的技術。
我不知道 C#/WinRT 在內部是如何運作的,也不知道 C# 是如何運作的,所以我無法對此發表評論。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/448715.html
