2012-04-16 136 views
1

所以基本上我所需要的不是一個特定的代碼(當然這很好),而只是一個關於如何實現我的目標的想法和方法。如何在程序運行時生成並編譯C++代碼?

1)我必須用C++創建一個程序,它生成一個C++代碼的小例子,每次都有點不同。 (這對我沒有任何問題,我將使用模板並隨機化代碼中的一些變量,這將使其每次都具有唯一性。)

2)我將顯示生成的代碼,用戶必須輸入,他認爲代碼打印出來。

這裏是哪裏出現問題開始

3)我得把生成的代碼和編譯它在某種程度上得到與該程序會打印出的文本字符串。

4),然後比較一下用戶已經輸入的字符串。

所以步驟3)是我停下來,不能弄明白沒有幫助......我想寫生成的代碼在一個.cpp文件的功能,然後調用該功能,但我無法讓它工作,所以我開始思考,我應該問一個專家,也許還有一些其他的方法或想法如何實現這一點。

回答

2
  1. 寫.cpp文件
  2. 調用編譯器(或作出或等效的編譯系統)
  3. 如果編譯失敗,可能顯示錯誤?
  4. 如果編譯成功,運行生成的程序並顯示輸出

這可能是最簡單的包裝2/3/4到腳本,並調用與systempopen。該腳本可以確保文件名是唯一的,將stderr摺疊到標準輸出等。等等。

您正在運行的程序並不真正與編譯代碼進行交互,只是讀取輸出,因此將其保存爲單獨的進程可能最容易的。該腳本可以添加一些標記來幫助區分程序輸出中的編譯器輸出/錯誤。


我沒有寫了多年的批處理文件,但一旦你知道如何在命令行(ref)運行你的編譯器,你可以寫一個腳本:

  1. 編譯.cpp文件
  2. 執行結果.exe
  3. 其輸出重定向到文件

然後,在C++中,您只需將代碼保存到腳本所需的.cpp文件中,然後執行腳本,如system("myScript.bat"),然後讀取輸出文件。

如果您不想編寫單獨的批處理腳本,則可以調用system一次來調用編譯器,然後再次執行結果.exe

+0

這聽起來很有希望,但stil,我不知道如何調用編譯器。實際上這就是我所需要的,我需要編譯一個nother .cpp文件,同時執行主文件...你能更具體嗎? – krishkule 2012-04-16 13:26:46

+0

你如何調用你的編譯器是平臺特定的(和編譯器特定的)。你能告訴我你現在使用的是什麼平臺,編譯器和編譯系統嗎? – Useless 2012-04-16 13:30:57

+0

我正在使用MS visual studio 2010 Express,我真的不能告訴你更多(我不知道)。我沒有改變任何事情都是默認的,希望這是足夠的 – krishkule 2012-04-16 15:02:46

0

你爲什麼不編譯使用系統生成的代碼獨立的()調用? (「g ++ temp.cpp -o temp.exe); - 這種東西,然後根據返回值 您可以再次運行temp.exe,就像系統(」temp.exe「);您可以打印的當然輸出從temp.exe到一個文件,讀取文件,以獲得的temp.exe輸出到當前的程序..

0

您可以調用C++編譯器,就像你'd調用任何外部工具,例如system("g++ test.cpp")或使用popen或其他平臺提供的其他工具

您也可以考慮將實現編譯器的庫集成到yo中你的程序。爲此,你可能想看看clang和llvm。

相關問題