これはかなり簡単な質問ですが、私はそれを行かせることはできません。私は最近Cで作業を始めましたが(最初はそれほど経験はありませんでした)、何が起こっているのかをよく理解することができます。もちろん、argcとargvがmain()に渡されると、引数の数と引数のベクトルをそれぞれ表すことがわかります。私が理解しようとしているのは、コンパイラがint argcをコマンドラインから渡された引数の数として解釈する方法を知っていることです。もし私がmain(つまりint testcunc(int argc、char * argv []))を真似しようとする単純な関数を書いて、文字列を渡すと、コンパイラは "期待されたint型だが引数型はchar *私が期待するように。コマンドライン引数がmain()に渡されたとき、これはどうやって解釈されますか?argcに関して(それが何を意味するのか疑問に思わない)
3
A
答えて
4
、main
は、プロセスの起動時に呼び出される最初のルーチンではありません。通常は、リンクするときにプログラムに組み込まれたCライブラリによって提供される_crt0
のような特別なエントリポイントです。この特別なエントリーポイントのコードは、(何らかの方法でCの外で、特にオペレーティングシステムに)渡されたコマンドライン情報を調べ、main
の引数リストを構築します。それ以降は、main
と呼ばれます。
+0
ありがとう、これは私が知りたかったものです。 –
3
あなたが(例えば、コマンドラインから)自分でargc
値を渡さない、それだけでargc
ため正確なコンテンツのように、お使いの環境(ランタイム)によって供給されています。 argc
の値は非負でなければならない(インジケータがを採掘)
は、
C11
、章§5.1.2.2.1を、詳しく説明する[以下注]。
argv[argc]
は、NULLポインタです。、スタートアップをプログラムする前にホスト環境によって 実装定義の値が与えられた文字列へのポインタを含むものとアレイメンバー
argc
の値がゼロより大きい場合argv[0]
介してargv[argc-1]
含め。 の目的は、プログラムの起動に先立って決定されたプログラム情報に、ホスト環境の別の場所から を提供することです。 [Note start]ホスト環境が の文字列に大文字と小文字の両方を使用できない場合、実装 は、文字列が小文字で確実に受信されるようにしなければなりません。 [注終了]一般的なCの実装で
関連する問題
- 1. あまり意味がないと思われる関連
- 2. URLに疑問符(?)とアンパサンド(&)の意味は何ですか?
- 3. この疑問符(水銀)は何を意味しますか?
- 4. この関数で疑問符は何を意味しますか?
- 5. GSP/Grailsで疑問符は何を意味しますか?
- 6. action action = "?login":疑問符は何を意味していますか?
- 7. Angular 2の式の疑問符の意味は何ですか?
- 8. 、$「は何を意味し、それだけのスペースを意味してい
- 9. IIS 6のセッション状態が疑わしいと思われる
- 10. lintingスタイルとは何ですか?リンティングが何であるか疑問に思うそこに人々のため
- 11. MDNブラウザの互換性テーブルで疑問符は何を意味しますか?
- 12. リンカーエラー。これらのエラーが何を意味するかわからない
- 13. 疑問符の意味は? ' Linuxカーネルパニックコールトレースで?
- 14. ボディがない関数は何を意味しますか?
- 15. CSSの疑似要素の前にある "&"は何を意味しますか?
- 16. Visual StudioでC3867エラー、これが何を意味するかわからない
- 17. テンソルフローシェイプの疑問符はどういう意味ですか?
- 18. 0x0Fは何を意味していますか?そして、このコードはどういう意味ですか?
- 19. SQLクエリに関して遅いと思われるものは何ですか?
- 20. これらのオプションはそれぞれ何を意味していますか?
- 21. -peはスクリプトに関して何を意味しますか?
- 22. が疑問に思うのJava
- 23. 何を意味するかもし* Then *そして条件
- 24. ()はPerlサブルーチンの終わりに何を意味しますか?
- 25. パスセッションIDは、これは非常に些細な疑問を思わ
- 26. 私は疑問に思って
- 27. ファイルアイコンの疑問符はIntellijの意味ですか?
- 28. Javaのガベージコレクタに関してCMSが意味することは何ですか?
- 29. 私のERモデルが良いかどうか疑問に思っています
- 30. それが何を意味する「ブラウザへの輸出」へ
コマンドラインが文字列として渡されず、舞台裏でかなりの魔法が発生しています –
Cランタイムスタートアップコードは引数文字列(OS固有の方法で)を取ります。ピースに分割し、それらを通過させる 'main'を呼び出します。あるいは、ある種の場合(Unix-yシステム)、OS(より正確にはシェル)は文字列を解析し、それをCランタイムに分割して渡します。 –
関連:http://daviddeley.com/autohotkey/parameters/parameters.htm –