是否可以用类似C/C++(或任何语言)的语言,从作为用户输入的字符串或文件中创建用户定义的数据类型
Is it possible to create a user-defined datatype in a language like C/C++(or maybe any) from a string as user input or from file
这可能是一个非常奇怪的问题,但我的好奇心在这个问题上受到了很大的打击。所以它开始了。。。
注意:让我们在这里考虑C语言。
作为程序员,我们通常在源代码中用适当的名称定义用户定义的数据类型(比如struct(
假设我有一个程序,其中的结构定义为:
struct Animal {
char *name;
int lifeSpan;
};
而且我已经开始执行这个程序了
现在,我的问题是
如果我想在程序中定义一个名为"Plant"的新结构,就像上面提到的"Animal"一样,而不在源代码中写入它的定义(目前显然不可能(,而是在运行时从用户输入字符串(或文件输入(,该怎么办。
假设我的程序从一个名为file1.txt的文本文件中获取输入字符串,该文件的内容为:
struct Plant {
char *name;
int lifeSpan;
};
我现在想要的是在我的程序中有一个名为"Plant"的新结构,它已经在执行中了。程序应该读取文件内容,创建一个在文件中写入的结构,并在运行时将其附加到自己身上
我在讨论中查看了C++的解决方案在C++中动态声明数据类型,但它似乎没有一个很有说服力的解决方案
我正在寻找的解决方案是在编译器链接器加载程序级别,而不是从语言本身
如果有人期待分享他们对此的想法,我将非常高兴和感谢
您所问的基本上是"我们可以将C实现为脚本语言吗?",因为这是编译后执行代码的唯一方式。
我知道人们一直在写(主要是在评论中(这在其他语言中是可能的,但在C中是不可能的,因为C是一种编译语言(因此数据类型应该在编译时定义(。
然而,据我所知,这实际上是可能的(可能并不像人们想象的那么难(。
有许多可能的方法(机器代码模拟(VM(、JIT编译等(。
一种方法是使用C编译器将C脚本编译为外部动态库(windows上的.dll
、linux上的.so
等(,然后"加载"编译后的库并执行代码(对于懒惰的人来说,这几乎是JIT编译方法(。
编辑:
如注释中所述,通过使用这种方法,新类型将作为外部库的一部分加载。
原始代码不会知道这种新类型,只有新代码(或库(会"知道"这种新类型并能够正确使用它
另一方面,我不确定您为什么坚持需要使用静态类型和编译器链接器加载程序级别的解决方案。
语言本身(C语言(可以动态管理此任务(在执行期间(。
以Ruby MRI为例。Ruby语言支持可以在运行时定义的动态类型。。。
然而,这是在C中实现的,并且可以使用C中的代码来定义新的模块和类。这些不是可以在编译期间测试的静态类型(类型创建和标识是在运行时执行的(。
这是一个完美的例子,表明C(作为一种语言(可以动态定义"类型"。
然而,这也是一个糟糕的例子,因为Ruby的方法很慢。自定义批准的速度要快得多,因为它可以避免与您可能不需要的功能(如继承(相关的巨大开销。
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 当用户超过按钮点击限制时报告
- 是否可以用类似C/C++(或任何语言)的语言,从作为用户输入的字符串或文件中创建用户定义的数据类型
- C++程序中的首选用户语言
- 如何在C 项目中包括在GitHub上托管的库?(新的C 用户 - 以前使用的语言与软件包管理器使用)
- 如何在用户更改Windows中的语言键盘布局时得到通知
- 如何在OSX中使用c++获取当前用户的语言环境
- 用户界面 - 将 GUI 添加到C++软件的最佳语言
- 将用户定义的规则添加到现有语言