簡體   English   中英

從文件中讀取一行c代碼並在ac程序中執行

[英]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) 中執行。 我怎樣才能做到這一點?

基本步驟是:

  1. 從文件中讀取該行。
  2. 生成一個新的源文件,該文件將代碼行包裝在適當的代碼中。
  3. 調用編譯器將該代碼編譯為共享對象/dll。
  4. 加載庫。
  5. 調用庫中的函數。

如果文件中的單行代碼可以是任何語言,那么使用像 Lua 這樣可以鏈接到主可執行文件的東西會容易得多。

我將提供一些選項:

  1. 切換到另一種解釋性語言,包括 python、ruby、perl、...

    如果你在做小項目,我推薦這個選項。

  2. 用 C 實現你自己的解釋器。

    解析您的輸入,分析它,執行它。 您可能會發現開源實現:一種選擇是俚語http://www.jedsoft.org/slang/doc/html/slang.html

  3. 調用 C 編譯器並動態鏈接它。

    這取決於您的操作系統,但systemexec函數可幫助您調用編譯器來處理輸入文件。 如果您使用的是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM