C 在运行时评估包含文件

C++ to evaluate inclusion file during runtime

本文关键字:包含 文件 评估 运行时      更新时间:2023-10-16

我需要做的是"微调"一些恒定值,这些值应与程序的其余部分一起编译,但是我想在每个更改时验证结果每次修改值并重新编译整个程序。因此,每次更改其中的数字时,我都在考虑一种纯文本配置文件,以重新加载,并重新定位程序以对新值采取行动。这是我经常做的事情,但是这次我想做的就是将此配置文件放在有效的包含文件的形式下,并带有以下语法:

const MyStructure[] = 
{
  { 1, 0.5f, 0.2f, 0.77f, [other values...] },
  { 3, 0.4f, 0.1f, 0.15f, [other values...] },
  [other rows...]
};

如果我使用的是诸如perl之类的解释语言,我将使用eval()函数,如果C 无法使用该功能。虽然我已经阅读了有关在C 中具有eval()函数的可能性的其他问题,但我想要的是不评估和运行此代码,只是将其解析并将值放在它们所属的变量中。

我可能会使用正则表达式来解析上面的C语法,但是再次,Regexp仍然不值得在C 中使用,所以您可以建议一种替代方法吗?

可能值得一提的是,我只需要在开发阶段才能解析此文件。我将在程序准备发布后#include

编写自己的解析器可能比适合此用例的工作更多。

一个简单的解决方案就是将包含变量分别作为共享对象或DLL的文件编译,可以在运行时动态加载。(精确的详细信息取决于您的操作系统。)如果需要,您也可以在程序初始化过程中调用编译器。

如果您不想处理查找符号并将其复制成静态变量的复杂性,则还可以将程序的大部分编译成一个共享对象,而仅作为主要可执行文件。那垫片会:

  • 如有必要,请调用编译器创建数据共享对象

  • 动态加载数据共享对象

  • 动态加载程序共享对象,

  • 使用其main输入点调用主程序(可能使用其他名称)。

要生产生产版本,只需要一起编译程序和数据,并直接使用它而无需垫片。

根据精确的需求,这是可能的变化。

相关文章: