我正在寻找一种将一些自动生成的代码插入到 C 源文件中的方法。代码生成是在 python 中进行的,这不是问题,关键在于如何用生成的代码替换/更新现有 C 代码中的代码块。我正在寻找一个与 C 语法兼容的模板库(模板语句可以隐藏在注释中),并且其中模板和扩展模板可以是同一个东西。
包含待更新代码的示例 C 文件:
// start generated block (blockname)
... some code here
// end generated block (blockname)
Python 伪代码示例:
replace_code_in_c_file(filename, blockname, new_code)
运行此命令后, // 注释保持不变,但代码块将被新代码替换。
让我解释一下一个技巧。 Jinja2 是一个模板脚本,可以从模板生成文本。您需要做的是编写 C 代码模板 main.c.j2:
#include <stdio.h>
int main()
{
printf("hello {{name}}.\n");
return 0;
}
然后你可以使用 trans.py:
将其转换为 C 代码
import os
from jinja2 import PackageLoader, Environment, FileSystemLoader
TemplateLoader = FileSystemLoader(os.path.abspath("."))
env = Environment(loader = TemplateLoader)
template = env.get_template("main.c.j2")
print(template.render(name = "Jack"))
运行 python trans.py,您将在屏幕上看到以下 C 代码:
#include <stdio.h>
int main()
{
printf("hello Jack.\n");
return 0;
}
这是真正的C代码,{{name}}被替换为Jack。请参阅 Jinja2 文档了解更多有趣的功能。
这可以使用 Python 中的 re 库 来完成。
搜索区块名称并将其替换为新区块:
re.sub(f"// start generated block \({blockname}\).*// end generated block \({blockname}\)", new_code, fileContents, flags=re.DOTALL)
你可以试试https://aicodeconvert.com,它可以将代码语言转换为c代码