C 在运行时评估包含文件
C++ to evaluate inclusion file during runtime
我需要做的是"微调"一些恒定值,这些值应与程序的其余部分一起编译,但是我想在每个更改时验证结果每次修改值并重新编译整个程序。因此,每次更改其中的数字时,我都在考虑一种纯文本配置文件,以重新加载,并重新定位程序以对新值采取行动。这是我经常做的事情,但是这次我想做的就是将此配置文件放在有效的包含文件的形式下,并带有以下语法:
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
输入点调用主程序(可能使用其他名称)。
要生产生产版本,只需要一起编译程序和数据,并直接使用它而无需垫片。
根据精确的需求,这是可能的变化。
相关文章:
- vcruntime.h 从 Windows 包含文件夹中丢失?
- 禁止显示有关包含文件中 #pragma 包的警告
- 无法打开包含文件:在 vs2017 上'QtWidgets/qtwidgetsglobal.h'
- 包含文件 <sched_yield.h>在我的 RHEL 5 上找不到
- 尝试使用 MSVC 从源代码构建 qt 创建器:无法打开包含文件:"stddef.h":没有这样的文件或目录
- 无法打开包含文件'Graphics.hpp'没有这样的文件或目录,Visual Studio的其他包含不起作用
- 为什么 C++ 编译器在"c:program filesgnu emacsinclude"中查找包含文件?
- 包含文件中的 Typdef "未在此范围内声明"
- 错误: C1083: 无法打开包含文件:"boost/asio.hpp": 没有此类文件或目录
- SFML c ++ 当包含文件内游戏中发生事件时,如何使用铃声函数为我的游戏创建声音类?
- 在Windows上设置CMake和vcpkg时出错"无法打开包含文件"
- 致命错误 C1083:无法打开包含文件:"GL/glew.h":没有此类文件或目录
- Qt自动生成的.rc文件无法打开包含文件'windows.h'
- Visual Studio 停止识别任何包含文件
- 无法打开包含文件:"签证.h"
- 如何检查每个头文件是否包含必需的包含文件?
- Protobuf:无法在 message.pb.h 文件中打开包含文件 common.h
- extern 关键字在包含文件头文件C++
- 错误:无法打开包含文件:"MQTTAsync.h":没有此类文件或目录
- #include "date.h" 创建错误 E1696 无法打开源文件"date.h",也无法打开包含文件:没有这样的文件或目录