10: 2010-02-06 (土) 14:19:13 lina[6] [7] | 11: 2010-02-07 (日) 11:57:31 lina[6] [8] | ||
---|---|---|---|
Line 307: | Line 307: | ||
-g01_getcmdlin_str_o0(int i, int n, void *p) | -g01_getcmdlin_str_o0(int i, int n, void *p) | ||
-g01_getcmdlin_str_m0_1(int j, int n, void *p) | -g01_getcmdlin_str_m0_1(int j, int n, void *p) | ||
+ | |||
+ | COLOR(blue){うっちゃんの予測を検証すべく、実験をしてみた} | ||
+ | |||
+ | COLOR(red){ちなみにオイラの予想してたこと。intタイプと同じように、コード内に規定値を打ち込むような形式だと思ってた} | ||
+ | 例: | ||
+ | intタイプは戻り値として取得したコマンドラインパラメータを返してくれる。 | ||
+ | g = g01_getcmdlin_int_s(0); // 0番目の引数を取得し、gに渡す | ||
+ | 省略可能の場合・・・ | ||
+ | g = g01_getcmdlin_int_o(0,100); // 0番目の引数を取得し、もしなかったら規定値として | ||
+ | 100を返す | ||
+ | |||
+ | この流れで行くとstrタイプも・・・・ | ||
+ | *g = g01_getcmdlin_str_s0(0); // 0番目の文字型引数を取得し、gに渡す | ||
+ | 省略可能の場合・・・ | ||
+ | *g = g01_getcmdlin_str_s0(0,"イカ自身"); // 0番目の文字型引数を取得し、gに渡すが、 | ||
+ | もし指定がなかったら規定値として | ||
+ | 「イカ自身」という文字を返す | ||
+ | |||
+ | しかし、実際には戻り値がないタイプだったのでこれは間違い。 | ||
+ | |||
+ | こんなコードを書いてみる。 | ||
+ | #include <guigui01.h> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | unsigned char cmdusage[] = { | ||
+ | 0x86, /* これは決まり文句なのでとりあえず変更しない */ | ||
+ | 0x55, /* 通常モード(引数名省略不可) */ | ||
+ | |||
+ | 0x0c, 2, 'o','p','t', 0x3c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | ||
+ | |||
+ | 0x40 /* 最後のこれも決まり文句なので変更しない */ | ||
+ | }; | ||
+ | |||
+ | void G01Main() | ||
+ | { | ||
+ | g01_setcmdlin(cmdusage); //コマンドライン定義 | ||
+ | |||
+ | char *buffer = g01_bss1a1; //お便利バッファ2MBを宣言 | ||
+ | g01_getcmdlin_str_s0(0,100,buffer); //引数受け取り | ||
+ | |||
+ | g01_putstr0(buffer); | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | -これは問題ない。引数無指定ならUsageが表示される。 | ||
+ | -opt:uniba-G! なんて引数を与えると、ちゃんと画面に表示されて終了する。 | ||
+ | |||
+ | -ここで、引数のタイプを省略可能にしてみる。 0x1c, 2, 'o','p','t', 0x3c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | ||
+ | -このままコンパイルしても、エラーになってしまう。(引数指定と受け取り指定がズレるからかなたぶん) | ||
+ | -なので、受け取り側も省略可能タイプと指定。 g01_getcmdlin_str_o0(0,100,buffer); //引数受け取り | ||
+ | -これでいままでと同じように動作する。(しいて違いを言えば、無指定の時、省略可能なのでUsage表示をしない) | ||
+ | |||
+ | |||
+ | うーん・・・やはり、intが特殊だったって法則でいいのかな。COLOR(blue){本来は規定値なんて概念はない。自分で戻り値を検証するコードを書け。・・・で。intだけは便利にしといたよ!・・・みたいな? www} | ||
**g01_getcmdlin_fopen系 [#t3509916] | **g01_getcmdlin_fopen系 [#t3509916] | ||
Line 343: | Line 397: | ||
-g01_getcmdlin_fopen_o_0_4(int i) | -g01_getcmdlin_fopen_o_0_4(int i) | ||
-g01_getcmdlin_fopen_o_3_5(int i) | -g01_getcmdlin_fopen_o_3_5(int i) | ||
+ | |||
+ | |||
+ | COLOR(blue){うっちゃんの予測を検証すべく、実験をしてみた} | ||
+ | |||
+ | こんなコードを書く。 | ||
+ | #include <guigui01.h> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | unsigned char cmdusage[] = { | ||
+ | 0x86, /* これは決まり文句なのでとりあえず変更しない */ | ||
+ | 0x55, /* 通常モード(引数名省略不可) */ | ||
+ | |||
+ | 0x0c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | ||
+ | |||
+ | 0x40 /* 最後のこれも決まり文句なので変更しない */ | ||
+ | }; | ||
+ | |||
+ | void G01Main() | ||
+ | { | ||
+ | g01_setcmdlin(cmdusage); //コマンドライン定義 | ||
+ | |||
+ | char *buffer = g01_bss1a1; //お便利バッファ2MBを宣言 | ||
+ | g01_getcmdlin_fopen_s_0_4(0); //引数受け取り&ファイルオープン | ||
+ | |||
+ | jg01_fread0_4(2 * 1024 * 1024, buffer); /* 最大2MB, 終端に0がつく */ | ||
+ | g01_putstr0(buffer); | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | -まずこれは正常に動作した。引数は省略不可なので指定しないとUsageが表示される。(一種のエラーかな・・) | ||
+ | -次に、引数側を省略可能にした。つまりこう。 0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | ||
+ | -引数を指定しないと跳んでしまう・・・・ | ||
+ | -引数を前回と同じもので指定しても、エラーが返される。 | ||
+ | debug: cmdlin_fopen: 4 56 test.txt | ||
+ | c_api: junk_fopen: error | ||
+ | |||
+ | 省略可能引数なので、それに合わせるべく、fopen側をイジる。つまり、g01_getcmdlin_fopen_o_0_4(0); | ||
+ | |||
+ | -跳ばない。でもUsageを表示せずに終了(・・・これはええと。正しい動作なのかな???たぶん) | ||
+ | -引数(ファイル名)を指定すると、最初の引数省略不可の場合と同じ動作をしてくれる(つまり、正常動作?) | ||
**g01_getcmdlin_argc [#t240815c] | **g01_getcmdlin_argc [#t240815c] |
(This host) = http://osask.net