簡體   English   中英

主過程與發射過程之間的不對稱

[英]Unsymmetry between main and launching process

AC主要方法有簽名

int main(int argc, char** argv) {
}

它將獲得命令行參數數組。 但是,當嘗試啟動應用程序時(例如使用CreateProcessShellExecute) ,它們僅接受2個參數,一個用於啟動應用程序,一個用於參數。 為什么參數也沒有指定為數組? 為什么每個使用其他應用程序的應用程序都必須處理轉義的命令行參數,例如,在調用帶有兩個可能包含空格或引號的任意文件名的比較工具時?

在極少數系統上,實際程序執行實際上是從main (或WinMain )或類似函數開始的。 取而代之的是,編譯器告訴鏈接器使用一個特殊的函數,通常在C的意義上,它實際上並不帶任何參數。

命令行參數(如果有的話 )可以通過匯編級的特殊寄存器傳遞,或者需要使用特定於操作系統的特殊功能(例如Windows API中的GetCommandLine )來獲取。

在Windows上, GetCommandLine函數確實確實將命令行作為單個字符串獲取。 就像它被傳遞給例如CreateProcess

對於Windows控制台程序,特殊的“ entry”函數會進行其他一些初始化(如設置stdin等),然后調用GetCommandLine來獲取命令行參數,然后將其解析為適合於main函數的數組,然后被稱為。


如果您查看POSIX世界(例如Linux和macOS所在的地方),那么它們具有exec函數家族,的確為參數提供了數組。 或解析為此類數組的變量參數列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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