argv[0] は常に実行可能ファイル名ですか、それとも単なる慣例ですか?
C の main() 関数に引数を指定する場合または C アプリケーションの場合、次のような疑問が生じます。argv[0] は常に実行可能ファイルの名前を表すのでしょうか?それとも、これは普遍的な適用性の保証のない、単なる広く普及した慣例なのでしょうか?
標準の詳細
argv[0} の本質を確認するには、次のことを行う必要があります。関連する規格を参照してください。 ISO C11 では、argc がゼロを超える場合、「argv[0] はプログラム名を表す」と明示的に規定されています。ただし、「プログラム名がホスト環境から利用できない場合、argv[0][0] は null 文字になる」という重要な点が追加されています。
この明確化により、argv[0] はプログラムを具体化するだけであることが明らかになります。ホスト環境から簡単に取得できる場合は、名前を付けます。さらに、この標準では、argv に含まれる値は完全に実装定義であり、ホスト環境の気まぐれに左右されることを強調しています。
プログラム名の意味
したがって、ホスト環境にプログラム名を提供できない場合はプログラム名が空白になる可能性があり、アクセス可能な場合は任意の形式をとる可能性があります。理論的には、ホスト環境は面白半分に意味不明なプログラム名を付けることさえできます!
注意事項
それでも、「実装定義」であることに注意することが不可欠です。 「」には ISO 標準内で明確な意味合いがあります。実装には、その特定の動作を詳細に文書化する義務があります。したがって、exec ファミリのコマンドを通じて argv[0] に任意のコンテンツを設定する柔軟性で悪名高い UNIX のようなプラットフォームでも、その実践方法を公式に記録する必要があります。
以上がC/C では `argv[0]` は常に実行可能ファイル名ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。