0

Windows System Programmingという本を読んでいます。第二章には、プログラム Cat.c があり、Linux の cat コマンドを実装しています。コードはhttp://pastebin.com/wwQFp599です

20 行目で、関数が呼び出されます。

 iFirstFile = Options (argc, argv, _T("s"), &dashS, NULL);   

オプションのコードはhttp://pastebin.com/QegxxFpnです

ここで、オプションのパラメーターは

(int argc, LPCTSTR argv [], LPCTSTR OptStr, ...)

1) この「…」は何ですか?LPCTSTR 型の引数を無制限に指定できるということですか?

2)プログラムをcat -s a.txtとして実行すると

a) argc は何で、その理由は何ですか? b) argv は何で、その理由は何ですか? c) _T("s") とは? ここで _T が使用されるのはなぜですか? d) なぜ &dashS が使用されるのですか? おそらくブール値のアドレスです。しかし、これを使用する背後にあるロジックを理解できません。e) 最後のパラメータとして NULL を渡したのはなぜですか?

私はCプログラミングの基本的な知識を持っていますが、これらのことは本当に混乱しています. 親切に説明してください。

4

2 に答える 2

1

1) ユーザー名 Cornstalks が指摘したように、「...」は可変引数リストです。printf()のような関数に可変数の引数を持たせることができますが、それらの型と引数の数は引数の 1 つに指定する必要があります ( printf()のフォーマット文字列のように)。*va_list.h* またはstdarg.hを参照してください。

2) a) argcは、コマンド ラインで指定された引数の数です。

b) argvは引数配列で、文字列の配列です。

c) _T()はマクロです。私はそれをTEXT()として知っています。基本的に、プログラマはコード全体を変更することなく、ビルド時に ASCII 文字列または Unicode 文字列を使用できます。UNICODEマクロが定義されている場合、 _T()マクロの引数として指定された文字列はL"string"になり、それ以外の場合は"string"になります。そのため、一部の関数の最後の文字が A または W になっています。たとえば、UNICODEが定義されていてOutputDebugStringAが定義されている場合、 OutputDebugStringはデフォルトでOutputDebugStringWになります。UNICODE が定義されていない場合。名前の最後の文字が A である関数は ASCII 文字列のみを受け入れ、W は Unicode 文字列のみを受け入れます。この目的のために定義された型もあり、TCHAR のデフォルトはCHARまたはWCHARであり、別のエントリ ポイント、つまり_tmain()もあります。

d) &variableは、変数のアドレスを意味します。変数の内容のメモリ内の場所を関数に渡すために使用されるため、関数が変数の値を変更すると、変数は使用されている他の場所で変更されます。

e) 関数プロトタイプを確認する必要があります。

プログラミングを学びたいなら、Windows プログラミングを始めることが道だと誤解されているように思えます。C および C++ プログラミング言語はデフォルトで OS に依存しないため、最初に独立した部分を学習する必要があります。「C Programming : A modern approach」をお勧めします。

于 2013-09-10T07:12:24.513 に答える