2017-06-20 17 views
2

我正在製作Windows應用程序,其purpouse是通知我我的連接停機時間,並將它們記錄下來供以後使用/報告。現在我使用批處理腳本實現相同的目標,並將其納入項目的想法,但當我調查這個問題時,我碰到了多個建議,我應該not ever use system within any of my C++ programs。大多數時候,原因是'它是特定的'和'資源要求'我有想法,但我想知道:爲什麼它不好,我使用system如果我的意圖是要單獨製作應用程序對於Windows操作系統,特別是如果它將輕量級程序,將在後臺工作爲什麼'系統'不應該用於Windows特定的應用程序

編輯: 我想這需要澄清,讓更多來源:

  • system() in C/C++

    1. 這是一個非常昂貴和資源重函數調用
    2. 這是不可移植:使用system()使程序非常不可移植,即僅適用於在系統級別具有暫停命令的系統,如DOS或W INDOWS。但不是Linux,MAC OSX和其他大多數。
  • I strongly disagree with using the system function (太長,這裏引用)

  • Are system() calls evil?

    1. 系統()是不夠靈活。 (與我一起)
      1. 它不提供對正在執行的命令的控制。 (對我來說,我只需要腳本的返回值)
      2. 它不是平臺獨立的。 (現在,這將是一個問題,我真的很喜歡看到一個例子,它在不同的平臺上表現不同)
      3. 這是一個安全問題。 (同樣,這將是一個問題。有人可以提供一個潛在的安全問題與系統()?一個例子)

其中的一些參數是不相關的我的項目,現在所以我不介意他們在這個特殊情況下,但結合我所讀到的所有這些擔憂似乎表明,應該不惜一切代價避免使用system()電話。所以我想我應該使用另一種方法(我發現了一堆),但它們都對我來說似乎有點太複雜了至少(即:this,而不是隻附加我已經funcioning整個腳本,這是大約一半該長度(25線))

+1

永遠不要相信建議告訴你「永遠不要做點什麼」 –

+0

「多種建議」,比如什麼?來自哪裏?資源?引文?我們邀請哪些人在這裏發表評論。 – EJP

+0

你的問題中的鏈接似乎回答你的問題。 – nefas

回答

2

爲什麼system認爲是不好的做法:

  • 您不必在命令控制(是它在一個殼,一開始...)
  • 有安全問題(走樣的問題主要是)
  • 它不是便攜式
  • system不允許你這樣做先進的錯誤管理和輸入/輸出管理(例如,你不能保存命令的輸出在一個變量)

,如果你不關心這些問題,你可以使用system。計算機科學中幾乎沒有絕對的規則(*)。有些事情被認爲是不好的做法(如system)可以足夠好,只要你知道爲什麼這種做法很糟糕,並花時間考慮你爲什麼使用不好的做法(而不是使用良好的做法)。

所以,如果你不關心的參數爲什麼system不好,使用它,但請記住爲什麼它是一個不好的做法。

編輯:

(*)的規則一樣你不使用系統,或不要使用原始指針 ...這些規則應該遵守,除非你有一個很好的理由不至。

相關問題