サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
1: 2009-01-12 (月) 11:22:12 ソース 2: 2009-01-12 (月) 12:20:21 ソース
Line 77: Line 77:
       setdec(s, i, 3);        setdec(s, i, 3);
       s[3] = ' ';        s[3] = ' ';
-       s[4] = 0; /* 終端に0を入れる */+       s[4] = 0;
       g01_putstr0(s);        g01_putstr0(s);
     }      }
Line 122: Line 122:
       setdec(s, i, 3);        setdec(s, i, 3);
       s[3] = ' ';        s[3] = ' ';
-       s[4] = 0; /* 終端に0を入れる */+       s[4] = 0;
       g01_putstr0(skip_space(s));        g01_putstr0(skip_space(s));
     }      }
     return;      return;
 }  }
--これをmakeすれば?バイトになります。これを実行すると、以下のように表示されます。+-これをmakeすれば204バイトになります。これを実行すると、以下のように表示されます。 
 + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
 + 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 
 +     (中略) 
 + 7 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 98 
 + 7 988 989 990 991 992 993 994 995 996 997 998 999 
 +---- 
 +-さてここまではただ数字を数えているだけでした。こんなのくだらないと思うでしょう。でもこういうのは、たとえばcalenderの基礎になっています(calenderなんて結局は公式でその月が何曜日から始まるか計算した後は、1からその月の最終日までsetdecして表示しているだけです。表示をそろえるための多少の装飾はしていますけどね)。 
 +-それでは今回の最後は、もうちょっと計算らしいことをします。うーん、そうですね、たとえば、0から100までの和を計算してみましょう。ex0011.cです。 
 + #inlude <guigui01.h> 
 + 
 + void setdec(char *s, int i, int n) 
 + { 
 +     (ex0010.cと同じ内容) 
 + } 
 + 
 + char *skip_space(char *s) 
 + { 
 +     (ex0010.cと同じ内容) 
 + } 
 + 
 + void G01Main() 
 + { 
 +     int i, j = 0; 
 +     char s[11]; 
 +     for (i = 0; i <= 100; i++) { 
 +       j += i; 
 +     } 
 +     setdec(s, j, 10); 
 +     s[10] = 0; 
 +     g01_putstr0(skip_space(s)); 
 +     return; 
 + } 
 +-これをmakeすれば188バイトになります。これを実行すると、以下のように表示されます。 
 + 5050 
 +-もちろんこれは正解です。言うまでもないですが、これをたとえば1000までの和の計算に変えるにはどうしたらいいか分かりますよね?(ちなみに1万までの和にすると、32bitのintではオーバーフローしてしまうので、このプログラムでは正しい答えが出せません)。また、256から512までの和、なんていう変則的な計算もやろうと思えばできるはずです。それに、1から10までの積だって計算できると思います。 
 +---- 
 +-おまけ 
 +--[Q] 「ぐいぐい01」の使い方を覚えるメリットってなんですか?それはOSASK-HB用のアプリが書けるだけじゃないですか?あと小さいこと?(笑)。 
 +--[A] はい、結局はそれだけです。 
 +--[Q] 単純にC言語の勉強をするとしたら、普通にprintf()とかを使って勉強するほうが将来のためになりますよね? 
 +--[A] この先5年くらいまでを想定して、仕事に使える能力という意味なら、多分その通りです。 
 +--[Q] なんですかその言い草は?まるで10年後はそうではないみたいな言い方ですね。 
 +--[A] はい。ちょっと説明させてください。・・・まずあなたが何かC言語でプログラムを書いたとします。gcc向けということにしましょうか。そのプログラムは、10年後も無修正で動くでしょうか?hello程度なら問題なくコンパイルが通って動くと思います。しかし10KB程度の世間では比較的小規模とされるプログラムでさえ、gcc-2.x系でコンパイルできたものがgcc-3.x系では動かず、さらにgcc-3.x系で動くものもgcc-4.x系では動かないということが少なくありません。そんな数年ごとにメンテナンスを強いられるようなプログラミングがお望みでしょうか?そんな時代と共に変化するような技術を身に付けたいと思うでしょうか? 
 +--[Q] なんか急に偉そうですね。じゃあなんですか?「ぐいぐい01」はそうではないといいたいんですか? 
 +--[A] はい。「ぐいぐい01」はそうではありません。現在は開発途上でその理想を果たせていませんが、それが落ち着けば、一度書いたプログラムは永遠にソースの改変が必要になることはありません。それどころか、再コンパイルさえも不要です。だからソースをなくしてしまったり、クローズドソースでソースが手に入らなくても、将来にわたって安泰です。 
 +--[Q] でもx86でしか動かないんですよね?x86が主流じゃなくなったら、「ぐいぐい01」だって使えなくなるのでは?永遠は言いすぎですよ。 
 +--[A] それはそうです。おそらくその頃にはそのCPU用の「ぐいぐい01」が提供されるだろうとは思いますが、bit数の違いやアラインやエンディアンの問題などで、ソースの変更が必要にはなるでしょう。でもそれを言うなら、gcc向けのソースだって全く同じです。これが嫌ならjavaや.netをお勧めします、現状では。 
 +--[Q] それにgccだって古いバージョンを入手してコンパイルすれば済みますよ。 
 +--[A] その通りです。でも比較的新しいディストリビューションでは、古いバージョンのgccの入手性がそれほどよくないように思うのですが・・・まあこれが心配ではないのなら、gccでもいいと思いますよ。 
 +--[Q] それにLinuxのバージョンを上げなければ、そもそも再コンパイルの必要もないですよ。 
 +--[A] そうですね。でも古いPCが故障して新しいPCを買ったときに、その古いLinuxがその新しいPCにインストールできるでしょうか。・・・結局ソースを持っていなくても、どのOS上でも実行できる「ぐいぐい01」と、OSが変わるたびにソースから再makeしなければいけないgcc向けアプリ。どちらに将来性あるでしょうか。でも将来のことは分かりません。結局「ぐいぐい01」は永遠にマイナーかもしれません。メジャーになろうと努力する気がないので、マイナーのままで終わる可能性は十分に高いです。でも誰かがメジャーにしたいというのならそれをわざわざ妨害する気もありません。みんなが便利そうだと使っているうちに普及してしまうかもしれません。 
* こめんと欄 * こめんと欄
 +- 次回はコマンドライン引数関係のAPIについて書く予定。だけどこのページの人気がイマイチなら書くのはずっと先、ということで。 -- [[K]] &new{2009-01-12 (月) 12:20:21};
#comment #comment

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。