gpt4 book ai didi

C++ 从文本文件执行代码

转载 作者:行者123 更新时间:2023-11-28 00:01:52 24 4
gpt4 key购买 nike

标题说明了一切。像编译器但不一样。我希望从 C++ 中的外部源执行代码的特定部分。我不知道这是否可能,因为它在 Javascript、Python 等中是可行的。

假设我有一个标题为 sample.txt 的文本文件,如下所示:

int a = 10, c;
cin >> c;
cout << a + c;

然后我将在 main() 函数中调用文本文件并编译 .exe 文件。当我运行它时,它是否有可能动态地表现得好像文件中的代码嵌入其中并写入 10 + 输入?应更改源文件,下次运行时将应用不同的结果。顺便说一下,这只是一段示例代码,我可能想运行一些 for/while 循环以及 if 条件等。

PS:我知道如何从文件中读取并将其分配为整数或将其写入屏幕,但这不是我想要的。我需要编译通过的函数。谢谢。

最佳答案

有几种方法可以解决这个问题。

fork 命令行编译器和 fork 以运行结果,通过 STDIN/STDOUT 传递输入和输出

(虽然我知道你是从 C++ 调用程序中要求这个的,但为了简单起见,我在 bash 中演示了这个想法。)

文件:run_it.sh:

#!/bin/bash
set -e # Bail on the first error

FN_IN=./sample.txt
FN_WRAPPED=./wrapped.cc
FN_EXE=./wrapped
CC=g++

# Wrap the fragment in a full C++ program and compile it.
function build_wrapper () {
cat > $FN_WRAPPED <<'EOF'
#include <iostream>

using namespace std;

int main(int argc, char **argv) {
EOF
cat $FN_IN >> $FN_WRAPPED
cat >> $FN_WRAPPED <<'EOF'
return 0;
}
EOF
$CC -o $FN_EXE $FN_WRAPPED
}

# Run the wrapper, passing input through STDIN and reading the output from STDOUT.
function run () {
local IN=$1
echo $IN | $FN_EXE
}

# Remove the wrapper (both code and compiled).
function clean_up () {
rm -f $FN_WRAPPED $FN_EXE
}

build_wrapper

IN=24
OUT=$(echo "$IN" | $FN_EXE)
echo "Result = $OUT"

echo "Another result = $(run 16)"

clean_up

$./run_it.sh

Result = 34
Another result = 26

使用LLVM之类的东西在进程中编译函数并调用它

这种方法非常强大,但也有些复杂。

简而言之,您想要

  1. sample.txt读入内存。
  2. 将其编译成一个函数。
  3. 调用函数。

一些可能有用的链接:

关于C++ 从文本文件执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38277523/

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