2011-02-23 41 views
0

我試圖解釋作爲輸入給出的公式:通行證的數據作爲代碼

y= y argv[1][s] 5; 

其中argv[1][s]可以+ - *例如。
y = y + 5;
y = y * 5;

我可以使用檢查特定的值,但它更有趣,找出爲什麼這不起作用。

錯誤C2146:語法錯誤:丟失 ';'標識符「的argv」

之前,我認爲發生的事情是+作爲'+'所以不會產生任何結果通過。有沒有辦法引用它?

+0

您可以加入一些示例代碼,以澄清問題? – 2011-02-23 11:25:59

+1

你一定要抓住一個初學C++的教科書! – Danvil 2011-02-23 11:49:25

回答

8

不,因爲這不是C++的工作原理。您的代碼在編譯時必須有意義,以便編譯器可以將其轉換爲一組固定的彙編指令。運行時文本不被「替換」;在某些解釋性語言中沒有「eval」的等價物。

如果你想做到這一點,你需要做的是這樣:

switch (argv[1][s]) 
{ 
case '+': 
    y = y + 5; 
    break; 
case '-': 
    y = y - 5; 
    break; 
case '*': 
    y = y * 5; 
    break; 
default: 
    std::cerr << "Unrecognised operator: \"" << argv[1][s] << "\"" << std::endl; 
    break; 
} 
+0

+1:但可能正確的單詞不是「已編譯」(Common Lisp已編譯但具有eval;文本並不是將代碼作爲數據處理的唯一可能方式 - 請參閱Lisp宏)。 – 6502 2011-02-23 11:38:56

+0

這就是我的支票。不加引號不一定是字面的。也許還有其他方法可以做到這一點。如果處理器可以執行該命令,爲什麼它必須在程序中指定,而不是輸入的一部分? – user490735 2011-02-23 11:39:53

+0

@ 6502:你對「編譯」是正確的。你能想出一個更好的術語嗎? – 2011-02-23 11:40:52