argv[0] 總是執行檔名稱,還是只是約定?
向 C 中的 main() 函數提供參數時或 C 應用程序,就會出現問題:argv[0] 是否總是代表可執行檔的名稱?或者這只是一個廣泛的約定,不能保證普遍適用性?
深入研究標準
為了確定 argv[0} 的真實性質,我們必須查閱相關標準。 ISO C11 明確規定,當 argc 超過零時,「argv[0] 代表程式名稱」。然而,它重要地補充說,「如果程式名稱在主機環境中不可用,則argv[0][0] 應為空字元。」
此澄清表明argv[0] 僅體現程式名稱(如果可以從主機環境輕鬆取得)。此外,該標準強調 argv 中包含的值完全是實作定義的,受主機環境的影響。
程式名稱的含義
因此,如果主機環境無法提供程式名稱,則程式名稱可能為空,或者如果可訪問,則程式名稱可以採用任意形式。理論上,主機環境甚至可以選擇提供一個亂碼的程式名稱來娛樂!
注意事項
但是,必須注意「實現定義的」 「在ISO 標準中具有獨特的含義。實施者有義務詳細記錄其具體行為。因此,即使像UNIX 這樣因透過exec 系列指令靈活地用任意內容填充argv[0] 而臭名昭著的平台,也必須正式記錄他們的做法。
以上是`argv[0]` 總是 C/C 中的可執行檔名稱嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!