3: 2009-01-12 (月) 23:38:34 |
4: 2009-01-13 (火) 12:42:05 |
| (ex0015.cと同じ内容) | | (ex0015.cと同じ内容) |
| } | | } |
| + | -これをmakeすると139バイトになります。でも動作はex0016と完全に同じです。 |
| + | ---- |
| + | -じゃあもう一つ小さくする技を。ex0017では引数が「s:str」と「n:#」でしたが、これを「str:string」と「num:number」にしたいとしましょう。まあどうせ順序を覚えていれば「str:」や「num:」とタイプする必要はないですしね。それなら分かりやすいほうがいい、と考える人もいるでしょう。 |
| + | --そういえば今まで説明してきませんでしたが、引数名は半角で文字コード0x21~0x7eの範囲で(つまり数字はいいけどスペースはダメ)、「"」や「:」を含まないものにしなければいけません。というか記号類は避けたほうがいいです。確実に使っても問題がない記号を以下に挙げておきますが、とにかく記号なんて使うと、OSによっては(というかシェルによっては)、入力しにくくなること請け合いです(後半のものはできれば使わないで置いたほうがいいんじゃないかと思ったもの)。 |
| + | !#'=~+-/@_\^` ;?*& |
| + | -ということでex0018.cです。 |
| + | #include <guigui01.h> |
| + | |
| + | unsigned char cmdusage[] = { |
| + | 0x86, 0x50, |
| + | 0x02, 's', 't', 'r', 0x34, 0x01, 'i', 'n', 'g', |
| + | 0x12, 'n', 'u', 'm', 0x11, 0x01, 'b', 'e', 'r', |
| + | 0x40 |
| + | }; |
| + | |
| + | void G01Main() |
| + | { |
| + | (ex0015.cと同じ内容) |
| + | } |
| + | -ここでまたサイズを節約するテクニックを使いました。というのは引数説明のところで、0x01というのを使っているからです。これはusage表示するときに引数名に置換されます。これを使うことで 0x3c や 0x1c を使わずに済んでいますし、そもそも置換することでそれぞれ2バイト節約しています。 |
| + | -makeすると147バイトになります。一応usage表示を見て確認しておきましょう。 |
| + | >efg01 ex0018.g01 |
| + | usage>ex0018.g01 [str:]string [[num:]number] |
| + | ---- |
| + | -こうしてコマンドラインにたくさん引数を使うようになると、usage表示がかなり長くなることがあります。「usageなんかみないぜ!そんなの気にしない」っていう人はそれで問題ないんですが、やっぱりどうせならきれいにusage表示してほしいって思う人もいるでしょう。ここではその方法を説明したいと思います。 |
| + | -ということでex0019.cです。 |
| + | #include <guigui01.h> |
| + | |
| + | unsigned char cmdusage[] = { |
| + | 0x86, 0x50, |
| + | 0x02, 's', 't', 'r', 0x34, 0x01, 'i', 'n', 'g', |
| + | 0x87, |
| + | 0x12, 'n', 'u', 'm', 0x11, 0x01, 'b', 'e', 'r', |
| + | 0x40 |
| + | }; |
| + | |
| + | void G01Main() |
| + | { |
| + | (ex0015.cと同じ内容) |
| + | } |
| + | -これをmakeすると148バイトになりますが、注目ポイントは 0x87, です。これがあると、usage表示のときにここで改行します。それ以外の効果はありません。この改造をしてももちろん「num:」は引数番号1のままです(2になったりはしない)。 |
| + | -これをusage表示させるとこうなります。 |
| + | >efg01 ex0019.g01 |
| + | usage>ex0019.g01 [str:]string |
| + | [[num:]number] |
| + | ---- |
| + | -さてここまでで整数型引数と文字列型引数を紹介してきましたが、次はフラグ型引数を紹介します。これは値を指定するのではなく、単にその引数名が現れたかどうかだけを問題にします。・・・どんな例にしましょうか。じゃあたとえばiからnまで数えるプログラムを使いましょう。 |
| + | |
| -(書き途中) | | -(書き途中) |
- | //-0x01 | |
- | //-複数指定 | |
| //-(フラグ型) | | //-(フラグ型) |
- | //-(usage改行) | + | //-複数指定 |
| //-(ファイル例はtypeコマンド) | | //-(ファイル例はtypeコマンド) |
| | | |
| * こめんと欄 | | * こめんと欄 |
| + | - このシリーズは好評のようです。実際にアプリを作って遊んでくれる人も出てきました。 -- [[K]] &new{2009-01-13 (火) 11:07:16}; |
| | | |
| #comment | | #comment |