gpt4 book ai didi

c++ - 是否可以从用户输入的字符串或文件中使用 C/C++(或任何语言)等语言创建用户定义的数据类型

转载 作者:行者123 更新时间:2023-11-28 04:36:29 25 4
gpt4 key购买 nike

嗯,这可能是一个非常奇怪的问题,但我对此非常好奇。就这样吧……

注意:让我们在这里考虑 C 语言。

作为程序员,我们通常在源代码中使用适当的名称定义用户定义的数据类型(比如结构)。
假设我有一个程序,其中的结构定义为:

struct Animal {
char *name;
int lifeSpan;
};

而且我已经开始执行这个程序了。
现在,我的问题是;
如果我想在我的程序中定义一个名为“Plant”的新结构,就像上面提到的“Animal”一样,而不是在源代码本身中编写它的定义(目前显然不可能)而是从用户输入字符串(或文件输入)在运行时。
假设我的程序从名为 file1.txt 的文本文件中获取输入字符串,其内容为:

struct Plant {
char *name;
int lifeSpan;
};

我现在想要的是在我的程序中有一个名为“Plant”的新结构,它已经在执行中。程序应读取文件内容并创建文件中所写的结构,并在运行时将其附加到自身。

我在讨论中检查了 C++ 的解决方案 Declaring a data type dynamically in C++但它似乎没有一个非常有说服力的解决方案。

我正在寻找的解决方案是在编译器-链接器-加载器级别,而不是语言本身。
如果有人期待就此分享他们的想法,我将非常高兴和感激。

最佳答案

您要问的基本上是“我们可以将 C 实现为脚本语言吗?”,因为这是编译后可以执行代码的唯一方式。

我知道人们一直在写(主要是在评论中)这在其他语言中是可能的,但在 C 中是不可能的,因为 C 是一种编译语言(因此数据类型应该在编译时定义)。

然而,据我所知,这实际上是可能的(并且可能不像人们想象的那么难)。

有许多可能的方法(机器代码仿真 (VM)、JIT 编译等)。

一种方法是使用 C 编译器将 C 脚本编译为外部动态库(Windows 上为 .dll,Linux 上为 .so 等),然后比“加载”已编译的库并执行代码(对于懒惰的人来说,这几乎是 JIT 编译方法)。


编辑:

如评论中所述,通过使用这种方法,新类型作为外部库的一部分加载。

原始代码不会知道这个新类型,只有新代码(或库)会“知道”这个新类型并能够正确使用它。

另一方面,我不确定您为什么坚持需要使用静态类型和编译器-链接器-加载器级别的解决方案。

语言本身(C 语言)可以动态地(在执行期间)管理此任务。

以 Ruby MRI 为例。 Ruby 语言支持可以在运行时定义的动态类型...

...但是,这是在 C 中实现的,并且可以使用 C 中的代码来定义新的模块和类。这些不是可以在编译期间测试的静态类型(类型创建和识别在运行时执行)。

这是一个完美的例子,表明 C(作为一种语言)可以动态定义“类型”。

然而,这也是一个糟糕的例子,因为 Ruby 的方法很慢。自定义批准可以快得多,因为它可以避免与您可能不需要的功能(例如继承)相关的巨大开销。

关于c++ - 是否可以从用户输入的字符串或文件中使用 C/C++(或任何语言)等语言创建用户定义的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51275068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com