名稱空間
變體
操作

資源嵌入 (C++26 起)

來自 cppreference.com
 
 
C++ 語言
 
 

#embed 是一個預處理器指令,用於嵌入資源,其中資源被定義為可從翻譯環境訪問的資料來源。

目錄

[編輯] 語法

#embed < resource > pp-tokens (可選) \n * (1)
#embed " resource " pp-tokens (可選) \n * (2)
#embed pp-tokens\n * (3)
__has_embed ( pp-balanced-token-seq ) (4)
1) 搜尋唯一標識的 resource
2) 搜尋具名 resource。如果尖括號代替引號使用,則回退到 (1)
1-2) 將指令替換為與資源資料對應的逗號分隔整數列表。
3) 如果 (1)(2) 都不匹配,pp-tokens 將進行宏替換。替換後的指令將再次嘗試與 (1)(2) 匹配。
resource - 要嵌入的資源
pp-tokens - 正整數個 預處理記號
pp-balanced-token-seq -

[編輯] 解釋

1) 搜尋在實現定義的地點序列中進行。地點如何指定或資源如何標識是實現定義的。
2) 搜尋以實現定義的方式進行。如果此搜尋不支援,或搜尋失敗,則進行回退。

[編輯] 嵌入引數

[編輯] 示例

假設檔案 word.txt 包含一個單詞:worlds

  • limit(5) 將嵌入限制為 5 個字元(有效地嵌入單詞 world,不包括開頭的字母 s)。
  • prefix(0x2C, 0x20, ) 在字串 s 前新增 , ​0x2C, 的十六進位制程式碼,0x20​ ​ 的十六進位制程式碼。
  • suffix(, 0x21) 在字串 s 後新增 !0x21! 的十六進位制程式碼。
#include <string>
#include <print>
 
int main()
{
    std::string s
    {
        #embed "word.txt" prefix(0x2C, 0x20, ) suffix(, 0x21) limit(5)
    };
 
    std::println("Hello{}", s);
}

可能的輸出

Hello, world!

[編輯] 參考

  • C++26 標準 (ISO/IEC 14882:2026)
  • 15.4 資源嵌入 [cpp.embed]

[編輯] 另見

C 文件 關於 二進位制資源嵌入 (C23 起)