2013-03-18 24 views
-1

我想知道參數傳遞的命令行參數是如何工作的?我的大會有點生疏。我知道一個函數的參數被調用者壓入堆棧。那麼命令行參數呢?它們如何被推入主函數的堆棧框架?在調用堆棧上推命令行參數(C)?

由於

+0

我瞭解了去年的所有情況,但並沒有完全堅持。然而,我知道你可以通過編寫簡單的函數並通過帶有-S標誌的g ++運行它們來產生彙編代碼作爲輸出。 – Wug 2013-03-18 15:24:32

+0

沒有搜索引擎,你在哪裏? – KevinDTimm 2013-03-18 15:26:44

+0

谷歌搜索..但只找到關於常規參數,而不是命令行參數的答案.. – rabbit686 2013-03-18 18:04:31

回答

0

在標準C,main可以採取至少兩種ARGS - 第一個是命令行參數的數目,並且第二個是指向它們的指針數組。它們出現在堆棧上的順序是實現定義的,但C的通用約定是將它們從右向左推,以便隨後的參數出現在更高的地址處。

就原始組裝而言,儘管......與組裝相關的大多數事情一樣,它依賴於平臺。 Linux爲你解析命令行參數,並在棧上傳遞指針。在Windows中,命令行通過調用操作系統(GetCommandLineAGetCommandLineW)進行檢索,並自行解析。如果您在Windows應用程序中使用C或C++,則命令行也是WinMain的參數之一。

+0

所以命令行參數被操作系統壓入堆棧? – rabbit686 2013-03-18 18:06:18

+0

@ user1640669:同樣,這取決於平臺。既然你還沒有提到任何有關你的特定環境的事情,我不能肯定地說它做了什麼。 Linux顯然確實(至少在某種程度上); Windows沒有。其他人,我不知道。這就是我可以說,直到你來了一些更多的信息。 :P – cHao 2013-03-18 18:47:28