[英]Read a line of c code from file and execute in a c program
我有一個 C 程序,它為某些 x 值(main.c)計算 f(x)。 我需要從文件中獲取一行 c 代碼,該代碼是我要執行的函數(function.dot)。 例如 function.dot 將包含:
pow((1-x), 0.333);
我需要讀取此文件,獲取該函數並在我的代碼 (main.c) 中執行。 我怎樣才能做到這一點?
基本步驟是:
如果文件中的單行代碼可以是任何語言,那么使用像 Lua 這樣可以鏈接到主可執行文件的東西會容易得多。
我將提供一些選項:
切換到另一種解釋性語言,包括 python、ruby、perl、...
如果你在做小項目,我推薦這個選項。
用 C 實現你自己的解釋器。
解析您的輸入,分析它,執行它。 您可能會發現開源實現:一種選擇是俚語http://www.jedsoft.org/slang/doc/html/slang.html
調用 C 編譯器並動態鏈接它。
這取決於您的操作系統,但system
或exec
函數可幫助您調用編譯器來處理輸入文件。 如果您使用的是 Linux, dlsym
可以打開從您的輸入文件編譯的共享對象。 您可能需要將輸入文件轉換為 C 程序。 編譯速度很慢,但運行速度最快。
您有幾個我能想到的選項:1)切換到任意數量的解釋語言(python、perl 等),這些語言支持將其作為一種簡單的機制。 (例如:在python中
data = open("function.dot").read()
x = 5
eval(data) #note that this is unsafe if you can't trust data, and you might also need to play with environment
)
2)您可以將代碼包裝在它自己的c文件中......類似(但有更多錯誤檢查等......你可能不想這樣做)
void generate_c_program(char *line)
{
FILE *fp = fopen("myfile.c","wt");
fprintf(fp,"#include <math.h>\nint main(char *argv, int argc) {\n double x = atof(argv[1]); printf(\"%f\",(%s));}\n");",line); //this is also unsafe if you can't trust data
fclose(fp);
//now execute gcc myfile.c
//now execute a.out
//optionally cleanup by deleting a.out and myfile.c
}
3)有效地編寫您自己的編譯器/解析器(如果您以前做過這件事,並且您需要支持的函數/操作的數量很少,或者可能要大得多,並且不適合這個答案,那么這可能相當容易) )...可擴展的方式是使用 LEX/YACC 或類似的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.