gpt4 book ai didi

编译并运行一串C源代码

转载 作者:行者123 更新时间:2023-11-30 14:43:13 25 4
gpt4 key购买 nike

所以,我想编译并运行一串C源代码,其中该字符串是一个const char*并代表整个程序。它应该取自常量或构造字符串,例如

const char* prog = "#include <stdio.h> int main(void) {puts(\"foo\"); return 0;}"

我已经尝试过tcclib ,但它目前并未在 Mac OS 上构建,并且由于缺乏一致的维护者,我认为这不是一个可行的方法。

我主要是想问这是一种拥有可编译为 C 的编程语言的后端的方法。如果 gccclang 中有一些库函数,这也行。

注意:这具体是关于从 C 编译 C 代码,而不是将其注入(inject)到进程中。

最佳答案

@bruno My idea was not having to deal with different windows and unix path names (windows utf-16 pathnames). But perhaps just calling gcc is a preferable solution.

我认为调用 GCC 最简单。然而,仅仅因为您将 GCC 作为外部进程调用,并不意味着您必须将生成的 C 写入文件。

GCC 能够从标准输入中获取输出。这是一个用 Bash 编写的示例。

echo "main(){}" | gcc -x c -

C 中也有同样的事情:

#include <stdio.h>
#include <string.h>

const char *prog = "#include <stdio.h>\nint main(void) {puts(\"foo\"); return 0;}";

int main() {
FILE *proc = popen("gcc -x c -", "w");
fwrite(prog, sizeof(char), strlen(prog), proc);
pclose(proc);
}

这是同样的事情,但有错误处理:

#include <stdio.h>
#include <string.h>

const char *prog = "#include <stdio.h>\nint main(void) {puts(\"foo\"); return 0;}";

int main() {
FILE *proc = popen("gcc -x c -", "w");
if(!proc) {
perror("popen gcc");
}
fwrite(prog, sizeof(char), strlen(prog), proc);
if(ferror(proc)) {
perror("writing prog");
}
if(pclose(proc) == -1) {
perror("pclose gcc");
}
}

我认为这是实现这一目标的最佳方式。

关于编译并运行一串C源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54079038/

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