C または C で main() の機能を利用する場合、次のような永遠の疑問が生じます。実行可能ファイルの名前を明らかにするために argv[0] に頼ることができますか、それともそれは普遍性のない単なる慣例でしょうか?適用性?
この謎を解明するために、標準化の歴史を詳しく調べてみましょう。
согласно ISO C11、argv[0] にある文字列、 argc がゼロを超える場合、 はプログラム名を表します。ただし、この表現は絶対的なものではありません。プログラム名がホスト環境の奥深くから見えない場合、argv[0][0] はヌル文字に戻ります。
不気味なことに、標準では argv[0] がプログラム名を「表す」というアンダースコアが付けられます。同一でない表現が生じる可能性が残されています。この不確実性は、その真実性を脅かしています。
問題をさらに謎に包み込むために、標準では、argv[0] から argv[argc-1] に格納されている値はホスト環境の気まぐれに影響され、
これ謎めいたスタンスは、ホスト環境に argv[0] を自由に操作する権限を与えます。プログラム名は消えたり、空の文字列に置き換えられたり、コードブレーカーを白紙にするような複雑な暗号に変形したりする可能性があります。
明らかな無政府状態にも関わらず、ISO 標準は、この混乱における秩序の尺度。実装定義とは、標準的な用語として、argv[0] の処理を説明するドキュメントを提供することを実装に義務付けるものです。 exec ファミリが argv[0] に大混乱をもたらす UNIX の野蛮な領域でも、標準ではそのような逸脱を文書化することが義務付けられています。
argv[0] は頻繁に実行可能ファイルへのパスを明らかにする照明のビーコンですが、その精度と一貫性はホスト環境の手に委ねられます。 argv[0] の正確性を確認するには、ホスト環境のドキュメントを参照することが不可欠なツールになります。ただし、argv[0] が最終的なプログラム名として普遍的に有効であるかどうかは、依然としてとらえどころのない夢です。
以上が実行可能ファイルの名前を提供する argv[0] を常に信頼できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。