MSVC下长Raw字符串字面量编译报错,求非侵入式兼容方案
解决MSVC下超长Raw字符串字面量的C2026编译错误(非侵入式方案)
问题背景
- 维护包含第三方库的C++代码库,要求不得违反编码规范、修改库的逻辑与范式,禁止使用资源文件
- 代码中存在超长Raw字符串字面量:
constexpr auto kImGuiWS_js = R"( very long multiline string about 18000 characters )"; - 使用MSVC编译时触发错误:
Error C2026 string too big, trailing characters truncated - 原因:MSVC编译器限制,字符串拼接前单个字符串字面量的长度不能超过16380单字节字符
普通长字符串可通过拆分拼接解决,但该方式看似不适用于Raw字符串,以下提供符合要求的非侵入式解决方案。
解决方案:拆分Raw字符串为多个连续的Raw片段
Raw字符串字面量同样支持相邻拼接,只需将超长字符串拆分为多个长度不超过16380字符的R"(...)"片段,编译器会自动将它们拼接为完整字符串,完全保留原内容与逻辑。
示例代码:
constexpr auto kImGuiWS_js = R"( first segment of the long multiline string (≤16380 chars) )" R"( second segment of the long multiline string (≤16380 chars) )" R"( remaining segments... )";
关键说明
- 格式保留:拆分时无需修改原字符串的换行、空格等格式,每个
R"(...)"会完整保留内部的原始内容 - 分隔符一致:确保所有拆分片段使用相同的Raw字符串分隔符(示例中为默认的
"(...)"`),避免语法错误 - 非侵入性:仅拆分字符串为多个连续片段,不改变原代码的结构、逻辑,也不违反禁用资源文件的要求
内容的提问来源于stack exchange,提问作者Amir Rasti
相关产品推荐
相关产品推荐

