【问题标题】:Is there a way to run C code that's stored in a string [duplicate]有没有办法运行存储在字符串中的 C 代码 [重复]
【发布时间】:2023-04-11 12:04:01
【问题描述】:

我想知道是否有办法运行以字符串形式存储在变量中的代码。即str code = "i=5+6" 有人有什么想法吗?

【问题讨论】:

  • 您要解决的问题是什么?你试过什么?你指的是一个宏,一个别名?具体
  • @ryyker 我想他想要c相当于python的exec('i = 5 + 6')
  • 编写一个能够理解字符串中代码的语法(和语义)的解释器,将字符串传递给解释器并让它评估代码。
  • C 没有内置任何东西,没有。但是谷歌搜索“c expression evaluator source code”会发现很多表达式评估器。

标签: c


【解决方案1】:

C 语言本身没有许多解释语言中的求值函数。

对于解释型语言,源代码被传递给解释器执行,以后很容易将字符串传递给同一个解释器。

C 通常是一种编译语言,它被传递给编译程序,编译程序将 C 代码翻译成 CPU 指令,由 CPU 直接执行。您的字符串内容也需要发生同样的事情。然而,运行已编译 C 程序的系统甚至可能没有安装编译器,因为编译器不需要运行最终程序,只需创建它。

要动态运行 C 代码,您的程序需要内置完整的编译器或 C 解释器。

另见:

Is there an interpreter for C?

https://www.drdobbs.com/cpp/building-your-own-c-interpreter/184408184

这对初学者来说不算什么,不过,这是大多数 C 专家甚至不会考虑的事情。

如果您需要在运行时动态执行代码,我能想到的最简单的方法就是使用 Lua。 Lua 解释器可以链接到你的程序中,它对于语言解释器来说非常小,然后你可以在运行时将一串 Lua 代码传递给解释器。

https://www.lua.org/

当然,其他语言(例如 Lisp)的解释器甚至更小,但恕我直言,大多数程序员不会发现这些其他语言非常吸引人,而 Lua 会立即对他们来说很常见。

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多