首頁 >後端開發 >C++ >`argv[0]` 總是 C/C 中的可執行檔名稱嗎?

`argv[0]` 總是 C/C 中的可執行檔名稱嗎?

DDD
DDD原創
2024-12-09 09:27:06837瀏覽

Is `argv[0]` Always the Executable Name in C/C  ?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn