【发布时间】:2022-01-11 08:16:09
【问题描述】:
我在 cplusplus 中嵌入 Lua 代码;可以这样写
char const *lua_scripts = R"rawstring(
-- lua code
)rawstring";
但是字符串里面的 Lua 代码没有语法高亮,所以我把它分成了 3 个文件:
第一个文件名为head.txt
char const *lua_scripts = R"rawstring(
第二个文件名为body.lua
-- lua code
第三个文件名为tail.txt
)rawstring";
然后原来的cpp文件改成
#include "head.txt"
#include "body.lua"
#include "tail.txt"
但是当我编译时,报语法错误,因为编译器在包含之前检查了文件。那么如何禁用编译器检查语法呢?
【问题讨论】:
-
很确定你不能用打开的引号字符串结束文件。您最好的选择可能是将任何嵌入式代码视为已生成,即使生成有效地执行
cat head.txt body.lua tail.txt >some_header.h。 -
char const lua_scripts描述的是单个字符,而不是字符串。 -
考虑编写一个简单的预构建步骤,从原始源文件构建您的字符串资源。通过这样做,如果您希望字符串“隐藏”在可执行文件中(使用简单的 XOR 链,甚至更复杂的混淆或加密方案),您可以在以后轻松更新程序以混淆字符串。它还避免了使用预编译器的麻烦(最终是徒劳的努力)。
-
非常接近XY problem。在了解您要解决的问题之前,您正在寻求有关您提出的解决方案的帮助。你有没有想过为什么需要拆分成三个文件?如果您知道为什么仅将 Lua 代码移动到
body.lua是行不通的,您就会知道为什么您当前的 3 文件方法注定要失败。 (说到这里,您是否有兴趣询问为什么仅将 Lua 代码移动到body.lua不起作用?还是您更愿意寻求解决方法?) -
@paddy 抱歉,打错了。这是
char const *lua_scripts