5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら、俺に聞け! <20>

1 :ともっち:02/05/15 19:36
C言語質問すれです

・comp.lang.c FAQ
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

・前スレ
<19> http://pc.2ch.net/test/read.cgi/tech/1020756993/

リンクは>>2-4あたり

2 :デフォルトの名無しさん:02/05/15 19:37
ともっちはいらん

3 :ともっち:02/05/15 19:38
僕は、17歳高校2年生。
3ヶ月前まではこんなことを言って皆さんをハァハァさせてしまいました。
http://pc.2ch.net/test/read.cgi/tech/1014370940/
だけど、それから優しいお兄さんたちにいろいろと教えてもらいながら、
勉強することで、C言語を大体マスターすることができました。

今ゲームを開発しているのですが、兄さんは僕自身を開発するとか
言って、なかなかプログラミングに集中させてくれません。
質問するたびに僕の体を触ってくるので正直困っちゃってます。
ぼく自身、そういうのは好きだけど、それだけじゃゲーム作りが進まないので、
ここに質問させてください。よろしくお願いします。
FAQ的な質問ならぼくも回答します。間違いがあれば、先輩方の訂正を
お待ちしております。

なお、課題の○投げは一応別スレへ、ということでお願いします。

プライベートな質問に関してはスレの950が過ぎたあたりから受け付けますので
それまでそういったことは、なるべく謹んでください。



4 :デフォルトの名無しさん:02/05/15 19:39
立て直します。

5 :デフォルトの名無しさん:02/05/15 19:44
>>4
ティムポ、萎えちゃった?


6 :デフォルトの名無しさん:02/05/15 19:44
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/


7 :デフォルトの名無しさん:02/05/15 19:46

コンパイラ

ぼくもgccは好きです!
http://gcc.gnu.org/

タダで使えるBorland C++!
http://pc.2ch.net/test/read.cgi/tech/1002377328/l50

Win32用の開発環境のみ。

gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

------------------------ ライセンスや機能などに問題あり ---------------------
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

その他
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html


8 :デフォルトの名無しさん:02/05/15 19:53
void mainloop()
{
 hoyuji();
}
void hyouji()
{
 katakana();
 hiragana();
}
void katakana()
{
 namae();
 tosi();
}
void namae()
{
 printf("なんていうの?");
}
という感じで,関数を何回も入っていく場合は,皆さんはだいたい何回程度に抑えていますか?

9 :デフォルトの名無しさん  :02/05/15 19:56
ネタはいいから・・・>>8

10 :デフォルトの名無しさん:02/05/15 20:03
>>8
必要ならいくらでも。
ただし、中を見なくても関数名を見れば何をしているか分かるようにすべし。

11 :デフォルトの名無しさん  :02/05/15 20:03
http://pc.2ch.net/test/read.cgi/tech/1016519243/  
http://pc.2ch.net/test/read.cgi/tech/1018453690/  
http://pc.2ch.net/tech/kako/1019/10193/1019372139.html  
http://pc.2ch.net/tech/kako/1020/10202/1020260813.html  
http://pc.2ch.net/test/read.cgi/tech/1020756993/  
http://pc.2ch.net/test/read.cgi/tech/1021459016/  

12 :デフォルトの名無しさん:02/05/15 20:28
>>9
・・・

13 :デフォルトの名無しさん:02/05/15 20:53
とりあえず、分からなければエキサイトのこのカテゴリへ
http://www.excite.co.jp/world/url/body/?wb_url=http%3A%2F%2Fvagina.rotten.com%2Fmotorcycle%2F&submit=%83E%83F%83u%83y%81%5B%83W%96%7C%96%F3&wb_lp=ENJA&wb_dis=2&wb_co=excitejapan

14 :デフォルトの名無しさん:02/05/15 21:07
もう20かい。
Cって多くの人が学んでいるのだなぁ

15 :デフォルトの名無しさん:02/05/15 21:09
>>14
C覚えてれば大体の構造化言語は使えるから。

16 :デフォルトの名無しさん:02/05/15 21:11
ていうかパート2以降のスレなら20くらいまであっという間なのは普通な気が。。

17 :デフォルトの名無しさん:02/05/15 21:21
>>14
大学や専門学校のプログラミングの授業で採用しているところが多いと思うし。

18 :デフォルトの名無しさん:02/05/15 21:32
だな。それで質問多い→回答多い→あっという間

19 :デフォルトの名無しさん:02/05/15 21:38
>>14
おかげでCの糞スレも多いという事実

20 :デフォルトの名無しさん:02/05/15 21:39
プログラマのたしなみでしょ。Cは。

21 :デフォルトの名無しさん:02/05/15 22:41
>>1
おまえなんかにゃきかねーよーだ

22 :デフォルトの名無しさん:02/05/15 23:12
int main(void)
{
int i, j;
int a[2][3] = { {1, 2, 3}, {4, 5, 6} };
int b[3][2] = { {6, 3}, {4, 5}, {1, 2} };
int c[2][2];

mat_mul(a, b, c);

for(i = 0; i <2; i++){
for(j = 0; j <2; j++){
printf("%d ", c[i][j]);
}
printf("\n");
}
}

質問してみます。
返却値返せって出る・・・何で?


23 :デフォルトの名無しさん:02/05/15 23:14
>>22
素人かい・・・。returnが無いぞ。

24 :デフォルトの名無しさん:02/05/15 23:20
。・゚・(ノД`)・゚・。 スイマセン上手くいきました(bcc55)

しかしUnixでやったときはreturn無しでも上手くいったのに・・・
ちなみにgnuwinだとreturnつけてもエラーが・・・(´・ω・`)

[main] C:\root\home\a.exe 1079 (0) handle_exceptions: Exception: STATUS_ACCESS_V
IOLATION
[main] a 1079 (0) handle_exceptions: Dumping stack trace to a.exe.core

25 :デフォルトの名無しさん:02/05/15 23:22
>>23
多分C++のプログラムと解釈されて、mainにreturnがなくても警告でなく
なってるんじゃない?

26 :デフォルトの名無しさん:02/05/15 23:25
>>24-25

>int main(void)

反論の余地はないよ。WindowsだからとかC++だからとか。

27 :デフォルトの名無しさん:02/05/16 07:18
>>26
反論の余地があるよ。C++だったら。
C++ は main という名前の関数は特別扱いで、末尾に return が無い場合は暗黙に return 0; があるものとされます。

28 :デフォルトの名無しさん:02/05/16 10:03
C言語質問ホンスレ!


29 :デフォルトの名無しさん:02/05/16 11:04
回転シフトするプログラムが欲しいです。お願いします。


30 :デフォルトの名無しさん:02/05/16 11:08
(var << x) | (var >> bits - x)

31 :デフォルトの名無しさん:02/05/16 11:13
>>8
 分割に意味があれば、幾らでも。
 でも、おいらオバカだからパーツとしての関数(標準関数みたいな純粋な機能)以外は、あまり分割しないなあ。
 初期化、ファイル読み込み、メイン、終了処理とかって感じで、相当に単純だと思う。
 所詮、上から下にしか処理を書けない非オブジェクト指向な人間なんで(^^;


32 :デフォルトの名無しさん:02/05/16 11:17
>>29

int main()
{
char *text="ShiftShift";
for( int i=0; i<=10000; ++i )
{
fputs( "\r", stdout );
fwrite( text+i%5, 1, 5, stdout );
}
}

33 :デフォルトの名無しさん:02/05/16 11:18
>>30
すいません。私バカなんで。。。
xとbitsは何に使うんでしょうか?

34 :29:02/05/16 11:21
>>32
スイマセン.ポインタとかファイルストリームは使わないでください。・゚・(ノД`)・゚・。


35 :デフォルトの名無しさん:02/05/16 11:35
>>33
回転シフトって何か曖昧な表現無しで説明して。
その後もう一回>>30を読んでみて。

36 :29:02/05/16 11:44
xとbitsわかりました。
右回転シフトの場合(1bitずつシフトする)
1.ある変数値aの一番右にあるビットをbに格納
2.aを右に1bitシフト
3.aの最上位ビット(一番左)にbを入れる
この3ができません。


37 :29:02/05/16 11:52
スイマセンワカリマシタ
|演算見落としてました。||これだと勘違い(恥)
アリガトウゴザイマス。・゚・(ノД`)・゚・。


38 :デフォルトの名無しさん:02/05/16 11:53
>>37
unsigned にすんの忘れんなよ

39 :デフォルトの名無しさん:02/05/16 12:04
ラジャー!

40 :デフォルトの名無しさん:02/05/16 12:25
今だ!パコンパコンパンパンしながら500ゲットォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ∧∧
       (゚Д゚ )           (´´
アアン !  ∧∧⊂  ヽ/       (´⌒(´
   ⊂(=^_^;=⌒ `つ つ≡≡≡(´⌒;;;≡≡≡
      し' ̄ ̄   (´⌒(´⌒;;
            ズザーーーーーッ


ドッコイショ・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄      (´´;;
      ∧∧∧∧        (´;;
  〃 (=^_^;=)Д-)
 〃 ⊂(。(。 つと| グィッ
   〃  > y ) /〜))
      .し'し' U


何見てんだゴルァ!!
 ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄
  パ  ∧∧ ∧∧  パ
  ン (=^_^;=)゚Д゚)  ン
     (.ノ(し⊂ニノ ))
ミナイデェ > y ) /≡〜
     .し'し' U

41 :デフォルトの名無しさん:02/05/16 12:28
ともっちと俺

42 :仕様書無しさん:02/05/16 12:32
>>41
前スレあまってるだろ

43 :デフォルトの名無しさん:02/05/16 12:36
つーかちょー迷惑なんですけど
根本の原因のともっちにはマジ責任とって氏んでほしい

44 :デフォルトの名無しさん  :02/05/16 12:59
あるライブラリを書いているときに、
ヘッダーを内部ようと公開用の二種類作るのは
変でしょうか?プログラム構成に関しては色々と
本に書いてあったりしますが、ヘッダーの良い
書き方なんかについて言及してるものは少ないですよね。

Linuxでいえば
linux/include
linux/asm-i386
みたいに分ける感じの方がいいのかな?

45 :デフォルトの名無しさん  :02/05/16 13:00
linux/include/linux
linux/include/asm-i386
の間違いです、すみません。

46 :デフォルトの名無しさん:02/05/16 13:10
ともっちってすごいね!
ダブルで1000げっと、おめでとう!
http://pc.2ch.net/test/read.cgi/tech/1020756993/1000
http://pc.2ch.net/test/read.cgi/tech/1013917354/1000

     ついでに1までとってるね。(w

47 :デフォルトの名無しさん:02/05/16 13:15
(((((,;,゚д゚) イモイモムシムシ

48 :デフォルトの名無しさん:02/05/16 13:17
>>44
別に普通じゃないか?


49 :デフォルトの名無しさん:02/05/16 13:22
I'm free to be whatever I
whatever I choose
And I'll sing the blues if I want

50 :悩むこと1週間:02/05/16 13:43
トケタ━━(゚∀゚)━━ァ!

やっぱ2chの力は凄いわ、サンクス

51 :デフォルトの名無しさん:02/05/16 13:59
I get up - when I'm down
I can't swim - but my soul won't drown
I do believe - I got flare
I got speed and I walk on air


52 :デフォルトの名無しさん:02/05/16 14:25
アヒャ━━(゚∀゚)━━ァ!

53 :デフォルトの名無しさん:02/05/16 18:23
(;´Д`)赤玉って本当に出るんですか?
心配でオナニーに気合いが入りません。
だって、これが最後かも・・・って考えてしまうと、
つい、未来の為にとっておこうって思っちゃうんですよ。
いや、それでもイクんですけどね、一応は。
でもこれじゃいけないなぁって後から悩んじゃう訳なんですよ。
限り有る精子をもっと有効(中田氏)に使わなきゃって。
あぁ、出たらどうしよう!


54 :デフォルトの名無しさん:02/05/16 18:24
さっきまた旦那のあれ掃除機で吸ったんですよ
そしたらポロってとれちゃって
どうすればいいですかね?
血が止まんなくて大変です。

55 :デフォルトの名無しさん:02/05/16 18:43
>>53
>>54

いいかげん許容範囲を超える。やめろ。

あと、いつまでも「ともっち」言ってるやつら、他のスレでやってくれ。

いくらなんでも最近荒れすぎ。

56 :デフォルトの名無しさん:02/05/16 18:43
これはジョブズ師匠が出てきてくれないと収まらないな

57 :デフォルトの名無しさん:02/05/16 19:04
switch(Syanpu){
case Masyeri:
まるいち
break;

case Syokubutumonogatari:
まるに
break;

case Vidarusasuunn:
まるさん
break;
}

まるいち、まるに、まるさんの部分に10行以上の長い文を書くのってへんですか?
SEの入社試験とかのソースでそんなふうに書いたらあかんですか?
それよりだったら,その部分を関数にまとめた方がいいですか?

58 :デフォルトの名無しさん:02/05/16 19:05
>>57
>SEの入社試験とかのソースでそんなふうに書いたらあかんですか?

その会社ほんとにSE業なのか・・・?転職?


59 :デフォルトの名無しさん:02/05/16 19:06
>>57
シャンプーの綴りくらい。。。


60 :デフォルトの名無しさん:02/05/16 19:07
>>57
俺は別に100行くらい書くけど。
もちろん関数に分割できればそれに越したことはないけど。

61 :デフォルトの名無しさん:02/05/16 19:09
{}でカコッてローカル変数を分けることかな。
おれもヘタレかもしれん。

62 :デフォルトの名無しさん:02/05/16 22:14
アンダースコアひとつで始まる名前は、グローバル ネームスペースで使う名前として実装によって予約されています?

そーすると、アンダースコアひとつで始まる名前は、ローカル変数には自由に使って何の問題もない?

63 :PNPO:02/05/16 22:23
独学でCやりたいんだけど結局、入門書読んではじめるのが一番いいの
か?みんなどういう方法でマスターしていったんだ?

64 :デフォルトの名無しさん:02/05/16 22:25
>>63
薄い本買って読んで猿のように書いた。
後、QUICK Cのヘルプは最大限活用した。

65 :デフォルトの名無しさん:02/05/16 22:33
fclose はエラーが発生すると EOF を返すらしいです。
クローズ処理でエラーが発生したら、つまりこのファイルはクローズされないんでしょうか?
もしそうなら、クローズするためにもう一度 fclose してもまたエラーになりそうですが、そーすると結局どうすれば FILE* を解放できるんでしょうか???

66 :デフォルトの名無しさん:02/05/16 22:34
>>63
 何かを作りたくて一所懸命&楽しい、ってゆう状態にもっていく工夫をして下さい。
 それができないようだと我慢の勉強になってしまいます。

67 :デフォルトの名無しさん:02/05/16 22:36
>>65
fcloseが失敗するのは見た事ないです
でもそうなったら処理系依存の話になっちゃうんじゃないでしょか?

68 :デフォルトの名無しさん:02/05/16 22:44
>>57
某WIN32系の本に影響されて俺はswitch部はジャンプテーブル的に
使っています。理由はやり方こそ違えど60さんと同じ。1つの関数
に違う処理を突っ込みすぎると変数の再利用などでグチャグチャに
なりやすいからです。


>>67
不正なFILE*を渡せば・・・(w

69 :68:02/05/16 22:48
>理由はやり方こそ違えど60さんと同じ

61さんだった・・・メンゴ

70 :デフォルトの名無しさん:02/05/16 23:01
fwrite/fcloseで書き込みエラーは取れません。
ディスクとCPUが非同期になっているため、プログラムの
終了後にエラーがくる場合があるからです。
また、mallocがNULLを返さないOSもあります。
これも実際に使用するまで取らないからです。
将来、これらの関数を全部voidにして、
シグナルや例外処理およびプログラム終了後の
ハンドラ登録方式にでもにまとめるべきかと。

71 :デフォルトの名無しさん:02/05/16 23:05
>>62
実装側でグローバルネームスペースで使うマクロが
存在する可能性があるのでオススメできないぞ。

72 :デフォルトの名無しさん:02/05/16 23:22
>>70
fwriteでdisk fullは取れるYO!

73 :デフォルトの名無しさん:02/05/16 23:23
>>65
書き込み処理を行ったものについてfcloseがエラーを返したら、
書き込みが失敗したとみなすべきですね。

74 :初心者:02/05/16 23:39
ちょっとお聞きしたいのですが%dというのはPrintfで数値という意味ですが
%2dとはどういう意味ですか

75 :PNPO:02/05/16 23:40
>>64
サンキュー!
猿のように書いたって、本に書いてる例題プログラムとかをやった
っていうこと?
>>66
サンキュー!
なんか精神的につらそうだな〜・・・

76 :デフォルトの名無しさん:02/05/16 23:41
君はあれかね、本は読まないタイプの人間かね

77 :デフォルトの名無しさん:02/05/16 23:43
void fclose(); ぢゃないの?

78 :デフォルトの名無しさん:02/05/16 23:53
ぢゃないの。

79 :初心者:02/05/17 00:04
>>76
%dはどの本にもでているんですが%2dはどこを調べてもでてないんですよ

80 :デフォルトの名無しさん:02/05/17 00:05
君はマニュアルが読めない類の人種みたいだね。

81 :デフォルトの名無しさん:02/05/17 00:06
ふーん。

82 :デフォルトの名無しさん:02/05/17 00:08
>>65
exitする。
あるいはmainでreturnする。

83 :デフォルトの名無しさん:02/05/17 00:13
>>74
%2d→2桁右寄せで出力するということだ
ちなみに、%02d、こうすれば0もつけてくれるぞ。

84 :デフォルトの名無しさん:02/05/17 00:14
%*d は?

85 :デフォルトの名無しさん:02/05/17 00:14
>>79
(´ー`)。oO(そんな事も書いてない本って、どんな本だろう?)

86 :デフォルトの名無しさん:02/05/17 00:17
65
思いっきりSCANDISKしたほうがいいとおもうな。完全オプションつきで。

87 :初心者:02/05/17 00:18
>>83
ありがとうございます。
助かりました。

88 :デフォルトの名無しさん:02/05/17 00:23
俺がいつも心配なのはこういう初心者の質問に逐一教えていくと
初心者はわからないことがあるたびに検索せずに
質問してくるんじゃないかと・・・

89 : :02/05/17 00:24
近頃の剥いたでは煽る・罵る・貶めるだけで質問に答えられんヴァカが
いるみたいだな。。。。

90 :デフォルトの名無しさん:02/05/17 00:25
>>89
どう控えめに見ても君がヴァカだ。

91 :デフォルトの名無しさん:02/05/17 00:28
つーか検索しなくてもフォーマット文くらいなら試してみればよいのに・・・
すぐ人に聞く人はプログラミングの楽しみの90%を逃しているよ。
どうせ宿題小僧なんだろうけどさ

92 :デフォルトの名無しさん:02/05/17 00:31
関係ないけどやっぱ名前を空白にする人ってのはゲハ癖の抜けない厨房クンなのかな?

93 :デフォルトの名無しさん:02/05/17 00:35
>>89
と煽る君がとてもかわいいよ。。。。

94 :デフォルトの名無しさん:02/05/17 00:40
(´・∀・`)へー

95 :デフォルトの名無しさん:02/05/17 00:40
質問内容によっちゃ>>89のが当てはまる場合もあるが
今回ばかりは質問が「%2dって何ですか?」だもんな・・・

96 : :02/05/17 00:52
多分本に乗ってても読めないんだと思う。
慣れるしかないんだけど


97 :デフォルトの名無しさん:02/05/17 01:01
%2dのわからない君にこそ、倉薫をお薦め・・・

98 :デフォルトの名無しさん:02/05/17 01:39
%2dなんてあんまりつかわねーよ
普通は%02dか%.2dだろ

99 :デフォルトの名無しさん:02/05/17 01:42
printf("%*s", space, "");

こんな邪悪なことしてたことある人いる?

100 :デフォルトの名無しさん:02/05/17 01:46
使うか使わないかの話ではなくそれくらい調べろよという話だ

101 :デフォルトの名無しさん:02/05/17 01:48
だな

102 :デフォルトの名無しさん:02/05/17 02:02
>>99
#define _(a) a&&a
 :

if (10 < _(foo) < 100)

こんなことしてた奴もいる。てか漏れ(藁

103 :デフォルトの名無しさん:02/05/17 02:05
>>89は、%2dがわからないとき「%2d」で検索する、に1票。

104 :デフォルトの名無しさん:02/05/17 02:06
>>102
で、振りかえってみて、あの頃の自分が恥ずかしい、と。

105 :102:02/05/17 02:11
穴があったら入れたい

106 :デフォルトの名無しさん:02/05/17 02:20
>>105
ワロタ

107 :デフォルトの名無しさん:02/05/17 04:08
火のついたプロジェクトのへルプにはいることになって、
先輩からへッダを渡されてこの中身のbitio.cを作れと言われました。
先輩は、殺気立っててあんまりしつこく聞けません。
よろしくお願いします。少しでも良いです。ヒントをお願いします。

#ifndef bitio_h
#define bitio_h
#include <stddef.h>

typedef struct bitout BITOUT;

extern BITOUT *bitout_open(const char *filename);
extern void bitout_close(BITOUT *);
extern void bit_write(BITOUT *, size_t nbits, unsigned long bits);
extern void bit_flush(BITOUT *);

typedef struct bitin BITIN;

extern BITIN *bitin_open(const char *filename);
extern void bitin_close(BITIN *);
extern unsigned long bit_read(BITIN *, size_t nbits);

typedef void (*ioerr_handler)(const char *fmt, ...);
extern ioerr_handler bitio_error; // Default: print and die.
#endif


108 :デフォルトの名無しさん:02/05/17 04:14
>>107
仕様書みたいなのはないのか?
なければ先輩の頭をキーボードでぶん殴っていいです

109 :デフォルトの名無しさん:02/05/17 04:15
>>107
その先輩に↓を見るように言うんだ
http://pc.2ch.net/test/read.cgi/tech/1021459016/107
それで解決


・・・しなければ上司に助けを求めろ

110 :デフォルトの名無しさん:02/05/17 04:16
>>108
えっとへッダを印刷したプリンタ用紙に
「可変長ビットI/Oモジュール: 最大32bit」
と鉛筆で殴り書きしてありますた。

これだとマウスでシバクくらい良いでしょうか?

111 :デフォルトの名無しさん:02/05/17 04:19
やりたいことも整理できずに、ヘッダそのままもってくるあなたへの
最適な助言としては・・・「諦めてさっさと逃げ出せばーか」ですが、、、

どうしても知りたきゃ情報圧縮の本でも読みなさい。

112 :デフォルトの名無しさん:02/05/17 04:23
struct bitout {
unsigned int tmp;
short shift;
FILE *fp;
};

113 :デフォルトの名無しさん:02/05/17 04:25
>>110
いえ、キーボードで死なない程度に殴ってください。
ついでにあなたも自分の顔をマウスで殴ってください。

すまんが、これはどういうプログラムの一部なんだ?
bitio.cはなにをするんだ?

http://www.google.co.jp/search?q=bitio.c&ie=UTF8&oe=UTF8&hl=ja&lr=
Googleで検索すると圧縮関係が多くヒットするけど、そっち方面とは関係あるか?


114 :デフォルトの名無しさん:02/05/17 04:27
>>108
このヘッダ見てやりたいことがわからない奴はプログラマ辞めたほうが良い
と思う。くらいに自明でありがちなパターンだよーん。

115 :デフォルトの名無しさん:02/05/17 04:28
>>113
君もディスプレイに頭突っ込みなさい。
ビットリードライトは可変長の操作が必要なハフマンとかの圧縮アルゴ
では当たり前の部品だ。

116 :デフォルトの名無しさん:02/05/17 04:30
>>114=先輩登場、という罠。

117 :114:02/05/17 04:30
残念ながら俺様はのんきな大学院生(w

118 :デフォルトの名無しさん:02/05/17 04:33
グレイ符号とかかな。

119 :デフォルトの名無しさん:02/05/17 04:35
こんな感じだろ。あとは自分でやれや。

#include <stdio.h>
#include "bitio.h"

struct bitout {
 unsigned long bitbuf;
 size_t nbits;
 FILE *fp;
};

void bit_write(BITOUT *out, size_t nbits, unsigned long bits)
{
 if (out->nbits + nbits > 8) {
  putc((out->bitbuf << (8 - out->nbits)) |
(bits >> (nbits - 8 - out->nbits)),
out->fp);
  nbits -= (8 + out->nbits);
 }
 while (nbits > 8) {
  putc(bits >> (nbits - 8), out->fp);
  nbits -= 8;
 }
 out->bitbuf = bits;
 out->nbits = nbits;
}


120 :119:02/05/17 04:35
ずれた。欝。

121 :デフォルトの名無しさん:02/05/17 04:37
>>115
そりゃそうだが、他人事とはいえウソ書いちゃまずいかと思って念のため。。。

今から頭つっこむんで、当分書き込めませーん。じゃあ逝ってきます。



122 :デフォルトの名無しさん:02/05/17 04:39
gray code は隣接する符号を1ビットだけ変化するように構成して誤りチェック
に有利にした符号ってだけであって、あまり関係ないと思うよ。

123 :shige:02/05/17 04:39
データ圧縮ハンドブックの付録ディスケットに、

124 :デフォルトの名無しさん:02/05/17 04:42
baka

125 :デフォルトの名無しさん:02/05/17 04:43
Ruby!!!!!!

126 :デフォルトの名無しさん:02/05/17 04:43
>>119
間違ってるYO!
  putc((out->bitbuf << (8 - out->nbits)) |
     (bits >> (nbits - (8 - out->nbits))),
     out->fp);
  nbits -= (8 - out->nbits);
だろ。

ついでに他も添削しちゃる。

void bit_write(BITOUT *out, size_t nbits, unsigned long bits)
{
 if (out->nbits + nbits > 8) {
  nbits -= (8 + out->nbits);
  putc((out->bitbuf << (8 - out->nbits)) | (bits >> nbits),
     out->fp);
 }
 while (nbits > 8) {
  nbits -= 8;
  putc(bits >> nbits, out->fp);
 }
 out->bitbuf = bits;
 out->nbits = nbits;
}


127 :デフォルトの名無しさん:02/05/17 04:44
which endian?

128 :デフォルトの名無しさん:02/05/17 04:49
インディアン関係無い

129 :デフォルトの名無しさん:02/05/17 04:49
つーか吐き出した部分削るの忘れてるし(w
教育的配慮?

130 :デフォルトの名無しさん:02/05/17 04:54
1bitを書きつづけると楽しいことになりそうだね

131 :デフォルトの名無しさん:02/05/17 05:02
unsigned long のインディアン嘘つかなーい?

132 :デフォルトの名無しさん:02/05/17 05:03
出力する方向がwriteのMSBからかLSBからか決めなくていいのか?

133 :デフォルトの名無しさん:02/05/17 05:05
だからさっきからインディアンって・・・

134 :デフォルトの名無しさん:02/05/17 07:40
>>107
自分でできないその先輩を殴っていいよ。

135 :デフォルトの名無しさん:02/05/17 08:09
>>134
あのヘッダを見ても本当にその先輩が自分で出来ないとか思うか?
107はそのレベルから見ても員数外要員だと思うんだが

136 :デフォルトの名無しさん:02/05/17 08:12
使えない107を何とかして使ってやろうという心意気を感じる

137 :デフォルトの名無しさん:02/05/17 08:18
正直実は演習問題かなんかなんだろ?
こんな車輪の再発明を予備要員にさせる「現場」っつーのが思いつかん。

一番ありそうなのは学校の課題のバカ同士での擦り付け合いって気が・・

138 :デフォルトの名無しさん:02/05/17 08:23
BITINとBITOUTを別にしてるところあたり微妙な気もするけど、確かに
マトモな現場ではなさそう。

139 :デフォルトの名無しさん:02/05/17 08:38
>BITINとBITOUTを別にしてるところあたり微妙な気もするけど
本気で言ってるなら、自分でビット入出力のモジュール書いてみろ

140 :デフォルトの名無しさん:02/05/17 08:42
>>139
ちゃんと説明してごらん。いや是非アフォな俺のためにしてください。


つか書いたことあるけど(w

141 :デフォルトの名無しさん:02/05/17 08:44
>>139
正直俺も知りたいのでAGE

142 :デフォルトの名無しさん:02/05/17 08:48
オーバフローやアンダーフローをif文で判定するにはどうすればいい?

143 :デフォルトの名無しさん:02/05/17 08:48
オナニー大好きとプリントアウトしたいんですが、
どうやってCで書けばいいでしょうか?


144 :139:02/05/17 08:51
ランダムアクセスで読み書きを行えるようにすると、
未出力分との整合を取るコードを書かなければいけないし、
そもそもbit単位でのファイルI/Oは、シリアライズ以外での利用方法が無いから、
読み書きを同時に行うメリットがない。

どうしてもランダムアクセスにする必要があるなら、
ファイルIOとビットバッファを分離して、
ファイルから一部(または全部)をメモリに読み込んだ後に処理すべき。

145 :デフォルトの名無しさん:02/05/17 08:51
>>142
絶対値が大きいほうの項との符号を比べちゃだめ?

146 :デフォルトの名無しさん:02/05/17 08:52
>>145
aがオーバフローしているときはどうするの?

147 :デフォルトの名無しさん:02/05/17 08:52
puts("\0(´д`)y-~~sineyo");

148 :デフォルトの名無しさん:02/05/17 08:52
>>144
は??? お前138の言ってることがわかってる?
構造体を別にする必要が無いって意味だぞ。107を良く見直せ。

149 :デフォルトの名無しさん:02/05/17 08:54
んじゃー、構造体を使い回す意味ってある?
馬鹿がbitoug_open()で開いて、bit_read()を発行する可能性もあるが。

150 :デフォルトの名無しさん:02/05/17 08:55
人間素直に認めることも大事だと思うがどうか?

151 :デフォルトの名無しさん:02/05/17 08:56
プログラマの責任とか、中でフラグを持ってassert()するとか言うなよ。
コンパイルにチェックが走って通らない方が何倍も安全なんだから

152 :デフォルトの名無しさん:02/05/17 08:57
>>146
aってなんだよ(w
まあ数値だけからって言いたいんだろうけどさ。どうしてもなら演算直後
にasm使うとか(間に別の演算が無いという保証は無いが)。

153 :デフォルトの名無しさん:02/05/17 09:00
たとえば,
while(??){
a/=2.1;
b=3.0/a;
}
なんてやっているとそのうちbがオーバフローしますよね
そのときに,それ以上計算がされないように食い止めたいのです

154 :デフォルトの名無しさん:02/05/17 09:02
while(b == 3.0/(a/2.1) * (a/2.1) ){
a/=2.1;
b=3.0/a;
}

155 :デフォルトの名無しさん:02/05/17 09:02
>>153
環境わかんないけどSIGNALはつかえねーの?

156 :デフォルトの名無しさん:02/05/17 09:07
>>154
詳しくないんだけど、それって演算誤差の方が支配的なんでは・・・?

157 :デフォルトの名無しさん:02/05/17 09:07
>>154
なんとなくできそうな気がしました
>>155
わかんないっす

もう時間なので,また来ます
ありがとう

158 :デフォルトの名無しさん:02/05/17 09:09
浮動小数の比較に==はキケン

159 :デフォルトの名無しさん:02/05/17 09:18
>馬鹿がbitout_open()で開いて、bit_read()を発行する可能性もあるが。

単純なシリアライズが殆どと自分で逝っておきながらこんな例を出すのはちょっ
と屁理屈くさい気もせんではないが、まあ typedef ではチェックできない
のは確かか。なんか上手い手ないのかね。

160 :デフォルトの名無しさん:02/05/17 09:27
>>158
先生!
(fabs(foo-bar)< e)
でOKっすか?

161 :デフォルトの名無しさん:02/05/17 09:32
eはどうやって決める?

162 :デフォルトの名無しさん:02/05/17 09:33
ヘッダに書いてある EPSILON の値

163 :デフォルトの名無しさん:02/05/17 09:36
オーバーフローした場合の値がそのチェックで正常に通るか規定されてないと思うが

164 :デフォルトの名無しさん:02/05/17 09:51
>>163
ぐあっ,,確かに。

http://www-utheal.phys.s.u-tokyo.ac.jp/docs/manual/fitsio/node40.html
>defines certain special values that are used to represent such
>quantities as Not-a-Number (NaN), denormalized, underflow,
>overflow, and infinity.

この辺が答えかな? つーかあなたのような人が先輩か先生だったらなあ・・・

165 :デフォルトの名無しさん:02/05/17 09:58
俺は俺みたいなのが先輩や先生だったら萎える

166 :デフォルトの名無しさん:02/05/17 10:11
ちょっとお勉強してきました。
win32だと status87()(statusfp()), control87()(controlfp()) とか
でFPフラグを弄ったり見たりできるようですね。Linuxでは__setfpucw()で
OKなのかな?

167 :デフォルトの名無しさん:02/05/17 10:12
どうせ依存ならインラインアセンブラを使った方がいい

168 :デフォルトの名無しさん:02/05/17 10:23
>>164
むしろ全国の先生・先輩の方が、自分で勝手に調べてくれるタイプの生徒・後輩を
熱望してると思うよ(w

169 :デフォルトの名無しさん:02/05/17 10:42
>>153
 b が大きくなるか小さくなるかは、分子と分母の関係から分かりますよね。

 で、計算前の b と計算後の b を比較して、大きくなる筈なのに小さかったらオーバーフローでは?


170 :デフォルトの名無しさん:02/05/17 11:47
errnoでEDOMかERANGEかHUGE_VALあたりをチェックしてみては?
あとは>>155のいうようにsignal()でSIGFPEでも捕まえてみるのは?
オーバーフローしたあとで捕まえて間に合うのか知らんけど。

ところで実数でも>>169のいうようにラップアラウンドするの?ビット的にはどっちかの無限大だかNaNだかになりそうな気が。

171 :デフォルトの名無しさん:02/05/17 12:18
http://sdx1.uky.edu/cgi-bin/man.cgi?section=all&topic=fegetexceptflag
これだめ?

172 :ともっち:02/05/17 12:31
お兄さんがた、おしえてください!

173 :デフォルトの名無しさん:02/05/17 12:31
空栗鼠はこっちしかサポートしてないかな?

http://www.informatik.uni-frankfurt.de/doc/man/hpux/fpgetsticky.3m.html

174 :わからへん。。。:02/05/17 14:28
だれか教えて下さい。

ファイルの文字の出現比率を表示するプログラムを書きなさい。
「英字、数字、空白、改行、その他」の文字ごとに表現比率を表示しなさい。

175 :デフォルトの名無しさん:02/05/17 14:35
>>172
なんだいともっち
お兄さんが頭の上から足先まで何でもみてあげるよ
さあ、脱いでごらん

176 :デフォルトの名無しさん:02/05/17 14:36
>>174
ctype.hをインクルドしよう

177 :デフォルトの名無しさん:02/05/17 14:39
>>174
1文字ごとに頻度を数えるなら、

#include <limits.h>
unsigned count[UCHAR_MAX];

に頻度を記録しとけば良いだろう。

文字種ごとの頻度は、

#include <ctype.h>
unsigned class_count[4];

として、文字cについて、
class_count[!!isalpha(c) + !!isdigit(c) * 2 + !!isspace(c) * 3]++;
すればよい。


178 :お兄さん:02/05/17 14:48
>>174

int cbuf, sum, alpha, digit, space, newline, other;
sum = alpha = digit = space = newline = other = 0;
while((cbuf=getchar()) != EOF){
if(isalpha(cbuf)) alpha++;
else if(isdigit(cbuf)) digit++;
else if(cbuf != '\n' && isspace(cbuf)) space++;
else if(cbuf == '\n') newline++;
else other++;
sum++;
}
if(sum > 0)
printf("英字(%d%%)\n"
"数字(%d%%)\n"
"改行以外のスペース(%d%%)\n"
"改行(%d%%)\n"
"その他(%d%%)\n",
alpha%sum,
digit%sum,
space%sum,
newline%sum,
other%sum
);
else
printf("いやーん\n");


179 :お兄さん:02/05/17 14:50
あれ?なにやってんだ
死んできます・・・(_A_;)

180 :デフォルトの名無しさん:02/05/17 14:51
>>178
getcharだと標準入力から読んじゃうぞ〜
fgetcでしょ。

181 :デフォルトの名無しさん:02/05/17 14:55
>>177
>unsigned class_count[4];
>class_count[!!isalpha(c) + !!isdigit(c) * 2 + !!isspace(c) * 3]++;

だめじゃん。

182 :デフォルトの名無しさん:02/05/17 15:03
map<char, int>で・・・あ、Cスレだった(w

183 :デフォルトの名無しさん:02/05/17 15:05
と言ってみるテスト。

184 :デフォルトの名無しさん:02/05/17 15:06
関数にexternをつけている人は何を考えているんですか?
省略という言葉を知らないんですか?

185 :デフォルトの名無しさん:02/05/17 15:10
>>184
また使い古された煽りを


186 :デフォルトの名無しさん:02/05/17 15:11
>>185
古臭かったか(鬱
>>107の先輩を煽ったつもりなんだが。
こういう奴ってautoとかも書いているのかなー

187 :デフォルトの名無しさん:02/05/17 15:19
>>186
さすがにauto書いていたら珍人物だな
そんな珍しいソースを読んでみたいな

188 :デフォルトの名無しさん:02/05/17 15:23
extern "C"

189 :デフォルトの名無しさん:02/05/17 15:27
俺の使ってるコンパイラに附属してるへッダだと関数は全部externが
ついてるな。なぜだろう?

190 :デフォルトの名無しさん:02/05/17 15:29
>>181 何がダメなの?
isalphaとisdigitとisspaceはたかだか1つしか真にならないと思うけど。

191 :デフォルトの名無しさん:02/05/17 15:32
>>189
そりゃあたりまえだろう


192 :デフォルトの名無しさん:02/05/17 15:34
>>191
へ?
>>107みたいなへッダだと略すのが当たり前で
標準へッダだと略さないのが当たり前なの?

ヨクワカラナイ…

193 :デフォルトの名無しさん:02/05/17 15:40
>>192

へッダで関数にexternつけるのは別に普通だよ。

>>184 はただのネタ。


194 :デフォルトの名無しさん:02/05/17 15:54
linker & loader を勉強すればどっちでも良いがかわいいコンピュータ
君のために extern を付けてあげたくなっちゃうんだな(w

195 :デフォルトの名無しさん:02/05/17 15:55
>>190
「英字、数字、空白、改行、その他」ごとにカウントするんでしょ?


196 :デフォルトの名無しさん:02/05/17 15:56
>>194
後から読む俺様のためにも、だ!ボォゲェ!

197 :デフォルトの名無しさん:02/05/17 15:57
>>195
unsigned class_count[5];
class_count[!!isalpha(c) + !!isdigit(c) * 2 + !!isspace(c) * 3 +
(c == '\n') * 4]++;


198 :デフォルトの名無しさん:02/05/17 15:58
>>195
ちゃんと係数かかってるジャン??

199 :デフォルトの名無しさん:02/05/17 15:58
何だ揚げ足取りだったのか・・・

200 :デフォルトの名無しさん:02/05/17 15:58
>>197
まだダメ。

201 :デフォルトの名無しさん:02/05/17 16:00
>>199
揚げ足とりというか、仕様をみたしてないじゃん。
(出題者の意図がわからんけど)

202 :デフォルトの名無しさん:02/05/17 16:02
>>201
答えを完璧にするのは質問した奴の仕事。教えた奴は基礎的なことがあってれば
あとはどうでもいい。そこまで質問君に優しくしてやる必要はない。

203 :デフォルトの名無しさん:02/05/17 16:03
>>201

英字はclass_count[1]に、
数字はclass_count[2]に、
空白はclass_count[3]に、
改行はclass_count[4]に、
その他はclass_count[0]に、
それぞれ入ると思うんだが。

204 :デフォルトの名無しさん:02/05/17 16:05
まさか初期化のことを言ってるんじゃ・・・・

205 :デフォルトの名無しさん:02/05/17 16:06
>>197
オーバーランするね。

206 :デフォルトの名無しさん:02/05/17 16:08
isalpha(c)
isdigit(c)
isspace(c)
(c == '\n')

ってどれか同時に真になるの?

207 :デフォルトの名無しさん:02/05/17 16:09
isspace(c)
(c == '\n')
あ、これか。しかしそれこそ質問者に悩んでほしい問題だが。

208 :デフォルトの名無しさん:02/05/17 16:10
>>203
201は>>177のこと言ってるんだけど。。。

209 :デフォルトの名無しさん:02/05/17 16:13
isspace使わないとなると面倒だなー。
(c == ' ' || c == '\f' || c == '\t' || c == '\v')
とか書くんかな。

210 :デフォルトの名無しさん:02/05/17 16:14
>>207
そんな技巧に走ってバグるなら、スナオにifで書けばいいじゃん。

211 : :02/05/17 16:16
>>210
禿同

212 :デフォルトの名無しさん:02/05/17 16:18
ヘルパーの関数かマクロにしちゃっても良いけどね。

213 :??????B?B?B:02/05/17 16:26
解決しました。
ありがとう。

214 :デフォルトの名無しさん:02/05/17 16:32
>>193
どこが?

215 :デフォルトの名無しさん:02/05/17 16:44
ここが適当かどうかわからないんですがFreeBSDでユーザ名から
uid知りたければどうすればいいですかね?


216 :getpwnam:02/05/17 16:47
どう考えてもUNIX板へどうぞ

217 :デフォルトの名無しさん:02/05/17 16:48
>215
216の言う通り
getpwnam


218 :デフォルトの名無しさん:02/05/17 20:26
#include <stdio.h>
void main (void)
{
int a,b,c;
scanf("%s %s %s",&a,&b,&c);

printf("%5s\n",a);
printf("%11s\n",b);
printf("%16s\n",c);
}
コンパイルエラーはないんですが
実行するとエラーが出るのですが原因わかりますか?
メモリがどうたらこうたら初心者でスマソ


219 :デフォルトの名無しさん:02/05/17 20:29
http://www.kumei.ne.jp/c_lang/index_c.html

220 :デフォルトの名無しさん:02/05/17 20:36
>>219
ひょっとすると218は直接答えが出てこないと自分への回答だと理解
しない完全他力本願タイプなんでは・・・?(w

221 :デフォルトの名無しさん:02/05/17 20:37
また書式絡みかよ。
もしかして昨日の%2dと同じ奴なのか?

222 :デフォルトの名無しさん:02/05/17 20:37
>>220
いや、219を読んでますよ

223 :デフォルトの名無しさん:02/05/17 20:38
>>221
違う

224 :デフォルトの名無しさん:02/05/17 20:40
この時期何かあるの? 落ちこぼれ研修生?

225 :デフォルトの名無しさん:02/05/17 20:40
>>218
a, b, c は数値型なのに文字として扱っている。

まぁ、例えていうと高校生を小学生扱いしたり、
男の子を女の子扱いするとグレてしまう。

数値型a, b, cも自分らしい扱いをされなかったので
グレてしまったのだ


226 :デフォルトの名無しさん:02/05/17 20:44
>>225
a,b,cを文字列の変数として扱いたいんですがどうすればいいんでしょうか?

227 :デフォルトの名無しさん:02/05/17 20:46
>>226
char a[1024],b[1024],c[1024];

228 :デフォルトの名無しさん:02/05/17 20:47
>>226
甘ったれんな。ちゃんと努力しろ。

229 :デフォルトの名無しさん:02/05/17 20:47
俺は上の二人のうちどっちが親切か即答できない(w

230 :デフォルトの名無しさん:02/05/17 20:48
>>226
参考書買ってきて読め。もしくは、C なんか使うな。

231 :デフォルトの名無しさん:02/05/17 20:48
>>226は悲惨だ・・・

232 :デフォルトの名無しさん:02/05/17 20:49
>>229
どう考えても>>228だろうな。
基礎の基礎くらいは調べて欲しいものだ

233 :デフォルトの名無しさん:02/05/17 20:49
>>227
おーできた
ありがとうございます!

234 :デフォルトの名無しさん:02/05/17 20:49
参考書っていうか219さんが折角リンクくれたのに、努力もせずに
すぐ質問は最低だと思ふ。

235 :227:02/05/17 20:49
>>232
例を言われても余りうれしくないな。

236 :デフォルトの名無しさん:02/05/17 20:50
>>234
読んでるって(w

237 :218:02/05/17 20:51
まあ、俺が悪かったスマソ
初心者用のスレ立てたほうがよくないか?

238 :デフォルトの名無しさん:02/05/17 20:51
>>237
もしかして試したのか?(-_-;)

239 :デフォルトの名無しさん:02/05/17 20:52
>>237
初心者以前の問題

やる気がないようにしか感じない

240 :デフォルトの名無しさん:02/05/17 20:52
ここは十分初心者向け・・・

241 :デフォルトの名無しさん:02/05/17 20:52
218はなぜ非難されてるか全く理解してないと思う。努力ってのは読み始めて
30分もたたずに音を上げることじゃない

242 :ひよこ名無しの4:02/05/17 20:53
PCQAに立てますか?
アウトソーシングならある程度受け付けますが。

243 :デフォルトの名無しさん:02/05/17 20:54
Ruby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>C

244 :218:02/05/17 20:54
>>238
>>227か?試した。
>>239
やる気はあるよ。でも最初がわからないととっつきにくい
数学だって掛け算できなければ積分やろうとはおもわないだろ
それと俺の中では同じ。
まだ素人中の素人だ。自分自身でもわかってる。
勘弁してくれ

245 :デフォルトの名無しさん:02/05/17 20:54
>>242
プログラムに関してはここに真っ先に来るんじゃない?

246 :デフォルトの名無しさん:02/05/17 20:55
>>244
(怒)
だったら配列の大きさはそんなにいらないだろくらい言えよ(-_-;)

247 :デフォルトの名無しさん:02/05/17 20:56
>>244
その考えが根本的に間違ってる。
素人だから何でも聞いていいというわけじゃない。
文字列の格納の仕方くらいCを始めてから一日で覚えられる範囲だろが

248 :218:02/05/17 20:56
>>246
素人だから配列の意味がわからないんだよ
勘弁してくれ
>>219みて勉強するから

249 :デフォルトの名無しさん:02/05/17 20:57
>>248
ん?本当は分かっているけどみんなを試したんじゃないの?

250 :218:02/05/17 20:58
>>247
はい、がんばります

251 :218:02/05/17 20:59
>>249
まじでわからなかったんだよ!
この悔しさをばねに勉強するよ、、、

252 :デフォルトの名無しさん:02/05/17 20:59
218にいいことを教えてあげよう。楽して手に入れた知識はあっという間に
散るぞ。ついでにハウツー丸暗記法で覚えると応用が効かないよ。プログ
ラマの多くは怠け者だから何度かこういったミスをしてるから初心者に厳
しくあたるんだよん。ってーことは覚えておいてほしいな。

253 :デフォルトの名無しさん:02/05/17 20:59
>>252
218じゃないが了解。

254 :デフォルトの名無しさん:02/05/17 21:04
すべての手続き型言語の基礎と言ってもいいCで工夫や試行錯誤が出来なければ
どの言語を使っても結局言語に使われるだけ。

255 :デフォルトの名無しさん:02/05/17 21:05
>>248
配列がわからないとな…

努力のカケラも見えんな

256 :デフォルトの名無しさん:02/05/17 21:06
>>251
わからなくて他人に聞いた悔しさのバネより

自分で解決した時のうれしさの方がより強いバネになる

257 :デフォルトの名無しさん:02/05/17 21:07
入門者の人には厳しいお言葉はとりあえず置いといて、

 >自分で解決した時のうれしさ

を是非味わってほしいです。こればっかりは人に聞いてしまうと
喜び半減なので

258 :デフォルトの名無しさん:02/05/17 21:07
質問。
socket関数使ってhttpでweb上のページ読むツール作ってるんですが、
串ってどうやって通せばいいかわかる人いますか?
connect()関数に渡すSOCKADDR_IN構造体をどうにかするんでしょうか?

259 :デフォルトの名無しさん:02/05/17 21:10
>>258
RFCを見てプロキシの説明参照。
ヒント。

プロキシに繋ぐ−>GET 目的のドメイン/目的のファイル

260 :デフォルトの名無しさん:02/05/17 21:21
今からC、C++を勉強しようと思うんだけど
ソフト何買えばいいの?
折れxpだからC++.netってやつで十分かな?

261 :デフォルトの名無しさん:02/05/17 21:21
>>260
フリーで十分

262 :デフォルトの名無しさん:02/05/17 21:22
>>260
このスレの上の方を見て。

263 :デフォルトの名無しさん:02/05/17 21:23
>>261
フリーで十分なの!?
.netとか言う奴はいらない??

264 :デフォルトの名無しさん:02/05/17 21:23
上の方ねスマソ
やはり以前にも似た話題が出たのか…鬱

265 :デフォルトの名無しさん:02/05/17 21:24
>>263
勉強でしょ?
フリーで十分。

266 :デフォルトの名無しさん:02/05/17 21:24
>>263
当たり前だろ
覚えるのにわざわざ.net買ってたら金がいくらあってもたらんわ

267 :デフォルトの名無しさん:02/05/17 21:25
>>263
めじろを落としてこい。

268 :デフォルトの名無しさん:02/05/17 21:27
>>267
よりによって・・・昔アレ¥10k位してたよね?

269 :デフォルトの名無しさん:02/05/17 21:31
.NET SDK もフリーだけどね

270 :デフォルトの名無しさん:02/05/17 21:32
やっぱ基本はCでコンソールでしょう。

VS.netのアカデミック買いなさい。WindowsXPも付いてくるよ♪

271 :デフォルトの名無しさん:02/05/17 21:33
C言語って何ですか?

272 :デフォルトの名無しさん:02/05/17 21:34
>>271
int main()萌え言語

273 :デフォルトの名無しさん:02/05/17 21:35
>>271
もっと
いれて
きもちいい
だめ
ああ
いく!いっちゃぅぅぅ

など。

274 :デフォルトの名無しさん:02/05/17 21:41
>>273
あいうえお作文かと思っちゃったよ

275 :デフォルトの名無しさん:02/05/17 21:42
(゚Д゚)?

276 :デフォルトの名無しさん:02/05/17 21:45
>>271
ああああああん!
ほしいのぉ!もっとぉ!
かたいの頂戴!
しょうてんさせて!
ねぇ!お願い!

>>274
こんなの?

277 :デフォルトの名無しさん:02/05/17 21:47
>>276
それC++。

オブジェクト指向であんなものやこんなものを挿(略

278 :デフォルトの名無しさん:02/05/17 21:48
>>276
おまえ上手いなぁ

279 :デフォルトの名無しさん:02/05/17 22:09

何・・?このスレ・・・・・

             /ヽ       /ヽ
            / ヽ      / ヽ
  ______ /U ヽ___/  ヽ
  | ____ /   U    :::::::::::U:\
  | |       // ___   \  ::::::::::::::|
  | |       |  |   |     U :::::::::::::|
  | |      .|U |   |      ::::::U::::|
  | |       | ├―-┤ U.....:::::::::::::::::::/  
  | |____ ヽ     .....:::::::::::::::::::::::< 
  └___/ ̄ ̄      :::::::::::::::::::::::::|
  |\    |           :::::::::::::::::::::::|
  \ \  \___      ::::::::::::::::::::::::|





280 :デフォルトの名無しさん:02/05/17 22:11
>>279
  ∩∩
  | |.| |
 γ_ _ヽ
 ( .・.・ ) <もういいからshine・・・)
   ̄ ̄

281 :258:02/05/17 22:32
>>259
ありがとう。
でも、RFCの日本語のページ読んだんですが、概念的なことしか書かれてなかったように思え、
いまいちわかりませんでした。
まずproxyサーバーに繋ぐってことなのだろうか?
検索してもやり方が載ってるページが見つからない。
もうちょっとヒントくれる人いませんか?

282 :デフォルトの名無しさん:02/05/17 22:33
プロキシにソケット繋ぐ−>GET 目的のドメイン/目的のファイル HTTP/1.0\r\n\r\n

283 :デフォルトの名無しさん:02/05/17 22:41
>>281
翼嫁
http://x68000.startshop.co.jp/~68user/net/

284 : :02/05/18 00:37
c++;

285 :デフォルトの名無しさん:02/05/18 00:48
>>281
概念的?? いきなり36ページ当たりに

 Note that the proxy MAY
 forward the request on to another proxy or directly to the server
specified by the absoluteURI. In order to avoid request loops, a
proxy MUST be able to recognize all of its server names, including
any aliases, local variations, and the numeric IP address. An example
Request-Line would be:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

とかいうのがある気がするんだが。資料から必要な情報だけ抜き出すコツは
早めにつかんでおいたほうが良いよ。

286 :デフォルトの名無しさん:02/05/18 00:49
>>285
あ、串はhttpからいるのね。勉強になった。

287 :デフォルトの名無しさん:02/05/18 00:53
typedef struct _locus{
struct _locus *next;
int value;
}LOCUS
があって、void new_dna(LOCUS **dna_header,int n_bits)という関数でリストを作成してつなげたいのですが、ヘッダがどうなってるのかわかりません。
教えていただけないでしょうか?

288 : :02/05/18 00:54
>>287
へっだって、**dna_headerのこと?
何がわからんの?

289 :デフォルトの名無しさん:02/05/18 00:56
正直今日一番意味わからにゃい質問・・・

290 :287:02/05/18 01:01
void new_dna(LOCUS **dna_header,int n_bits)関数をどう作ったらいいかわかりません。

291 :デフォルトの名無しさん:02/05/18 01:04
ヘッダとの関連は・・・?

292 : :02/05/18 01:05
>>290
・関数形はそれじゃないとダメなのか?
・引数(n_bits)の意味教えろよ

293 :デフォルトの名無しさん:02/05/18 01:06
あのさあ。そりゃあ無理に類推すればLOCUS*形の配列をn_bits個(?)走査
して全部その順番にくっつけるのかな〜とか位は妄想できるけど、
君の提示した情報だけでプログラムが作れると思う?
まずは仕様をちゃんと固めなさいな。

294 :デフォルトの名無しさん:02/05/18 01:06
0以上9以下の整数をランダムにキーボードから入力するとき、全ての整数が少なくとも1回入力された時点でアラートを鳴らし、総入力回数を出力するプログラムを作成せよ

295 :デフォルトの名無しさん:02/05/18 01:07
>>294には答えるなよ

296 :デフォルトの名無しさん:02/05/18 01:08
>>294
消化し切れてない問題は宿題スレで・・・・

297 :デフォルトの名無しさん:02/05/18 01:08
ひでぇw
教えてください・・・結構考えたけどわからんかったんよ。

298 :287:02/05/18 01:08
>>292
すいません、関数形はそれじゃないとだめです。n_bitsはリストの大きさです。

299 :デフォルトの名無しさん:02/05/18 01:09
なぜ彼らは助け合いの場としてではなく、努力もせずに便利な回答集
としてここを使おうとするんだろう・・・・

300 :デフォルトの名無しさん:02/05/18 01:10
>>298
リストの大きさって、何?
バイト数?ビット数?要素数?

301 :287:02/05/18 01:11
>>300
要素数。

302 :デフォルトの名無しさん:02/05/18 01:11
努力したヽ( ´ー`)ノ

303 :デフォルトの名無しさん:02/05/18 01:12
>>301
だからさあ・・・んなことは凡そ想像はつくけど>>293読めい

304 :デフォルトの名無しさん:02/05/18 01:13
n_bitsが要素数とどうやって想像しろと・・・

305 :293:02/05/18 01:15
>>304
消去法(w
無理な想像だが多分あってると思うんだな。

306 :293:02/05/18 01:17
大体287は俺が想像を書いたからそれでもう我々に通じた、とでも思ってるのかい?
何をしたいのかちゃんとしたレスポンスないとこっちは何もできないよ。

307 :287:02/05/18 01:18
LOCUS形の構造体をmallocでとってきて、n_bits個
全部その順番にくっつけるでおねがいします。

308 : :02/05/18 01:18
リストの要素数?つなげるリストの数ってこと?
なんでリストなのに**が必要なの?リストなら*で充分だろ?

309 : :02/05/18 01:21
LOCUS *locus[MAX];

for(i=0;;){ locus[i]=(LOCUS*)malloc(sizeof(LOCUS));}
new_dna(locus,i);

みたいなことがしたいのか?

310 :デフォルトの名無しさん:02/05/18 01:24
出来たけどLOCUSの仕様が分からんので貼り付けない

311 :デフォルトの名無しさん:02/05/18 01:26
つかこんなお粗末な仕様では自信を持って貼り様がないじゃん。
なんかプログラマの卵と話をしてるってよりは、お客さんと話ししてる気分(w

312 :デフォルトの名無しさん:02/05/18 01:27
仕事でもひどい仕様書から、妄想してプログラム組まんといかん時が
あるからな(あったからな。。。)
いい勉強になるだろ。。。

313 :デフォルトの名無しさん:02/05/18 01:29
やりたいことが整理できてないってのは殆どのクライアントの共通項だよね

314 :287:02/05/18 01:30
>>310
>>287にあります。とりあえず貼り付けてください、お願いします。

315 :デフォルトの名無しさん:02/05/18 01:32
>>314
>>287で分かるやつがいたら神

316 :デフォルトの名無しさん:02/05/18 01:33
>>312
勉強にはならないよ。当然あり得る帰結で書いてみて後はトライアンドエラーなんだから。
少なくともボランティアでやる気にはなれんし、それを期待するのは聊か図々しいと思う。

>>287
まず日本語を勉強しなおしてくれ。

317 :**:02/05/18 01:35
ほんの僅かな情報から仕様を自己妄想できるようになれれば一人前のSEだ。
無論、仕様を詰めるのも重要だけどな。。。

で、>>287>>309でやりたいことはあってるのか?

318 :デフォルトの名無しさん:02/05/18 01:36
>>316
漏れの仕事はそんなのばっかしだが。。。

319 :デフォルトの名無しさん:02/05/18 01:38
>>318
みんなそうだよ。素人さん相手の時は・・・

320 :デフォルトの名無しさん:02/05/18 01:39
俺が分からないこと
・リスト中最後の要素のnextの値はどうなるのか
・生成後のvalueの値はどうなるのか
・リストは一度にmallocで割り当ててもいいのか
 それとも個々の要素ごとにmallocしなければいけないのか
・途中でmallocに失敗した場合はどうするのか

321 :287:02/05/18 01:41

>>317
mallocはnew_dnaで呼び出して欲しいです。


322 :仕様書無しさん:02/05/18 01:42
>>287
ヘッダは多分、こうなっているのではないでしょうか?

dna.h


#ifndef dna_h
#define dna_h

typedef struct _locus{
  struct _locus *next;
  int value;
}LOCUS

void new_dna(LOCUS **dna_header, int n_bits);

#endif


323 :デフォルトの名無しさん:02/05/18 01:43
>>322
LOCUSの後ろに;がほしい

324 :デフォルトの名無しさん:02/05/18 01:46
解決だね(^o^)

325 :322:02/05/18 01:46
>>323
うわちゃ、鬱!

といいますか、ネタなので。
・・・しかし>>287のような質問では、漏れのようなヘタレPGに答えられるのは
この程度です。

326 :287:02/05/18 01:48
>>320
nextはつぎのリストを指します。 valueの値は0でいいです。 個々でmallocして欲しくて、メモリ確保に失敗したら、終了します。お願いします。

327 :ーーーーー:02/05/18 01:50
>>287
リストってほんとに分かってるのか?
一応リストの作り方かいとくな。

LOCUS *locus = (LOCUS*)malloc(sizeof(LOCUS)),*head;
head = locus;

for(作りたいだけ){
  locus->next = (LOCUS*)malloc(sizeof(LOCUS));
  locus = locus->next;
}

こんなかんじ。
あとはエラー処理とかしる。

328 :デフォルトの名無しさん:02/05/18 01:51
>>326
最後の要素の次なんてないです。
終了の意味が分かりません、

329 :デフォルトの名無しさん:02/05/18 01:54
リストの宿題が出たので教えてください、って事?

330 :287:02/05/18 01:57
>>326
mallocするたびにnextにNULLを入れておきます。エラーメッセージを表示して強制終了です。

331 :デフォルトの名無しさん:02/05/18 01:58
dna_headerが指すポインタがリストの先頭を指してて、
そのポインタに要素を追加するんだろ、きっと。

void new_dna(LOCUS **dna_header, int n_bits)
{
 while (n_bits > 0) {
  LOCUS *locus = malloc(sizeof(LOCUS));
  if (locus == NULL) {
   エラー;
  }
  locus->next = *dna_header;
  **dna_header = locus;
 }
}


332 :デフォルトの名無しさん:02/05/18 01:59
う、しまった。
n_bits-- するの忘れてた。


333 :デフォルトの名無しさん:02/05/18 02:01
287はなぜ通じないか理解できナインだろうな・・・

334 :デフォルトの名無しさん:02/05/18 02:03
>>330
そこまで解ってるなら、あとはCの文法が解らないのかな?

それは置いといて、さっきから「はよ教えんかい!」みたいな態度は感心しないな。

335 :デフォルトの名無しさん:02/05/18 02:05
>332
確かにconstじゃないけど引数の値を操作するのはいかがなものかと。

336 :デフォルトの名無しさん:02/05/18 02:06
初心者のふりしてネタを振る常連と
親切のふりしてプログラミング技術を見せびらかす火魔神と
たま〜にマジで引っかかって熱くなる親切な人が
火花をチラシ合うスレはここですか?

337 :デフォルトの名無しさん:02/05/18 02:06
>>335
by value なのはいーじゃんと思う。

338 :デフォルトの名無しさん:02/05/18 02:06
>>3

> なお、課題の○投げは一応別スレへ、ということでお願いします。

339 :デフォルトの名無しさん:02/05/18 02:06
>>335
他に引数がLOCUS**型をしてる理由を思いつかんのだが。
ありがちなパターンだろ。

340 :287:02/05/18 02:07
みなさんありがとうございました。331さんのを考えてみます。

341 :デフォルトの名無しさん:02/05/18 02:08
初心者のふりって、、、仕様もまとまってないネタなんてスレにとって
有害なだけジャン。

342 :デフォルトの名無しさん:02/05/18 02:08
>>336
掛布さんの解説でした。

343 :デフォルトの名無しさん:02/05/18 02:09
仕様がまとまってたらネタじゃなくて「問題」じゃん。
それじゃ釣れない。

344 :デフォルトの名無しさん:02/05/18 02:10
微妙にバグを残す331は神

345 :デフォルトの名無しさん:02/05/18 02:11
>>343「お題」は歓迎だけどそういう意味での「ネタ」はごめんだな

346 :デフォルトの名無しさん:02/05/18 02:18
ほんとだポインタのポインタが・・・(w

347 :デフォルトの名無しさん:02/05/18 02:22
どこですか?ポインタのポインタはサパーリわかりません。

348 :デフォルトの名無しさん:02/05/18 02:25
まあコンパイラがゴネるから初心者でもわかるでしょ。ダイジョーブダイジョーブ

349 :デフォルトの名無しさん:02/05/18 02:44
んじゃ、お題…というか何と言うか。
初心者ってわけでもないんですが、
前からちょっと悩んでる事があるんで
教えてつかあさい。

unsigned intが32bitのマシンで、
unsigned int bitmap[N];
という32Nビットのビットマップがあるとき、
「nビット連続して1が立っているのは、先頭から何ビット目か」
を探すのはどうやったら速いでしょう?アセンブラはナシで。
あ、ちなみにLSB, MSBの順序はどっちでも良いです。

350 :349:02/05/18 02:46
歩測: 2ワードにまたがってるときもちゃんと見つけたいデス

351 :デフォルトの名無しさん:02/05/18 02:47
難しそう。一度寝てから考えます。おやしゅみなさい

352 :デフォルトの名無しさん:02/05/18 02:49
>>349
nは32より大きくなることもあるのか?

353 :349:02/05/18 02:53
>>352
うーん。nは無制限に死体ですが、「n < 32のとき限定だけど速い版」
とかも歓迎です。

あ、1と0は逆でも良いです。とにかく速いほう。

354 :デフォルトの名無しさん:02/05/18 02:55
int search_なんとか(size_t n)
{
 int i, j, count = 0;
 unsigned int bitmap[N];
 
 for (i = 0; i < N; i++) {
  for (j = 0; j < 32; j++) {
   if ( (bitmap[i] >> (32 - j)&1 ) {
    count++;
    if (count == n)
     return i * 8 + j;
   }
   else
    count = 0;
  }
 }
 return -1;
}


355 :デフォルトの名無しさん:02/05/18 02:57
s/32 - j/31 - j/

356 :アマグラマ1号 ◆r6Wx8cCc :02/05/18 02:59
BM法使えば速そう。

357 :デフォルトの名無しさん:02/05/18 03:01
0,1しかないのにBM法って(w

いや言いたいことは分かるんだけどさ

358 :デフォルトの名無しさん:02/05/18 03:03
テーブルと継続フラグを使ってバイト単位でサーチするのが最速でしょ

359 :アマグラマ1号 ◆r6Wx8cCc :02/05/18 03:04
まぁ、表は作らなくていいですね。

360 :デフォルトの名無しさん:02/05/18 03:04
速いかどうか分からんけど

Xビット目が0
 n-1ビット読み飛ばして1行目へ
Xビット目が1
 前後n-1ビットを調べる
  見つからなかったらn-1ビット読み飛ばして1行目へ
  見つかったらループ抜ける

0の多いデータ中なら速い・・はず

361 :349:02/05/18 03:09
自分では、
-(1 << n)
でnビットのマスク作って、ワード単位でANDとって逝くのが
速いんじゃないかと…

n > 32の時は、

xビット1の並び
32ビット全部1がyワード
zビット1の並び

x + z = n % 32
y = n / 32
というパターンを探すのかな、とか。

362 :デフォルトの名無しさん:02/05/18 03:12
first fitのmallocでも作るつもりか?

363 :デフォルトの名無しさん:02/05/18 03:19
>>361
じゃぁ、自分で作れよ。
だいたいn<=32だったら楽だろ

364 :349:02/05/18 03:22
や、BM法みたいな(途中で1個でも0があったら、その次まで飛ばす)
やりたいんですけど、うまい方法無いですかね。

365 :アマグラマ1号 ◆r6Wx8cCc :02/05/18 03:48
あんま練ってないけどこんな感じでどうかな。

#define BITSOF(type) (sizeof (type) * 8)

int search(unsigned* bitmap, int N, int n)
{
 const unsigned bits = BITSOF(*bitmap);
 const unsigned maxbit = 1 << (bits - 1);

 for(int i = 0, jmin = 0; i < N * bits + n - 1;)
 {
  for(int j = n - 1; j >= jmin; j--)
  {
   if((bitmap[(i + j) / bits] & (maxbit >> (i + j) % bits)) == 0)
   {
    i += j + 1;
    jmin = n - (j + 1);
    goto NOT_RET;
   }
  }
  return i;

 NOT_RET:;
 }
}

366 :アマグラマ1号 ◆r6Wx8cCc :02/05/18 03:49
あ、見つからなかった時の処理を忘れてた。
最後に return -1; でも追加。

367 :デフォルトの名無しさん:02/05/18 03:55
それのどこがCだよ

368 :アマグラマ1号 ◆r6Wx8cCc :02/05/18 03:59
う、for(int i とかやっちゃってますね...。
すんまそん。

369 :デフォルトの名無しさん:02/05/18 04:02
1バイト単位でテーブル作る
int bl[256] ; /* 左(上の桁)から数えた時に1が並んでる桁数 */
int bm[256] ; /* 1バイト内で1が並んでる最大のビット数 */
int br[256] ; /* 右(下の桁)から数えた時に1が並んでる桁数 */

実際にはこんな感じ
0 → 00000000 → bl[1]=0, bm[1]=1, br[1]=0 ;
1 → 00000001 → bl[1]=0, bm[1]=1, br[1]=1 ;
2 → 00000010 → bl[2]=0, bm[2]=1, br[2]=0 ;
3 → 00000011 → bl[3]=0, bm[3]=2, br[2]=2 ;
:
127 → 01111111 → bl[127]=7, bm[254]=7, br[254]=7 ;
128 → 10000000 → bl[128]=1, bm[254]=1, br[254]=0 ;
:
253 → 11111101 → bl[253]=6, bm[253]=6, br[253]=1 ;
254 → 11111110 → bl[254]=7, bm[254]=7, br[254]=0 ;
255 → 11111111 → bl[255]=8, bm[255]=8, br[255]=8 ;

後は、キャストして、適当に計算すれば、それなりに速そうな気が…

370 :デフォルトの名無しさん:02/05/18 04:14
ミスってた…
× 0 → 00000000 → bl[1]=0, bm[1]=1, br[1]=0 ;
○ 0 → 00000000 → bl[0]=0, bm[0]=0, br[0]=0 ;

371 :デフォルトの名無しさん:02/05/18 06:17
       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       | まじでともっちと
       \
          ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
         ∧_∧
         ( ´Д`)
       /⌒    ⌒ヽ
      /_/|     へ \
    (ぃ9 ./    /   \ \.∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
       /    ./     ヽ ( ´Д` )< やりたいです。
      (    /      ∪ ,  /   \_______
       \ .\\     (ぃ9  |
        .\ .\\    /    /  ,、
          >  ) )  ./   ∧_二∃
         / //   ./     ̄ ̄ ヽ
         / / /  ._/  /~ ̄ ̄/ /
         / / / )⌒ _ ノ     / ./
       ( ヽ ヽ | /       ( ヽ、
        \__つ).し          \__つ

372 :デフォルトの名無しさん:02/05/18 06:58
>>293
でも結構いるんだよね。そういうひと。
例の先輩とか(ワラ

373 :デフォルトの名無しさん:02/05/18 07:02
>>349
よほど無駄なことをしなければどんな方法でも対して変わらない気がする。
わかりやすい方法でいいと思うんだけど。

374 :デフォルトの名無しさん:02/05/18 11:38
>>373
お前の発言って、どんな問題に対しても言える事だな。(w

#define EvaluateAlgorithm(algorithm)\
    (isdull(algorithm)?MUDANAKOTO_YARISUGI:DOREDEMO_ONAJI)

375 :どうでもいい回想(その1):02/05/18 11:51
〜約1年前の某ミッションにて〜
「やはり、これは・・・」
「・・・コンパイラに問題ありですね。」
「ベンダーのサポートを受けましょう。」
「コンパイラのライセンスは他プロジェクトからのコピーなので、
今回その選択肢はありません。」
「何ィ〜!!」
〜おしまい〜

376 :どうでもいい回想(その2):02/05/18 12:03
〜約4年前の出張先での某ミッションにて〜
「・・・やはり、これは・・・」
「・・・コンパイラに問題ありですね。」
「ループカウンタにはintを用いよ、という事ですね。」
「全ソースを見直しましょう。」

(お、お前ら、ループカウンタにcharを使うんじゃねえ〜!!
それでメモリ節約したつもりかぁ〜!!)

「さて、今後をどうするかですが・・・」
「ベンダーに連絡しますか。」
「・・・サポート期間は3年前に切れています。」
「阿呆かぁ〜!!ベンダーに連絡しても、
『新バージョンのご案内』が来て終わりじゃあ〜!!」

ちなみにその時の出張先会社のチームの人達は、
ヘッダーの最初と最後につける
#ifndef __XXX_H
#define __XXX_H
#endif
を全く使っていませんでした。
あと、「#defineマクロは小文字で最後は_c」というコーディングルールも持ってました。
〜おしまい〜

377 :デフォルトの名無しさん:02/05/18 12:25
>>371
キモイです。

378 :デフォルトの名無しさん:02/05/18 12:26
>>371
ってことは、3pですか?


379 :デフォルトの名無しさん:02/05/18 12:30
>>376
ネタだろうけどワラタ


380 :デフォルトの名無しさん:02/05/18 12:58
>>374
あほか。

381 :デフォルトの名無しさん:02/05/18 14:46
構造体のメンバを参照するときに,Kou[Num]で「.」を入力した時,
前にメンバとして使っていたものが出てきてしまいます。
今は,メンバとして,使っていないんですが。

382 :デフォルトの名無しさん:02/05/18 14:49
clwだかを削除

383 :デフォルトの名無しさん:02/05/18 15:01
char Hairetu[20][20];
を関数に引数として送りたいのですが,うまくいきません
Kansuu(Hairetu,100);

void Kansuu(char *Hanregu)
{
 printf("モナー\n");
}

384 :デフォルトの名無しさん:02/05/18 15:12
void Kansuu(char Hanregu[20][]);
とかにせんと。
つかなんで はいれぐ?


385 :デフォルトの名無しさん:02/05/18 15:15
ありがとん
おちゃめごころから

386 :385:02/05/18 15:29
ごめん。うまくいかんかった。
char Hairetu[20][20];

Kansuu(&Hairetu);でアドレスを渡し、

void Kansuu(char *Hai)
{
 Hai[0][0]=5;
}
というような感じで,アドレスを参照して,数字を入れたいのですが

>>384
関数の部分はそれでいいんですよね?

387 :デフォルトの名無しさん:02/05/18 15:53
ソースコード解析ツールのQACってどうなん?
使える?

388 :manko chinko:02/05/18 16:02
>>386
>Kansuu(&Hairetu);でアドレスを渡し、

&は必要ないですね。

389 :386:02/05/18 16:21
できましたが,どうも関数の宣言がおかしいようです

Kan(Hairetu[20];

void Kan(char TempHani[][20])
{

}

関数の宣言はvoid(char *);です。

390 :デフォルトの名無しさん:02/05/18 17:06
宣言が
char Hairetu[20][20];
とかになってるのだろうから、

Kan(Hairetu[20]);

では呼ばれたがわに渡されるのは一次元の配列(ポインタ)と等しくなる。
だから呼び出すときは

Kan(Hairetu);

だけでオッケー。

void Kan(char TempHani[][20])
はおかしい。[][20]がおかしい。
なぜ入れ替わってるか?
void Kan(char TempHani[20][20])

void Kan(char *TempHani[20])
も試してみること。
あと慣れるまでは2次元配列を使わないことをお勧めする
(それかほかの関数を呼び出さないように)。


391 :デフォルトの名無しさん:02/05/18 17:08
void Kan(char array_2d[][20]);

392 :デフォルトの名無しさん:02/05/18 17:10
>>386
人の話聞けよ。

393 :デフォルトの名無しさん:02/05/18 17:21
scanf("%d",a);     ←(w


394 :manko chinko:02/05/18 17:24
っていうか多次元配列の渡し方は入門書だったら必ず載ってますよね....

>>393
???

395 :デフォルトの名無しさん:02/05/18 17:38
>>394
っていうかscanfの解説なんて入門書だったら必ず載ってますよね。。。

>>395
???

396 :manko chinko:02/05/18 17:40
>>395
>っていうかscanfの解説なんて入門書だったら必ず載ってますよね。。。
載ってますね。で、何がいいたいんでしょうか?:-)



397 :デフォルトの名無しさん:02/05/18 17:46
scanf("%s",&a);     ←(w

398 :デフォルトの名無しさん:02/05/18 17:48
取 り あ え ず お 前 ら ポ イ ン タ の 使 い 方 復 習 し て こ い

399 :デフォルトの名無しさん:02/05/18 17:48
scanf("%s",&*&(&a)[0]);     ←(w

400 :デフォルトの名無しさん:02/05/18 18:23
>>381
ってどういうこと?VC++のエディタとかの話?

401 :デフォルトの名無しさん:02/05/18 18:38
変なやつがいるな

402 :デフォルトの名無しさん:02/05/18 18:39
2人はいるな。

403 :デフォルトの名無しさん:02/05/18 18:47
片方は間違いなく14歳コテハンクズ野郎だ

404 :デフォルトの名無しさん:02/05/18 19:45
初心者が足を引っ張り合うスレはここですか?

405 :デフォルトの名無しさん:02/05/18 19:51
struct ...

(*ptr).data = 10;    ←(w



406 :デフォルトの名無しさん:02/05/18 21:56
>>405
表面上の知識の欠落を笑うよりも、
(おそらくは独力で)構造体への
ポインタの操作が有用だという事に
気づいたそのセンスに活目すべし。

漏れには、こんな些細な事を(wっている奴
なんかより、このコードを書いた奴の方が
ずっと将来性がある様に見受けられるが。

407 :デフォルトの名無しさん:02/05/18 22:00
>>406
そだね。同意。

408 :デフォルトの名無しさん:02/05/18 22:12
>>406
知識の欠落と断じるのは早いのでは?
私の場合は間接参照を嫌って>>405のように書く場合もあります。
でもこれって少数派かなぁ?

409 :超初心者です:02/05/18 22:12
教えてください!ANSICライブラリではmathと呼ばれるものがある。
これを用いるにはライブラリ部にどのような行を加えたらよいか?


410 :超初心者です:02/05/18 22:15
すべてのcプログラムでで定義されなければならない関数の名前はなんですか?

411 :デフォルトの名無しさん:02/05/18 22:18
>>409
ライブラリ部ってなんですか?

>>410
ありません。

412 :デフォルトの名無しさん:02/05/18 22:20
main

413 :デフォルトの名無しさん:02/05/18 22:28
-lm


414 :超初心者です:02/05/18 22:34
1変数のマイナス演算子と2変数の減法演算子との異なる点を挙げよ。
っていう問題を教えてください


415 :デフォルトの名無しさん:02/05/18 22:34
宿題は別スレいけバカ


416 :デフォルトの名無しさん:02/05/18 22:41
>>415
syukudaitoha kgiraneedaro baka?

417 :デフォルトの名無しさん:02/05/18 22:43
414
ネタならさげるように

418 :f:02/05/18 22:45
やっぱりwinアプリをCで作る場合はVCを買った方が良いだろうか?

419 :デフォルトの名無しさん:02/05/18 22:47
そうだよ

420 :デフォルトの名無しさん:02/05/18 22:48
いらない

421 :デフォルトの名無しさん:02/05/18 22:48
>>416
最近よく見かけますが、誰も読んでないと思うんです。

422 :デフォルトの名無しさん:02/05/18 22:49
>>418
いらない。>>7をミロ


423 :f:02/05/18 22:52
でもBCCってムズくない?BCCだけで出来てるwinアプリってあんのかな?

424 :デフォルトの名無しさん:02/05/18 22:53
ある

425 :デフォルトの名無しさん:02/05/18 22:53
>>423
あるだろ。
昔はみんなああやってた。

426 :f:02/05/18 22:54
マジ!?知らなかった・・・。そっか、builderとかは割と最近なのか・・・。

427 :デフォルトの名無しさん:02/05/18 23:03
まあ俺はVCを勧めるがな。

428 :デフォルトの名無しさん:02/05/18 23:04
まあ俺はAVを勧めるがな

429 :デフォルトの名無しさん:02/05/18 23:06
まぁ俺はソープを勧めるがな

430 :デフォルトの名無しさん:02/05/18 23:07
>でもBCCってムズくない?BCCだけで出来てるwinアプリってあんのかな?
皆後者には答えるが前者には答えないという罠

431 :デフォルトの名無しさん:02/05/18 23:09
>>430
>>425が答えてるぞ。

432 :デフォルトの名無しさん:02/05/18 23:09
bccってリソースコンパイラついてないだろ

433 :デフォルトの名無しさん:02/05/18 23:10
429はひきこもり

434 :デフォルトの名無しさん:02/05/18 23:32
リソースコンパイラは当然ついている。
GUIのリソースエディタがない

435 :sage:02/05/18 23:39
WinXPでは、Win98等で作ったプログラムが動かない場合があるそうなのですが、
これはどうしようもない事なのでしょうか??
DOSプロンプトの仕様が違うとか・・・。

ネットで見つけた、DOSプロンプトアプリ上のグラフィック関数なんか
コンパイラできても表示が意味不明で・・・。


436 :デフォルトの名無しさん:02/05/18 23:41
>>435
DOSリアルタイムで知らない人か?
その辺から勉強した方が良いと思われ。

437 :デフォルトの名無しさん:02/05/18 23:43
× WinXPでは、Win98等で作った
○ WinXPでは、Win9X用に作った

438 :デフォルトの名無しさん:02/05/18 23:44
435です。sage間違えてしまった・・・。

初心者学生で、先生の言うとおりにしてるだけなんで
全く意味不明です。

VC++6.0を明らかに使いこなせてない・・・。



439 :シッタカなので信用するな:02/05/19 01:44
コンソールアプリで標準関数しか使ってない
(or Win32Api使ってても、CopyMemoryとか基本的なのしか使ってない)
のだったら多分Win9x でもWinXPでも変らんと思うよ


440 :デフォルトの名無しさん:02/05/19 03:00
>>349
まぁ、今更ですし、他のやり方と比べてないので
速いかどうかも、分かりませんが、せっかく作ったので…
といっても、結構、手を抜いてる為
返る値は、一致した後のintの添字だったりしますので
必要な場合は、breakの前で適当に処理して下さい

size_t search ( unsigned int *ip, size_t size, size_t n ) {
 unsigned int table, ret, n06, n12, count = 0 ;
 static unsigned short search_table [256] = {
  0x0000, 0x0041, 0x0040, 0x0082, 0x0040, 0x0041, 0x0080, 0x00c3,
  0x0040, 0x0041, 0x0040, 0x0082, 0x0080, 0x0081, 0x00c0, 0x0104,
  0x0040, 0x0041, 0x0040, 0x0082, 0x0040, 0x0041, 0x0080, 0x00c3,
  0x0080, 0x0081, 0x0080, 0x0082, 0x00c0, 0x00c1, 0x0100, 0x0145,
  0x0040, 0x0041, 0x0040, 0x0082, 0x0040, 0x0041, 0x0080, 0x00c3,
  0x0040, 0x0041, 0x0040, 0x0082, 0x0080, 0x0081, 0x00c0, 0x0104,
  0x0080, 0x0081, 0x0080, 0x0082, 0x0080, 0x0081, 0x0080, 0x00c3,
  0x00c0, 0x00c1, 0x00c0, 0x00c2, 0x0100, 0x0101, 0x0140, 0x0186,
  0x0040, 0x0041, 0x0040, 0x0082, 0x0040, 0x0041, 0x0080, 0x00c3,
  0x0040, 0x0041, 0x0040, 0x0082, 0x0080, 0x0081, 0x00c0, 0x0104,
  0x0040, 0x0041, 0x0040, 0x0082, 0x0040, 0x0041, 0x0080, 0x00c3,
  0x0080, 0x0081, 0x0080, 0x0082, 0x00c0, 0x00c1, 0x0100, 0x0145,
  0x0080, 0x0081, 0x0080, 0x0082, 0x0080, 0x0081, 0x0080, 0x00c3,
  0x0080, 0x0081, 0x0080, 0x0082, 0x0080, 0x0081, 0x00c0, 0x0104,
  0x00c0, 0x00c1, 0x00c0, 0x00c2, 0x00c0, 0x00c1, 0x00c0, 0x00c3,
  0x0100, 0x0101, 0x0100, 0x0102, 0x0140, 0x0141, 0x0180, 0x01c7,
  0x1040, 0x1041, 0x1040, 0x1082, 0x1040, 0x1041, 0x1080, 0x10c3,
  0x1040, 0x1041, 0x1040, 0x1082, 0x1080, 0x1081, 0x10c0, 0x1104,
  0x1040, 0x1041, 0x1040, 0x1082, 0x1040, 0x1041, 0x1080, 0x10c3,
  0x1080, 0x1081, 0x1080, 0x1082, 0x10c0, 0x10c1, 0x1100, 0x1145,
  0x1040, 0x1041, 0x1040, 0x1082, 0x1040, 0x1041, 0x1080, 0x10c3,
  0x1040, 0x1041, 0x1040, 0x1082, 0x1080, 0x1081, 0x10c0, 0x1104,
  0x1080, 0x1081, 0x1080, 0x1082, 0x1080, 0x1081, 0x1080, 0x10c3,
  0x10c0, 0x10c1, 0x10c0, 0x10c2, 0x1100, 0x1101, 0x1140, 0x1186,
  0x2080, 0x2081, 0x2080, 0x2082, 0x2080, 0x2081, 0x2080, 0x20c3,
  0x2080, 0x2081, 0x2080, 0x2082, 0x2080, 0x2081, 0x20c0, 0x2104,
  0x2080, 0x2081, 0x2080, 0x2082, 0x2080, 0x2081, 0x2080, 0x20c3,
  0x2080, 0x2081, 0x2080, 0x2082, 0x20c0, 0x20c1, 0x2100, 0x2145,
  0x30c0, 0x30c1, 0x30c0, 0x30c2, 0x30c0, 0x30c1, 0x30c0, 0x30c3,
  0x30c0, 0x30c1, 0x30c0, 0x30c2, 0x30c0, 0x30c1, 0x30c0, 0x3104,
  0x4100, 0x4101, 0x4100, 0x4102, 0x4100, 0x4101, 0x4100, 0x4103,
  0x5140, 0x5141, 0x5140, 0x5142, 0x6180, 0x6181, 0x71c0, 0x8208
 } ;

/* 続きます */

441 :440:02/05/19 03:01
 n06 = ( n & 0x000fffff ) << 6 ;
 n12 = n06 << 6 ;
 for ( ret = 0 ; ret < size ; ret++ ) {
  table = search_table[ ( ( *(ip+ret) ) >> 24 ) ] ;
  if ( ( count + table ) >= n12 || ( table & 0x03c0 ) >= n06 ) break ;
  count = ( table > 0x08000 ) ? count + 0x08000 : ( table & 0x0f ) << 12 ;
  table = search_table[ 0x0ff & ( ( *(ip+ret) ) >> 16 ) ] ;
  if ( ( count + table ) >= n12 || ( table & 0x03c0 ) >= n06 ) break ;
  count = ( table > 0x08000 ) ? count + 0x08000 : ( table & 0x0f ) << 12 ;
  table = search_table[ 0x0ff & ( ( *(ip+ret) ) >> 8 ) ] ;
  if ( ( count + table ) >= n12 || ( table & 0x03c0 ) >= n06 ) break ;
  count = ( table > 0x08000 ) ? count + 0x08000 : ( table & 0x0f ) << 12 ;
  table = search_table[ 0x0ff & ( *(ip+ret) ) ] ;
  if ( ( count + table ) >= n12 || ( table & 0x03c0 ) >= n06 ) break ;
  count = ( table > 0x08000 ) ? count + 0x08000 : ( table & 0x0f ) << 12 ;
 }
 return ret ;
}

442 :440:02/05/19 03:03
テーブルは、下のようにして作ったものですが
あまり大きくないので、(掲示板に書き込むには大き過ぎたようですが)
速さの事も考えると、そのままでも良いかなと…
nが9以上の場合は、( table & 0x03c0 ) >= n06 ) の部分が必要ないので
8以下と、9以上で、分けて処理をした方が良いかも

#define BIT 8
unsigned short *mkstable ( void ) {
 unsigned short num, left, max, right, buf1, buf2 ;
 unsigned short *search_table ;
 search_table = (unsigned short *) malloc ( sizeof (short int) << BIT ) ;
 if ( search_table ) {
  for ( num = 0 ; num < ( 0x01 << BIT ) ; num++ ) {
   left = max = right = 0 ;
   while ( ( ( 0x01 << ( BIT - 1 ) ) >> left ) & num ) left++ ;
   buf1 = 0 ;
   do {
    buf2 = 0 ;
    while ( ( 0x01 << buf1++ ) & num ) buf2++ ;
    if ( max < buf2 ) max = buf2 ;
   }
   while ( buf1 < BIT ) ;
   while ( ( 0x01 << right ) & num ) right++ ;
   *(search_table+num) = ( left << 12 ) | ( max << 6 ) | right ;
  }
 }
 return search_table ;
}

443 :デフォルトの名無しさん:02/05/19 09:26
>>349
ちょと面白そうなので、俺も参加。

int search( /* 返り値 -> 1:見つかった, 0:見つからなかった */
  unsigned char *a, /* 検索の対象のポインタ */
  int l, /* 検索する対象のサイズ(バイト単位) */
  int sp, /* 検索対象のパリティー */
  int sc, /* 検索対象のビット数 */
  int *fp, /* 検索結果の位置(バイト)*/
  int *fb /* 検索結果の位置(ビット) */ )
{
  struct { int l, r, f; } t[ 256 ], *b;
  int i, j, c[ 8 ], n, d = 0;

  for( i = 0 ; i < 256 ; i ++ ) {
    int p = ( i >> 7 ), q, r, s;

    b = &t[ i ];
    for( c[ n = 0 ] = 0, q = p, j = 8 ; -- j >= 0 ; c[ n ] ++ )
      if( q != ( r = ( ( i >> j ) & 1 ) ) ) {
        c[ ++ n ] = 0;
        q = r;
        }
    n ++;
    b->l = ( ( sp == p ) ? c[ 0 ] : 0 );
    for( b->f = -1, s = 0, q = p, j = 0 ; j < n ; j ++, q = !q ) {
      if( ( sp == q ) && ( sc <= c[ j ] ) )
        b->f = s;
      s += c[ j ];
      }
    b->r = ( ( sp != q ) ? c[ n - 1 ] : 0 );
    }
  for( n = 0 ; n < l ; n ++ ) {
    b = &t[ a[ n ] ];
    if( sc <= b->l + d ) {
      *fp = n - 1 - ( ( d - 1 ) / 8 );
      *fb = 8 - d % 8;
      return 1;
      }
    if( b->f != -1 ) {
      *fp = n;
      *fb = b->f;
      return 1;
      }
    if( b->r != 8 )
      d = 0;
    d += b->r;
    }
  return 0;
  }

444 :443:02/05/19 09:27
てすと

#include <stdio.h>

int main( void )
{
  unsigned char t[] = { 0x06, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, };
  int tfp, tfb;

  if( search( t, sizeof( t ), 1, 10, &tfp, &tfb ) )
  /* 1が連続して10ビット立っている位置を検索する */
    printf( "%dバイト目の%dビット目で見つけました\n", tfp, tfb );
  else
    printf( "見つかりません\n" );
  return 0;
}

445 :デフォルトの名無しさん:02/05/19 10:20
>>444
正確に動く(バグが無い)のはあくまで最低条件なんだから、
絶対マッチしないパターンを作り出してパフォーマンスをはかるテストルーチン書いてくれ

446 :443:02/05/19 10:58
>>445
まぁ、ご希望とあらば・・・
てすと(Ver 1.1)

int main( void )
{
  unsigned char t[] = { 0x06, 0x01, 0x80, 0x00, 0x00, };
  int tfp, tfb;
  time_t start, end;
  int r;

  time( &start );
  r = search( t, sizeof( t ), 1, 10, &tfp, &tfb );
  /* 1が連続して10ビット立っている位置を検索する */
  time( &end );
  if( r )
    printf( "%dバイト目の%dビット目で見つけました\n", tfp, tfb );
  else
    printf( "見つかりません\n" );
  printf( "検索時間:%f\n", difftime( end, start ) );
  return 0;
}

447 :デフォルトの名無しさん:02/05/19 11:37














                         レベルヒクッ!

448 :443:02/05/19 12:02
>>443
スマソ、バグはけーん。

*fp = n - 1 - ( ( d - 1 ) / 8 ); ==> *fp = n - ( d + 7 ) / 8;
*fb = 8 - d % 8; ==> *fb = 7 - ( d + 7 ) % 8;

ここらへん、テキトーに -1 とかつけただけだったからなぁ
(今回もそうだけど・・・)。

>>447
つーか、「てすと」っていったって usage の意味で
つけただけのコードなんだけど・・・
速いかどうかは自分で動かして評価すればいいだけじゃん?

449 :デフォルトの名無しさん:02/05/19 13:16
っていうか、元発言者が
「何に使うのか」
「現在どの程度の速度で、それでどうして不満なのか」
を明らかにしてないくせに、

>>361
>でnビットのマスク作って、ワード単位でANDとって逝くのが
>速いんじゃないかと…

こういうのが早そうだから誰かコーディングして的な発言してたり
どうしようもない屑野郎だよな

450 :デフォルトの名無しさん:02/05/19 13:40
ここで質問すると、言葉足らずが、屑野郎にまで昇華する罠。

451 :デフォルトの名無しさん:02/05/19 13:53
実装方法が分かっていながら自分で実装するという姿勢を見せないのはどう考えても屑野郎だろ

452 :デフォルトの名無しさん:02/05/19 14:04
( ´・∀・`) へー

453 :デフォルトの名無しさん:02/05/19 14:06
ロジック構築能力が必要だといわれましたが,C言語ではなんの部分に当たるの?
文字列検索とか?ソートとか?

454 :デフォルトの名無しさん:02/05/19 14:32
>>453
ハァ?

455 :デフォルトの名無しさん:02/05/19 15:04
>>451
まあ「お題」もらって暇つぶせたからいいんじゃね〜の?
どうせこのスレ他にやることないんだし。

456 :デフォルトの名無しさん:02/05/19 15:44
doubleとlongって、longのほうが表現できる数値の範囲は広いですよね?

457 :デフォルトの名無しさん:02/05/19 15:47
>>456
いいえ。

458 :デフォルトの名無しさん:02/05/19 15:51
dobule型のほうが広いんですか。ありがとうございました。

459 :デフォルトの名無しさん:02/05/19 15:54
>>458
だからといってlongをdoubleに変換して何も失わないという
わけではない。

460 :デフォルトの名無しさん:02/05/19 15:56
単純に比較していいものなのか?扱い方が全然違うけど。

461 :デフォルトの名無しさん:02/05/19 15:57
しつもんです。
mainで再帰呼び出しやっても良いものですか?

462 :デフォルトの名無しさん:02/05/19 16:03
>>461
やってみて、自分で判断しろ

463 :デフォルトの名無しさん:02/05/19 16:05
>>462
どんな質問にも使える万能の答登場。


464 :デフォルトの名無しさん:02/05/19 16:10
>>462
まさに伝家の宝刀

465 :デフォルトの名無しさん:02/05/19 16:10
>>463
しかし実は何も答えていないという罠。

466 :デフォルトの名無しさん:02/05/19 16:14
>>465
伝家の宝刀を抜かれた相手は決まってそう言うんだよ・・・

467 :デフォルトの名無しさん:02/05/19 16:25
じゃ、今後このスレの答は「やってみて、自分で判断しろ」に統一ってことで。

しゅーりょーーーーーーーーー

468 :デフォルトの名無しさん:02/05/19 16:35
ばかだなぁ。
「〜のやり方を教えてください」って質問の場合はどーすんだよぉ。

469 :デフォルトの名無しさん:02/05/19 16:36
main()で再帰するやり方を教えてくだちい

470 :デフォルトの名無しさん:02/05/19 16:43
>>469
だからそれくらいやってみろっつってんだろバカ

471 :デフォルトの名無しさん:02/05/19 16:44
#include <stdio.h>

int main(int argc, char **argv){
if(argv)
printf("%d\n",argc*main(argc-1,NULL)) ;
else
return argc?argc*main(argc-1,NULL):1 ;

return 0 ;
}


472 :デフォルトの名無しさん:02/05/19 16:45
int main()
{
return main();
}

473 :デフォルトの名無しさん:02/05/19 16:49
なんでLinuxはヘッダーファイルに共通関数みたいなのを
書き込むんですか?linux/fs.hみたいな必須のファイルに
staticな関数がガリガリか書かれているのを見ると萎えます。
それとも様々なターゲットに向けて書かれているからしょうがないので
しょうか?

今はLinuxは辞めてNetBSDでカーネルの勉強しようとかと思ってます。

474 :デフォルトの名無しさん:02/05/19 16:51
>>473
インライン展開したいからに決まってるだろヴォケ。
へッダに書かなきゃどこに書くんだよ。

475 :デフォルトの名無しさん:02/05/19 16:55
>>474
それなら普通はインライン関数用のファイルを作るもんじゃないの?
NetBSDのソースは読んでないからしらないが。

476 :デフォルトの名無しさん:02/05/19 16:58
>>475
インライン関数用のファイルってへッダじゃないの?

477 :デフォルトの名無しさん:02/05/19 16:59
>>476
そう。だから型の定義とは何で別にしないのかと。

478 :デフォルトの名無しさん:02/05/19 16:59
言葉遣いの汚いPGは案外良いやつ
でも本当に凄いPGは言葉遣いもいやなくらい丁寧

479 :デフォルトの名無しさん:02/05/19 17:00
>>475
ファイルシステムで使うマクロ定義は当然fs.hに書くよね?

だったらファイルシステムで使うインライン関数定義も
fs.hに書くのが当然だろ。

480 :デフォルトの名無しさん:02/05/19 17:03
>>477
fs_types.h
fs_constants.h
fs_macros.h
fs_functions.h
等々と分けろと?

C++でプログラム書くときにもクラス定義とメソッド定義と定数定義を
分けるのかね。

481 :デフォルトの名無しさん:02/05/19 17:03
>>479
そんなもんですか。
今まで自分がやってきた方法が変なのか。。。鬱だ

482 :デフォルトの名無しさん:02/05/19 17:08
Cにインライン関数なんてありません
C++スレに逝けアフォども

483 :デフォルトの名無しさん:02/05/19 17:10
>>482
http://seclan.dll.jp/c99d/c99d07.htm#dt19990802

484 :彦一:02/05/19 17:13
メール欄は要チェックや!

485 :デフォルトの名無しさん:02/05/19 17:13
型とその型のデータに対する操作は
1つのファイルで定義した方がいいように思うが、
>>481 は今までどうやってたのよ?

486 :483:02/05/19 17:15
がびーん

487 :デフォルトの名無しさん :02/05/19 17:17
>>485
恥かしいからあんま突っ込まないでくれ(泣
C++でクラスの定義と実際のメソドはべつに書くよね?
それと一緒で単純に関数マクロは別ファイルにしてた。

488 :デフォルトの名無しさん:02/05/19 17:19
 ⊂ ヽ ⊂ ヽ ⊂ ヽ ⊂ ヽ ⊂ ヽ
   \\ ∧_∧∧_∧     ∧∧
     \ ( ´_ゝ`) `∀´>・∀・)*゚∀゚)
      >  ⌒ヽ  ⌒ヽ  ⌒ヽ  ⌒ヽ  ⌒ヽ
     /    へ \ へ \ へ \ へ \ へ \
    /    /   \\   \\ \\ \\ \\
    レ  ノ    ノヽ_つノ ヽ_つ ヽ_つ ヽ_つ
   /  /  /  /  /  /  /  /  /  /
  /  /|  /  /| /  /| /  /| /  /|
 (  / | (  / |  |\_|\_|\_|\_|\________
  |  | ヽ |  | ヽ /
  |  |、 \    | ともっちと、やりたい・・・
  | / \ ⌒l  |
  | |   ) /  \__________________
 ノ  )   し'
(_/


489 :デフォルトの名無しさん:02/05/19 17:21
このやろ、おれのことを晒し上げかよ!ま、いいや

490 :デフォルトの名無しさん:02/05/19 17:23
>>406
どこにアロー演算子が解説してない書籍があるんだ?
それともアロー演算子は知らなくてもいいとおもってるんじゃ、、、、、

491 :デフォルトの名無しさん:02/05/19 17:25
>>488
そんなに大勢でともっちとやるの?
ともっちがかわいそうだよ。

492 :デフォルトの名無しさん:02/05/19 17:27
>>488
一番右側にある腕らしきものは何ですか?


493 :デフォルトの名無しさん:02/05/19 17:28
(´-`)。oO(…書き間違えたのか?…)




494 :デフォルトの名無しさん:02/05/19 17:30
(´-`)。oO(…ともっち今ごろなにしてるのかな…)

495 :デフォルトの名無しさん:02/05/19 17:30
顔4個で、体が5個・・・ (((( ;゚Д゚)))ガクガクブルブル


496 :デフォルトの名無しさん:02/05/19 17:31
Cを勉強するならどんな本が良いですか?

497 :デフォルトの名無しさん:02/05/19 17:36
>>496
擦違い。逝ってよし。

498 :デフォルトの名無しさん:02/05/19 17:38
ともっち!だ〜い好き!


499 :デフォルトの名無しさん:02/05/19 17:39
C言語はLP64の玲にあるように、
longとpointerは同じビット長であることが
重要なことなんですか。

500 :デフォルトの名無しさん:02/05/19 17:39
500げっと!
ずさ
        by ともっち

501 :デフォルトの名無しさん:02/05/19 17:41
( -_-)=○)'Д') >>500

502 :デフォルトの名無しさん:02/05/19 18:10

         ∧_∧       ( )
         ( ´Д`)    //。
       /⌒    ⌒ヽ//   。
      /_/|     //    。
    (ぃ9 ./    ///     。
       /   //3      
      (  ///        
       \ .\\    
        .\ .\\   
          >  ) ) 
         / //  
         / / /  
         / / / 
       ( ヽ ヽ 
        \__つ)

ともっち!我慢できないよぅ!

503 :デフォルトの名無しさん:02/05/19 18:11
>>499
ポインタに対して数値演算(アドレスの上位xxビットで表を引くとか)
ができないと欝だし、数値演算の結果をポインタに変換できないのも
困る。なので、ポインタと同じサイズの整数型が1つはホスィー。

504 :デフォルトの名無しさん:02/05/19 18:13
>>499
それを言うならintとポインタな気もする。

505 :デフォルトの名無しさん:02/05/19 18:14
どうでもいい話なんですが、
128bitのアドレス空間は
この先20年はないものと考えていいですよね?

506 :デフォルトの名無しさん:02/05/19 18:15
>>504
でも64bitUNIXはintは32bitのままなんですよね?

507 :デフォルトの名無しさん:02/05/19 18:17
>>506
勉強不足でした。

508 :デフォルトの名無しさん:02/05/19 18:50
ともっち!じゃあ体の勉強しようか!

509 :デフォルトの名無しさん:02/05/19 18:52
体、環、群か。代数だね。


510 :デフォルトの名無しさん:02/05/19 19:00
>>505
Moore's Law(メモリは3年で4倍)が正しいとして、
32bitで不足ぎみになったのが1990年ごろとすると、
64bitで不足するのは2038年ごろか。


511 :デフォルトの名無しさん:02/05/19 19:06
カカンカンage!

512 :デフォルトの名無しさん:02/05/19 19:08
(unsigned long)sizeof(int);
というふうに(unsigned long)をつけるべくらしいですが,皆さんはやっていますか?

513 :デフォルトの名無しさん:02/05/19 19:10
>>512
なんでつけるべくなの?


514 :デフォルトの名無しさん:02/05/19 19:10
>>512
(size_t)の方が良くないか?

515 :デフォルトの名無しさん:02/05/19 19:13
>>513
処理系によって大きな値が帰ってくる場合があるから?

516 :デフォルトの名無しさん:02/05/19 19:14
(l)  ←マムコ

517 :デフォルトの名無しさん:02/05/19 19:15
既出。うざい。

518 :デフォルトの名無しさん:02/05/19 19:16
>>514
size_t型を知らないんだろ。きっと

519 :デフォルトの名無しさん:02/05/19 19:18
ムーアの法則
キタ━━(゚∀゚)━━ァ!
しかしIntelはムズイです

520 :デフォルトの名無しさん:02/05/19 19:18
sizeofの戻り値はもともとsize_tじゃないか?

521 :デフォルトの名無しさん:02/05/19 19:26
memset(a,0,(size_t)sizeof(int));
ってすればいいのかな?

522 :デフォルトの名無しさん:02/05/19 19:28
>>521
さっさとキャストはいらんという結論に達してくれ。

523 :デフォルトの名無しさん:02/05/19 19:35
いらんの?なんで?

524 :デフォルトの名無しさん:02/05/19 19:36
>>523
ヘッダ見てsize_tの定義見てみる。

525 :デフォルトの名無しさん:02/05/19 19:36
>>523
なんで要ると思うの?

526 :デフォルトの名無しさん:02/05/19 19:37
たとえば>>521のコードなら
size_t型を受け取る関数に
size_t型をの値を渡すんだから
キャストが要るわけない。

527 :デフォルトの名無しさん:02/05/19 19:55
ロジック構築能力が必要だといわれましたが,C言語ではなんの部分に当たるの?
文字列検索とか?ソートとか?

528 :デフォルトの名無しさん:02/05/19 19:56
>>527
論理的思考のことをそんなみょうちくりんな言葉で表現する人間は詐欺っちです。

529 :デフォルトの名無しさん:02/05/19 20:02
マルチポストのマルチンコ大王がいるな

530 :デフォルトの名無しさん:02/05/19 20:05
>>527
そう言われてC言語の瑣末に飛躍するところなんか、的を射た指摘だったっぽいな

531 :デフォルトの名無しさん:02/05/19 20:07
>>530
ロジック構築能力−>授業でその英語聞いた−>トランジスタトランジスタロジック−>パソコン?−>PC−>難しい−>C言語−>ウマー

532 :デフォルトの名無しさん:02/05/19 20:09
>>527
Equational Logic理論を構築する能力のことだ。
Cとは全くといってよいほど無縁。

533 :デフォルトの名無しさん:02/05/19 23:31
マルチンコ大王 キタ━━━(`Д´)ノ━━━!!

534 :阿呆:02/05/19 23:36
マルチポストは嫌われるようなので別スレのリンク貼っておきます。
http://pc.2ch.net/test/read.cgi/tech/1020785918/174-
あともうひといきなんです。
誰かお願い!

535 :デフォルトの名無しさん:02/05/19 23:43
知るか。

536 :アクビ:02/05/20 00:49
csv形式の文字列からデータを取得しようと思っています。
まず、データファイルから1行を読み込んで、
   char *s="a1.a2.a3.a4";
   strtok(s,',');
   strtok(NULL,',');・・・
としてa1、a2、a3、a4を取得しています。

でも、データが
"a1,,,a4"
の場合、a1とa4しか取得できません。
a2とa3がNULLであることまで知りたいのですがどうしたらいいでしょうか?

#とりあえず前処理として、",,"を",@,"などに置換してなんとかしようとしたのですが、
#だいぶ冗長な処理になってしまいそうで困っています。



537 : :02/05/20 00:51
strtokってあまり使ったこと無いからな。。。
データの形式がそこまでばっちり決まってるんなら自作すれば?

538 :デフォルトの名無しさん:02/05/20 01:36
連続した区切り文字は一つの区切りとして処理されちゃうから
君の用途には使えないよ。

.@.に置き換えるのは良いアイデアだけど、いっそのこと、Cの勉強がてら自分で作っちゃえば?


539 : :02/05/20 02:23
どっかにcsvデータ取得ライブラリとかあるんじゃないの?

540 :デフォルトの名無しさん:02/05/20 02:30
splitみたいなのを自分で実装しろ。

541 :デフォルトの名無しさん:02/05/20 03:20
strtokなんて使うなよ
Cライブラリの中でも一番気持ち悪い関数だぞ

542 :デフォルトの名無しさん:02/05/20 03:26
scanfでいいじゃん。


543 :デフォルトの名無しさん:02/05/20 03:33
>>542
アホか?
入力長が定まらないデータに対してscanfなんか使えるかよ

544 :デフォルトの名無しさん:02/05/20 03:35
>>543
ホントに上限がないという仕様なのか?
んじゃ1行読み込むのもfgets使わないんだな?

実用上4096文字とかで足りるなら、
fgetsとsscanfで十分じゃん。

545 :デフォルトの名無しさん:02/05/20 03:37
>>544
問題を刷りかえるなよ。
scanfとsscanfは違うだろ。

546 :デフォルトの名無しさん:02/05/20 03:38
わかった。

んじゃ「fgetsとsscanfでいいじゃん」

547 :デフォルトの名無しさん:02/05/20 03:40
男らしくないな。

548 :デフォルトの名無しさん:02/05/20 03:41
たかだかカンマと改行識別するだけだろ。
それぐらい数分で作れよ。

549 :デフォルトの名無しさん:02/05/20 03:41
すいません。マジで分からないんですが、scanfでもfgetsでも想定した
長さを越えたら動かないのは同じだと思うんですが、なぜsscanfだと
いいんですか?

550 :デフォルトの名無しさん:02/05/20 03:42
>>548
もうあるんだからいいじゃん。
これに使わないなら(s)scanfは何のため?

551 :デフォルトの名無しさん:02/05/20 03:45
ふつー書式入力なんて使わねーよ
想定外のデータがきたとたん、あぼーん。

552 :デフォルトの名無しさん:02/05/20 03:48
>>551
(使い方が下手れなだけでは…)

553 :デフォルトの名無しさん:02/05/20 03:49
csvは横にだらだら長い事あるからfgetsだと不安な感じ。

554 :デフォルトの名無しさん:02/05/20 03:51
>>553
じゃあどうするの?
カンマまでgetcで切り出すにしても、
文字列の長さにはどっかで限度があるでしょ?

555 :デフォルトの名無しさん:02/05/20 03:53
>>554
ヒープ使えば?
足りなかったらreallocで伸ばしていけばいいし。

556 :デフォルトの名無しさん:02/05/20 03:59
なるほど…

でも、入力の仕様決めといてfgets使った方が良いと思うな。
長すぎたらエラーにすれば良い。

いちいちそんな趣味的なことやってたら時間が無駄すぎる。

557 :デフォルトの名無しさん:02/05/20 04:07
>>556
csvは入力の仕様なんて決まってねーんだよ
適当にやるか、ある出力例に対して準拠するか、ぐらいしかない。
>いちいちそんな趣味的なことやってたら時間が無駄すぎる。
この程度で趣味的ですか。
おめでてーやつ。

558 :デフォルトの名無しさん:02/05/20 04:30
>>557
ハァ? >>536は汎用CSVライブラリ作ろうとしてるのかよ?
単にCSV形式でフィールド数や内容も定まったデータだろ?

>>536みたいな初心者にCSV一般を読み取るようなライブラリ
書かせる工数かけるならそれこそCSVライブラリ買った方が
安いじゃねーか馬鹿が。

ライブラリ使わずにいちいち車輪の再発明するのは日曜プロ
グラマのすることだよ、この給料泥棒が。

559 :デフォルトの名無しさん:02/05/20 04:37
マァマァオチツイテ

560 :デフォルトの名無しさん:02/05/20 04:40
ワラタ

561 :デフォルトの名無しさん:02/05/20 05:33
なにか書こうと思ったけどみんな解決ズミなのね ショボーン (・v・)/

562 :デフォルトの名無しさん:02/05/20 06:34
http://cm.bell-labs.com/cm/cs/tpop/csvgetline2.c

563 :デフォルトの名無しさん:02/05/20 06:49
べるらぼぉ〜

564 :デフォルトの名無しさん:02/05/20 08:06
工数って嫌な言葉だ

565 :デフォルトの名無しさん:02/05/20 09:48
エ数ならいい?

566 :デフォルトの名無しさん:02/05/20 09:49
>>557はホントにアホだな〜
仕様決まってないなら自分で書くこともできないじゃないか。

567 :デフォルトの名無しさん:02/05/20 10:34
>>565
どう違うか30秒ほどなやんだ。

568 :デフォルトの名無しさん:02/05/20 11:30
もう解決してるけど・・
一行処理はこんな感じでうか?
while((c=fgetc(stdin)) != '\n'){
if(c == ','){
while((c=fgetc(stdin)) == ',')
fprintf(stdout," NULL");
if(c == '\n'){
fprintf(stdout, " NULL");
break;
}
fputc(' ',stdout);
}
fputc(c, stdout);
}

569 :デフォルトの名無しさん:02/05/20 12:31
ともっち!

570 :デフォルトの名無しさん:02/05/20 13:41
>>568
なんか凄いDQNなコード...

fgetc(stdin)とか
fputc(..., stdout)とか
fprintf(stdout, ...)とか
もうやめてって感じ。

EOFの処理もしてないしさー。

だいたいこれ何? 前処理フィルタ?
どうせなら読み込むコード書いてくれよ。


571 :568:02/05/20 14:06
DQNって言われたよ〜( ´Д⊂ヽうえーん
前処理フィルタって?
たしかになんだろね・・これ
よくわからないことはやらなきゃよかったよ〜( ´Д⊂ヽ

572 :デフォルトの名無しさん:02/05/20 14:10
>>571
なにをするプログラムなのか解説求む(ワラ

573 :デフォルトの名無しさん:02/05/20 14:24
コンマで区切られた要素間にスペースを入れて出力するもんでうぅ・・
コンマが連続してる時は中身が無いと見なしてでNULLを入れます
手抜きだから使い物にならんけど・・(T-T)

574 :デフォルトの名無しさん:02/05/20 14:24
しまったageてもた・・・

575 :CHI-CHI:02/05/20 14:57
あの、教えてほしいんですけど、RS232Cでモーターを制御したいんですけど、
RS232CのOn/offを切り替える、プログラムってどんな感じになりますか?お願いします。

576 :デフォルトの名無しさん:02/05/20 15:02
            ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д` )< キャー!!
          /,  /    \___________    
         (ぃ9  |
          /    /、
         /   ∧_二つ
         /   /
        /    \





577 :デフォルトの名無しさん:02/05/20 15:38
http://www.adwin.com/adwin/products/industry/23_micom_c/note_01.html

578 :デフォルトの名無しさん:02/05/20 17:55
>>562のライブラリは良さげだね。
(つか、教科書に載ってるコードじゃん。)

CSV使いたい人はこれで解決。


579 :デフォルトの名無しさん:02/05/20 18:06
質問してもいい?

580 :デフォルトの名無しさん:02/05/20 18:27
と訊かれると「だめ」としか言えないな。成り行き上。

581 :デフォルトの名無しさん:02/05/20 18:36
LSIC86を使っていたのですが、

typedef struct{
char *h[0];
char *k;
char *v;
}FORM;

というコードを書いてコンパイルできていたのですが、bccではh[0]の行でエラーが出てしまいました。
h[0]とkが常に同じ、h[1]とvが常に同じ、というコードにしたいのですが、
一般的にはどう書いたらいいのでしょうか。


582 :デフォルトの名無しさん:02/05/20 18:44
unionじゃだめなのか?
(実装依存とおもうけど)

583 :579:02/05/20 18:55
>580
そうですか・・・・・
でももうprintf("わかりませんでした");と書いて提出したので
解決しました

584 :デフォルトの名無しさん:02/05/20 18:56
>>581
つーか、char *h[0]って何?

585 :デフォルトの名無しさん:02/05/20 19:22

 ⊂ ヽ ⊂ ヽ ⊂ ヽ ⊂ ヽ ⊂ ヽ
   \\ ∧_∧∧_∧     ∧∧
     \ ( ´_ゝ`) `∀´>・∀・)*゚∀゚)
      >  ⌒ヽ  ⌒ヽ  ⌒ヽ  ⌒ヽ  ⌒ヽ
     /    へ \ へ \ へ \ へ \ へ \
    /    /   \\   \\ \\ \\ \\
    レ  ノ    ノヽ_つノ ヽ_つ ヽ_つ ヽ_つ
   /  /  /  /  /  /  /  /  /  /
  /  /|  /  /| /  /| /  /| /  /|
 (  / | (  / |  |\_|\_|\_|\_|\________
  |  | ヽ |  | ヽ /
  |  |、 \    | ともっち!俺たち準備はOKだよ!
  | / \ ⌒l  |
  | |   ) /  \__________________
 ノ  )   し'
(_/

586 :デフォルトの名無しさん:02/05/20 19:26
うるせーばか

587 :デフォルトの名無しさん:02/05/20 19:27
>>584 長さ0の文字配列のポインタ

char *h[];
にしたら通るんでないかい? どっちにせよ,コンパイラ依存の領域

588 :デフォルトの名無しさん:02/05/20 19:28
            ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д` )< >>586 おまえがばかだ!!
          /,  /    \___________    
         (ぃ9  |
          /    /、
         /   ∧_二つ
         /   /
        /    \

589 :デフォルトの名無しさん:02/05/20 19:46
( ´_ゝ`)フーン

590 :デフォルトの名無しさん:02/05/20 19:49
            ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д` )< ともっち!はやくやらせろ!
          /,  /    \___________    
         (ぃ9  |
          /    /、
         /   ∧_二つ
         /   /
        /    \

591 :デフォルトの名無しさん:02/05/20 19:57

                     ノ ⌒)
         ∧_∧     (__/
         ( ´Д`)    / /  。
       /⌒    ⌒'/ /    。
      /_/|       / /     。
    (ぃ9 ./    / //      。
       /   / /3
      (   / //
       \. \\
         \. \\
          >  ) )
         / //
         / / /
         / / /
       ( ヽ ヽ
        \__つ)

我慢できない、、、、

592 :デフォルトの名無しさん:02/05/20 19:59
AA貼りつけてるやつ、他板でやれ

593 :デフォルトの名無しさん:02/05/20 20:06
AAしろぶたは氏んでね。

594 :これどーすか?:02/05/20 20:40
#include<stdio.h>
void afo(char *y,char *x);
void afoo(char *x,char *y);
main()
{
char a[] = ">>238は";
char b[] = "一度逝け";
char c[13];
afo(c,a);
afoo(c,b);
printf("%s\n",a);
printf("%s\n",b);
printf("%s\n",c);
}
void afo(char *y,char *x)
{
while(*x)
*y++ = *x++;
*y = '\0';
}
void afoo(char *x,char *y)
{
while(*x)
x++;
while(*y)
*x++ = *y++;
*x = '\0';
}

このCのコードと同じことなんてJAVAでやれば11行で終わる。


595 :デフォルトの名無しさん:02/05/20 20:43
>>594
どーもこーもバカ

596 :デフォルトの名無しさん:02/05/20 21:00
11行もかかるのかよ(藁

597 :デフォルトの名無しさん:02/05/20 21:01
そして11倍遅い。

598 :デフォルトの名無しさん:02/05/20 21:12
>>596
Javaの入出力周りは知らないがそれくらいかかりそうな予感
変数宣言*3、printf*3、括弧*2、関数の頭 = 9行
Cの場合さらに#includeが2つで計11行になりますた
もちろん圧縮すれば3行だけど

599 :デフォルトの名無しさん:02/05/20 21:37
>>581
大きさ0の配列はCだと使えない。一部のコンパイラ
だと拡張機能として使える(gccとか)。

>>587
char *h[];
という書き方は、「2つ以上メンバを持つ構造体の
最後のメンバ」としてなら許される。途中では
だめ。

union使って問題なしと思うが。

600 :デフォルトの名無しさん:02/05/20 21:58
おいお前ら、漏れはとりあえずCの入門書を終えました。
そんな漏れに最終試験問題を出題してください。

601 :デフォルトの名無しさん:02/05/20 22:01
>>600
C言語のコンパイラを書きなさい(5点)。

602 :デフォルトの名無しさん:02/05/20 22:03
>>600
入力行の長さに制限のないCSV読み込みルーチンを書きなさい(20点)。

603 :デフォルトの名無しさん:02/05/20 22:06
Cコンパイラを作るよりCSV読み込みを作るほうが4倍むずかしいのか

604 :デフォルトの名無しさん:02/05/20 22:06
こ。。こんぱいらで5点か。。

605 :デフォルトの名無しさん:02/05/20 22:10
>>600
入門書っていわれても。レベルが全然わからん。しかも入門書で最終?恐るべき自惚れ。

606 :デフォルトの名無しさん:02/05/20 22:10
>>600
POSIX互換のOSを(以下略

607 :600:02/05/20 22:10
マジレス。
お前らはCのコンパイラ書けますか?
Cのコンパイラを書けるというのはどの程度のレベルなんですか?

608 :デフォルトの名無しさん:02/05/20 22:14
>>607
マジレス。書ける。
既存のコンパイラより良いコードを出せとか言われると自信がないが。

レベル…遅いコードでも良いならRMSレベルでなくても書けるだろ。
情報系大学院出た人間ならたいてい書けるはず。

609 :デフォルトの名無しさん:02/05/20 22:14
/*ネタデスマソ*/
int main( int argc, char * argv[] )
{
str comLine[MAX_PATH+99];
sprintf( comLine, "c:\\Progrm....\\cl.exe %s", argv[1]);
return system( comLine );
}
/*はい5てん*/

610 :デフォルトの名無しさん:02/05/20 22:15
>>607
C++ならともかく、単にCなら面倒だけどそれほどむずかしくもない。
言語仕様書とターゲットプロセッサの資料などがあれば。

実用に耐えるレベルにするために、コンパイル・リンク速度向上(プリコンパイルヘッダとかインクリメンタル〜とか)、
最適化、ライブラリ整備などまできっちりやるとかなりつらいが・・

C++コンパイラで標準完全実装(loki, boostが完全に動くとか)だとつらそうだー

611 :600:02/05/20 22:17
>>608
ガ━━(゚Д゚;)━━━ン!!!!!
Cのコンパイラが書けてもたいしたことないのか。
プログラミングの道は険しい…
またもマジレス。
入門終えた漏れは次は何をすればいい?

612 :デフォルトの名無しさん:02/05/20 22:17
>>609
ワラタ
ってか、スレ立てた本人はどこへいった

613 :デフォルトの名無しさん:02/05/20 22:19
高専で「コンパイラ」とかいう教科書を使った授業、受けました。低いところを眺めてみると、そういうレベルっつうことで・・・。

614 :600:02/05/20 22:21
>>613
漏れは現役高専生です。
今2年生で
電気情報工学科なのですがプログラミングの授業が
全くないので独学で勉強しますた。

615 :デフォルトの名無しさん:02/05/20 22:21
>>611
初級へと進むんだろな。

書きたいプログラムがあるなら書きなさい。
書いてるうちに「プログラミング作法」とかが
何を言ってるのか分かるようになるんじゃない?

あとは他の言語も覚えると新しい概念が身につく(かも)。
SchemeとJavaは是非やっとくべきだと思う。

616 :デフォルトの名無しさん:02/05/20 22:23
>>611
LISP インタプリタでも作ると面白いカナ。

617 :デフォルトの名無しさん:02/05/20 22:26
俺は最初Unixのコマンド(のサブセット)いろいろ書いて練習したYO!
最初はwc, head, tail
あと、prとかワイルドカード展開するプログラムとかxargsとか。

618 :デフォルトの名無しさん:02/05/20 22:26
CのコンパイラってCの知識だけでつくれるの?
機械語やアセンブラの知識は必要ないの?

619 :デフォルトの名無しさん:02/05/20 22:27
Scheme・・・ずいぶん最近だけど、興味半分にいろいろサイト見て回ってみた。
感想: call-with-current-continuation がプログラムを破壊的に変化させそう。

620 :デフォルトの名無しさん:02/05/20 22:27
>>617
書いた書いた。
正規表現マッチングなんかもおもしろい。

621 :デフォルトの名無しさん:02/05/20 22:28
>>618
機械語は必ずしも不要だろうけど
アセンブラは必須だね。


622 :デフォルトの名無しさん:02/05/20 22:28
>>618
・・・ネイティブコンパイラ作るなら。バイトコードでもいいんでない?

623 :デフォルトの名無しさん:02/05/20 22:31
じゃあ入門卒業試験の課題としてこれはどうだ。

int match(const char *pattern, const char *string);

patternがstringとマッチするなら0で無い値、マッチしないなら0を返す。

pattern中の文字'?'は任意の1文字とマッチする。
'*'は0文字以上の任意の文字列とマッチする。
それ以外の文字は、その文字自身とマッチする。


624 :デフォルトの名無しさん:02/05/20 22:32
トークンきりだし、構文解析、構文チェックまではCで書けるとして、
そのあとにネイティブコードを作るときはやっぱりアセンブラだよね。
Cでもできるのかな。

625 :デフォルトの名無しさん:02/05/20 22:34
>>624
ネイティブコードを生成すること自体はCでも書けるだろ。
知識は必要だろうけど。

626 :デフォルトの名無しさん:02/05/20 22:36
>>623
patternの中に*や?がひとつも含まれていなかったら、strcmp(string,pattern)と等価?それともstrstr(string,pattern)と等価?

627 :デフォルトの名無しさん:02/05/20 22:37
>>624
アセンブリ言語コードを出力すればいいんじゃないの?
そういうコンパイラも多い。

628 :デフォルトの名無しさん:02/05/20 22:37
>>627
gccとか?

629 :デフォルトの名無しさん:02/05/20 22:37
>>626
strcmpと等価ということで。

630 :デフォルトの名無しさん:02/05/20 22:38
>>628
そう。UnixのたいがいのCコンパイラと
8bitのころのPCのたいがいのCコンパイラ。
DOSだとLSI-C86もそうじゃなかったっけ。

631 :デフォルトの名無しさん:02/05/20 22:39
>>629
ちょっとやってみよう。
再帰使うとうまくゆくかな・・・

632 :631:02/05/20 22:41
いや再帰じゃないな・・・

633 :デフォルトの名無しさん:02/05/20 22:44
>>632
出題者は再帰を使う回答を用意しますた。

634 :デフォルトの名無しさん:02/05/20 22:46
>>623
じゃあ補足すると、これぐらいは全部通ればとりあえず合格?
あんまり書くと長くなりすぎるから省略。

assert( match("abc", "abc") != 0 );
assert( match("abc", "abcd") == 0 );

assert( match("?bc", "abc") != 0 );
assert( match("a?c", "abc") != 0 );
assert( match("ab?", "abc") != 0 );
assert( match("ab?", "ab") == 0 );

assert( match("ab*", "abc") != 0 );
assert( match("ab*", "ab") != 0 );
assert( match("a*c", "abbbbbc") != 0 );
assert( match("a*c", "abc") != 0 );
assert( match("a*c", "ac") != 0 );

// 最長一致なら以下のチェック.
assert( match("a*c", "acc") != 0 );
assert( match("a*d*g", "adgabcdefg") != 0 );

635 :デフォルトの名無しさん:02/05/20 22:53
テストドライバその1

#include <stdio.h>

int main(int argc, char **argv)
{
 if (argc != 3) {
  fprintf(stderr, "usage: %s pattern string\n", argv[0]);
  return 1;
 }
 printf("%smatched\n", match(argv[1], argv[2]) ? "" : "un");
 return 0;
}

テストドライバその2
#include <stdio.h>
#include <string.h>

char line[1024];

int main(int argc, char **argv)
{
 if (argc != 2) {
  fprintf(stderr, "usage: %s pattern\n", argv[0]);
  return 1;
 }
 while (fgets(line, sizeof(line), stdin) != NULL) {
  char *eol = strchr(line, '\n');
  if (eol != NULL) {
   *eol = '\0';
  }
  if (match(argv[1], line)) {
   puts(line);
  }
 }
 return 0;
}


636 :デフォルトの名無しさん:02/05/20 22:56
assert並べるほうがいいな。
同じテストを何度でも繰り返せ、実行一発で結果がわかる。

637 :623:02/05/20 22:57
>>634
あ、そうですね。そのテストのほうが良いかも。

ちなみに>>634で用意したテストプログラムは、

その1: patternとstringをコマンドライン引数で与えて
matchedまたはunmatchedをプリントする。

その2: patternをコマンドライン引数で与えて
標準入力から1行ずつ読み込み、マッチする行だけ出力する。

いずれもpatternはちゃんとクオートしないと切ねぇことになる。


638 :617=623:02/05/20 22:59
テストドライバその2の方は、
むか〜しワタスィが書いた超簡易grepモドキそのものです。

639 :600:02/05/20 23:02
サパーリ出来ません。
逝ってきます…

640 :631:02/05/20 23:03
末尾に*がくると失敗するなぁ・・・・
やりなおそう。

641 :631:02/05/20 23:03
あ、ちなみに私はあの入門書を読み終えたばかりの人じゃないです。

642 :634:02/05/20 23:04
>>634
いかん、このassertだと * があったら無条件で1返せば通ってしまう(笑)
ので追加。
assert( match("a*c", "ab") == 0 );

あと複合系(もっと要る気が)
assert( match("a**?*", "ab") != 0 );
assert( match("a**?*", "a") == 0 );

643 :631:02/05/20 23:05
と思ったけどできた。

644 :デフォルトの名無しさん:02/05/20 23:15
あるモジュールAが別のモジュールBをよんで、さらにモジュールB
が別のモジュールCを呼んで...という具合にモジュールAを頂点とし
て呼ばれているモジュールすべてを洗い出すにはどうやって調べて
いけばよいのでしょうか?モジュールA、B、Cなどすべてのモジュ
ールのソースはあります。どなたか効率よく調べる方法がありましたら、
教えてくださいませんか。

645 :631:02/05/20 23:18
末尾が?で終わるときに失敗するんですが、いいですか?
だめですよね?(^_^;)

646 :仕様書無しさん:02/05/20 23:19
M-.

647 :デフォルトの名無しさん:02/05/20 23:19
>>644
このへんはどう? http://ctool.sourceforge.net/
他にもいろいろあるはず。

648 :デフォルトの名無しさん:02/05/20 23:19
>>644
クロスリファレンスや呼び出しツリーを作ってくれるツールを使えば?

649 :デフォルトの名無しさん:02/05/20 23:21
644
もれはソースブラウザ(M$)でしらみつぶしかな。

650 :623:02/05/20 23:25
あんまり引っ張っても何なので…
出題者が用意した回答です。
あんまり叩かないで(w

int match(const char *pattern, const char *string)
{
 while (*pattern) {
  switch (*pattern) {
  case '?':
   if (! *string) {
    return 0;
   }
   pattern++;
   string++;
   break;
  case '*':
   pattern++;
   do {
    if (match(pattern, string)) {
     return 1;
    }
   } while (*string++);
   return 0;
  default:
   if (*pattern++ != *string++) {
    return 0;
   }
  }
 }
 return ! *string;
}


651 :631:02/05/20 23:29
ギブアップ 末尾に?があると失敗します。

int match(const char *pattern,const char *str)
{
for(;*str||*pattern;str++,pattern++){
if(*pattern=='?'){
str++,pattern++;
continue;
}
if(*pattern=='*'){
while(*pattern=='?'||*pattern=='*')
pattern++;
if(*pattern=='\0'){
return 1;
}
while(*str!=*pattern){
str++;
}
}
if(*str!=*pattern)
return 0;
}

return 1;
}


652 :651:02/05/20 23:39
Visual C++の方に持っていって、デバッガにかけてみよう。
でないとどこが間違っているのかわからない(T_T)

653 : :02/05/20 23:42
ついでに正規表現版まで作ってくれ!!

654 :デフォルトの名無しさん:02/05/20 23:54
>>653
どの正規表現?
.と*だけで良いなら何とか…

(正規表現の文法自体は正規文法でないという罠)

655 :644:02/05/20 23:55
>>647,648,649
ありがとうございます。ckrefを使用してみます。

656 :651:02/05/20 23:55
for(;*str||*pattern;str++,pattern++){
の部分を
for(;;str++,pattern++){
if(*str||*pattern){
break;
}
に変えたら成功した・・・・
もしかしたらforについて勘違いしている部分があるかも(汗

657 : :02/05/20 23:56
とりあえずperlでつかえるくらい。。ナンチッテ

グループとかは無理ですか?

658 :651:02/05/20 23:57
あ!!
もしかしたらcontinueした時はforの条件式が評価されないんですか?

659 :デフォルトの名無しさん:02/05/21 00:00
>>657
Perlの正規表現だと、それこそちょっとしたコンパイラ書くくらいの
手間がかかると思われ。

グループって[a-z]みたいなやつ?
暇潰しの課題にはちょっと面倒すぎるなあ。

660 :651:02/05/21 00:06
やっと出来ました・・・・
forについての間違った認識を正すことが出来てよかったです。
ありがとうございました。

int match(const char *pattern,const char *str)
{
for(;*str||*pattern;str++,pattern++){
if(*pattern=='?')
goto loopend;
if(*pattern=='*'){
while(*pattern=='?'||*pattern=='*')
pattern++;
if(*pattern=='\0')
return 1;
while(*str!=*pattern)
str++;
}
if(*str!=*pattern)
return 0;
loopend: ;
}

return 1;
}


661 : :02/05/21 00:06
orとかは?

U(MA|FO)

みたいに

662 :デフォルトの名無しさん:02/05/21 00:07
>>656
for(;*str||*pattern;str++,pattern++){
は条件式が真ならループは続いて、
for(;;str++,pattern++){
if(*str||*pattern){
break;
}
はifの条件式が真ならループを抜ける。
前者と後者じゃまったく逆の処理じゃないの?

663 :デフォルトの名無しさん:02/05/21 00:08
>>662
すみません。
if!(*str||*pattern)) break;の間違いです。

664 :663:02/05/21 00:09
じゃなくて、
if(!(*str||*pattern)) break;

665 :デフォルトの名無しさん:02/05/21 00:35
あのなぁ。
if (*str) って書くなら、素直に if (*str != '\0') って書け。
省略すればいいって訳じゃないぜ。
if (isalpha(XXX)) とか、if (found) はこう書くべきだがな。

666 :デフォルトの名無しさん:02/05/21 00:36
>>665
同意

667 :デフォルトの名無しさん:02/05/21 00:37
strtokを書いたことがある方に聞きます
staticな局所変数を使いました?

668 :デフォルトの名無しさん:02/05/21 00:38
>>660
>goto loopend;
continue;じゃいかんの?

Cの文法に躍らされてる気がする。
そんなにまちがえるなら素直に状態遷移書けばいいのに

669 :デフォルトの名無しさん:02/05/21 00:39
>>667
聞く前に質問の仕方をもっと勉強しろ

670 :デフォルトの名無しさん:02/05/21 00:40

可変長バッファサイズを持ったFIFOを実装したいんだけど、何か良い例ないですかね?
staticなサイズで組むと格納するデータサイズが小さいものの場合、かなりメモリーが
無駄になっちまうので。 どう実装しようかずっと悩んでるんだけど(w


671 :デフォルトの名無しさん:02/05/21 00:40
>>665
そうだそうだ!
ちゃんと if ((*str != 0) != 0) と書け!
いや、もっとちゃんと if (((*str != 0) != 0) != 0) と書け!!!!

672 :デフォルトの名無しさん:02/05/21 00:41
>>670
8バイト単位とかでリストでも作ったら?

673 :デフォルトの名無しさん:02/05/21 00:42
>>670
双方向リストとか。

674 :デフォルトの名無しさん:02/05/21 00:44
>>667
局所かどうかはともかくstaticな変数は使うな。

675 :デフォルトの名無しさん:02/05/21 00:44
>>673
FIFOなら片方向でいいんじゃない?
メモリーサイズ気にしてるのに。
まあ個人の勝手だけどさ!

676 :674:02/05/21 00:45
「使うんじゃない」という意味でなく
「使うよね」ってこと(汗

677 :デフォルトの名無しさん:02/05/21 00:46
>>672
この場合、8バイト単位のリストにまたがってしまうデータ長の場合、
どう管理するんでしょうか? 管理はなるべく単純にしたいんだけど。

>>673
むむむ、おもしろそうだけど、どう利用するのか良くわからん(w


678 :デフォルトの名無しさん:02/05/21 00:48
↑670


>>673
片方向リストは既に固定長サイズでやってみてできています。
問題はリスト構造というよりもどうやって可変長サイズを実装
するかなのですが。


679 :673:02/05/21 00:49
>>675
そうか。いつも双方向で書いてたよ(欝
片方向だと先頭と末尾へのポインタを持つのかな?
空の時どうなるの?

680 :デフォルトの名無しさん:02/05/21 00:49
>>668
上の方を見て。

681 :デフォルトの名無しさん:02/05/21 00:49
>>678
Addの出来ないリストなんて!

・・・って言うかそれはリストなのか?


682 :デフォルトの名無しさん:02/05/21 00:49
>>677
C++のdequeの構造はどう?
適当な大きさのブロックをリンクリストで繋ぐ。
先頭のブロックが空になったら開放。末尾が満杯になったら次のブロックを確保してリンク。

ついでに一個開放したた余剰ブロックはプールしてつぎの確保に使い回すとか

683 : :02/05/21 00:50
FIFOってなんですか?

684 :デフォルトの名無しさん:02/05/21 00:51
>>683
キューみたいに先入れ先出しのこと。

685 :デフォルトの名無しさん:02/05/21 00:51
>>681
ん? FIFOだからそれでいいんだろ? 何番目にAddするなんて意識しなくていいんだから

686 :デフォルトの名無しさん:02/05/21 00:52
>>685
何番目にAddする=インサート

687 : :02/05/21 00:52
漏れ可変長のキューライブラリなら作成したことあるよ
遠い昔だけど。

688 :デフォルトの名無しさん:02/05/21 00:54
FIFO: First In First Out
トコロテン


689 :デフォルトの名無しさん:02/05/21 00:54
>>673
可変長サイズの意味がわからん。
レコードが可変長という意味?
Tlink *link = malloc(sizeof(LINK) + 必要なデータサイズ );
link->next = next;
memcpy((void*)(link + 1),データ,データサイズ);


690 :689:02/05/21 00:56
切れた。
>というのはたまに使うけど。
と続く予定だった。

691 :687:02/05/21 00:56
そん時は双方向リスト使ってやってますた。
だって管理が楽なんだもん

692 :デフォルトの名無しさん:02/05/21 00:55
>>678
片方向でも普通は可変長だろ


693 :デフォルトの名無しさん:02/05/21 00:56
普通は双方向にする。
よほどメモリーが惜しくなければ。

694 :デフォルトの名無しさん:02/05/21 00:57
>>678
普通片方向でも可変長でしょう。
staticにバッファとらずにmalloc使えって


695 :デフォルトの名無しさん:02/05/21 00:58
>>693
普通って、どこの普通?

696 :デフォルトの名無しさん:02/05/21 00:58
>>695
京浜急行の普通(列車)

697 :694:02/05/21 00:59
かぶりまくってる。鬱だ


698 :デフォルトの名無しさん:02/05/21 00:59
単方向リストを使うメリットって何?

699 :デフォルトの名無しさん:02/05/21 01:00
>>698
あたま悪いんだ!

700 :デフォルトの名無しさん:02/05/21 01:00
670
>>682
なるほどそのつど malloc() して繋げたり、入らなくなったら消したりするわけですね

>>689
>レコードが可変長という意味?
ええそうです。
なるほどやはり、動的に取ったメモリーセルをリストとして消したり貼ったりというのが
一般的なやりかたのようですね。

>>691
双方向リストで管理が楽になるというのは不用なものを消したり付け足したりする
時の場所を探すのが楽になるという事でしょうか?

701 :デフォルトの名無しさん:02/05/21 01:01
struct elem {
 char *data; /* 可変長のデータへのポインタ */
 struct elem *next;
};

typedef struct {
 struct elem *head;
 struct elem *tail;
} queue;

int queue_init(queue *q)
{
 struct elem *dummy_head = malloc(sizeof(struct elem));
 if (dummy_head == NULL) {
  return -1;
 }
 dummy_head->next = NULL;
 q->head = q->tail = dummy_head;

 return 0;
}

int is_empty(queue *q)
{
 return q->head == q->tail;
}

int enq(queue *q, char *item)
{
 struct elem *new_elem = malloc(sizeof(struct elem));
 if (new_elem == NULL) {
  return -1;
 }
 new_elem->data = item;
 new_elem->next = NULL;
 
 q->tail->next = new_elem;
 q->tail = new_elem;

 return 0;
}

char *deq(queue *q)
{
 struct elem *first;
 char *value;

 if (is_empty(q)) {
  return NULL;
 }
 first = q->head->next;
 value = first->data;
 q->head->next = first->next;
 free(first);

 return value;
}


702 :デフォルトの名無しさん:02/05/21 01:01
>698
双方向にしてもメリットがない時の資源の節約

703 :デフォルトの名無しさん:02/05/21 01:01
>>702
やっぱりそれだけ?

704 :701:02/05/21 01:03
実際にはいちいちmalloc, freeせずに
struct elemをまとめて取ったほうが速い。

705 :デフォルトの名無しさん:02/05/21 01:04
670
>>701
具体例をありがとうございます。非常に良くわかりました。(w


706 :デフォルトの名無しさん:02/05/21 01:04
むりやりこじつけると
割り込まれると困るクリチカルな時間が短くなる


707 :デフォルトの名無しさん:02/05/21 01:05
>>705
その語尾は気に入らないな。

708 :デフォルトの名無しさん:02/05/21 01:05
>>703
そんなにもある

709 :デフォルトの名無しさん:02/05/21 01:06
>>701
ポインタの参照より加算のが速いんで、
使い方によっては>>689に一票。

710 :701:02/05/21 01:12
>>709
701のコードだとstruct elemが他のモジュールには見えないが、
リストに続けてデータ本体を書くと、同時にmalloc, freeしなきゃ
ならんよね。

まあ、その方が良い事もあるだろうが。

711 :デフォルトの名無しさん:02/05/21 01:13
struct elem {
 char *data; /* 可変長のデータへのポインタ */
 struct elem *prev;
 struct elem *next;
};

typedef struct elem queue;

void queue_init(queue *q)
{
 q->prev = q->next = q;
}

int is_empty(queue *q)
{
 return q->next == q;
}

int enq(queue *q, char *item)
{
 struct elem *new_elem = malloc(sizeof(struct elem));
 if (new_elem == NULL) {
  return -1;
 }
 new_elem->data = item;
 new_elem->next = q;
 new_elem->prev = q->prev;
 q->prev->next = new_elem;
 q->prev = new_elem;

 return 0;
}

char *deq(queue *q)
{
 struct elem *first;
 char *value;

 if (is_empty(q)) {
  return NULL;
 }
 first = q->next;
 value = first->data;
 q->next = first->next;
 first->next->prev = q;
 free(first);

 return value;
}

…つか、普通はinsertとdeleteを作って、それを使って
enqとdeqを書くんだと思うけどね。

712 :デフォルトの名無しさん:02/05/21 01:18
ところでやっぱり可変長のキュー管理って、データの出し入れする度に、
mallocしたりfreeしたり、するしかないの? データの出し入れが激しい処理の場合
やばくない?


713 :デフォルトの名無しさん:02/05/21 01:21
>>709
持ちまわるデータのサイズが不変とかいう条件なら、
手間がいくらか減るんでいいかもね。

714 :デフォルトの名無しさん:02/05/21 01:22
>>712
出し入れにリンク自体はfreeする必要無いんじゃない?
freeは完全に使い終わった後だけにして、
空のリンクとしてリサイクルすればかなり速くなるよ。

715 :714:02/05/21 01:24
つーかなるべくmalloc/freeは呼ばずにいた方がいいよ。
ページ/ブロック単位でメモリ確保するとか。

716 :デフォルトの名無しさん:02/05/21 01:41
struct elem *free_list;

void queue_pool_init()
{
 int i;
 struct elem *block = calloc(sizeof(struct elem), N);

 if (block == NULL) {
  abort(); /* いやホントは何か言うんだろうけど */
 }

 for (i = 0; i < N - 1; i++) {
  block[i].next = block[i + 1];
 }
 block[N].next = NULL;
 free_list = block;
}

struct elem *queue_malloc()
{
 struct elem *v;

 if (free_list == NULL) {
  queue_pool_init();
 }
 v = free_list;
 free_list = free_list->next;

 return v;
}

void queue_free(struct elem *v)
{
 v->next = free_list;
 free_list = v;
}


717 :デフォルトの名無しさん:02/05/21 01:48
>>716
もしかしてリアルタイムで作ってるの?
体力あるなー。

718 :どうでもいい回想(その3):02/05/21 01:52
板違い・スレ違いですいません。

今年の四月、あるミッションを申し渡されました。
開発済み製品のコードに関するサポートです。
その製品に問題が発生した時の解析・修正が主要業務となります。

そのコードを見ていた何日日目に、脳天を突き抜けるかのような衝撃が・・・って、言い過ぎですね。
マルチタスキング環境においては、動的確保したバッファをタスク間メッセージバッファに使うのが定番ですが・・・
何と、そのコードは、auto変数の領域を堂々とメッセージバッファに使っていたのでした。
普通、こんな真似をすれば、プログラムは「即死」です。
恐る恐る調べてみると、うまい具合に「死なない」ように作られていました。
(おそらく、動作テストに適合するためだけに手を入れた結果と思われます。)
前任者へ話を聞くと、「母体をそのまま持ってきたはず」という回答が・・・
(ちなみに、その『前任者』は『作者』ではありません。)
件の「製品」は、全国津々浦々で今もバリバリ動いていますが、
その「母体」もまた、全国でバリバリ動いています。
(続いていいですか?)

719 :デフォルトの名無しさん:02/05/21 01:54
>うまい具合に「死なない」ように作られていました
ならいいじゃん。
終了。

720 :デフォルトの名無しさん:02/05/21 01:58
C 言語そのものの話題と言うよりは開発環境の話になってしまうのですが、
ANSI C のインタープリタなんて無いでしょうか?
外部ライブラリを簡単に呼び出せて後でコンパイルも可能みたいな開発環境
があったら凄く重宝すると思うのですが。

721 :デフォルトの名無しさん:02/05/21 01:59
>>718
>普通、こんな真似をすれば、プログラムは「即死」です。
そう思ってるのは君だけかもな。

722 :デフォルトの名無しさん:02/05/21 01:59
>>718
staticなら困るけどautoならthread-safeじゃねーの?
autoだって「動的に確保」することには違いないし。

まあ、まだ必要な間に解放されちゃったら困るけどさ。

723 :デフォルトの名無しさん:02/05/21 02:00
>>718
> ・・・・メッセージバッファに使うのが定番ですが・・・

定番にこだわるのはよくない。

724 :デフォルトの名無しさん:02/05/21 02:01
>>720
製品、フリーソフト、
腐るほど(ってほどないかもしれないけど)あるよ。
メンテされずに腐ってるかもしれないが。

725 :デフォルトの名無しさん:02/05/21 02:01
>>720
コンパイラでも要求は満たしてる気がするが。

726 :どうでもいい回想(その3・その2):02/05/21 02:04
(716の続きです。)
こんな腐ったコード、即刻この世から消し去るのが正しい選択でしょうが、
「製品コード」という理由で、半ば力尽きる結果となりました。
「製品」である以上、「実動作不良」や「クレーム」がない以上、手を入れる事は許されません。

さて、そうしているうちに、今月始め、そのミッションには形のみ所属する事となりました。
その「製品」の開発元の業績不振の影響が響いてきたためです。
(無論、昨今の不況の影響もあります。)
最悪、その製品に関しては、サポート体制自体が崩壊する事も有り得るでしょう。

・・・と、書かせていただきました。
これまでの書き込みを拝見するに、皆様の能力は、私に10倍します。
世の中から腐ったコードがなくなるよう、努力して下さい。
ポインタ表現で「&が抜けてる」レベルなら、それこそコンパイル時に気付く問題です。
もっと大きなレベルで、その力を役立てて下さい。

・・・という事で、時々勉強に覗きに参ります。
長文失礼しました。

727 :デフォルトの名無しさん:02/05/21 02:05
>>726を晒しあげ

728 :デフォルトの名無しさん:02/05/21 02:06
>>726
それだけの記述じゃ腐ってるのはコードか君の頭か
判断がつかん。

729 :デフォルトの名無しさん:02/05/21 02:07
実は>>718 >>726
がドキュンという結論ですな。
帰ってよし。

730 :720:02/05/21 02:08
と思ったら CINT という C, C++ のインタープリタがありました。
gtk+ などの外部ライブラリを呼び出せるかは不明ですがちょっと漁ってみます。

http://pcroot.cern.ch/root/Cint.html

731 :デフォルトの名無しさん:02/05/21 02:10
struct elem {
 char *data; /* 可変長のデータへのポインタ */
 struct elem *prev;
 struct elem *next;
};
って、
struct elem {
 struct elem *prev;
 struct elem *next;
 char data[1];
};
とかにしない?

732 :デフォルトの名無しさん:02/05/21 02:12
>>730
cernってあのCERNか?

733 :デフォルトの名無しさん:02/05/21 02:12
>>731
がいしゅつ。

>>689
>>709-710
>>713

あと、C99だと
struct elem {
 struct elem *prev;
 struct elem *next;
 char data[];
};
と書ける。

734 :デフォルトの名無しさん:02/05/21 02:13
しない。


735 :デフォルトの名無しさん:02/05/21 02:13
>>733
C99はまだ時期尚早。

736 :デフォルトの名無しさん:02/05/21 02:14
マジな話、今どきC99使ってないやつっているの?

737 :デフォルトの名無しさん:02/05/21 02:15
>>736
いくらでもいる。

738 :デフォルトの名無しさん:02/05/21 02:16
VC++6.0って98年に出たんだからC99未対応だよな?

739 :デフォルトの名無しさん:02/05/21 02:16
>>736
いるだろうけど、今から書くなら自動的にC99になるだろうね。
Unix系はとっくに、Winでもそろそろ処理系はC99準拠になったし。

過去のソフトのメンテならC99は使えないところも多いだろう。

740 :デフォルトの名無しさん:02/05/21 02:17
C99なんて意味ない。
出るのが遅すぎた。
>>739
妄想はそれぐらいにしとけ

741 :デフォルトの名無しさん:02/05/21 02:17
C99使えないってことは、いまどきallocaとか書くわけですか?
欝だ…

742 :デフォルトの名無しさん:02/05/21 02:18
毎日C99しか使ってませんが何か?

743 :デフォルトの名無しさん:02/05/21 02:18
>>741
いやだったら他の言語を使えよ。

744 :デフォルトの名無しさん:02/05/21 02:19
もうC99の話はやめよう。

745 :デフォルトの名無しさん:02/05/21 02:19
allocaなんか使ってる奴は居ない

746 :739:02/05/21 02:19
>>740
どのへんが妄想なの?
ひょっとして未だにM$はC99対応してくれないとか?

747 :720:02/05/21 02:20
>>732
以下、引用・・・ だそうです。ソースコードも公開されているらしいので、
Zaurus/Linux に移植したら面白いかもしれません(バイナリは 1.2MB)。

CINT は CERN で開発されている ROOT というデータ解析システムのマクロ
言語として開発されたものです。 したがって,ISO/IEC C++ 完全互換を目指した
ものではなく, むしろ ANSI C をほぼ含む C++ のかなり大きなサブセットと解す
べきものです。

http://www.matsusaka-u.ac.jp/~okumura/c/

たとえばWWWの開発で有名なCERN(欧州原子核共同研究機関)での標準
言語に選ばれています.

http://www.cqpub.co.jp/hanbai/books/30851.HTM

748 :デフォルトの名無しさん:02/05/21 02:20
>>740
遅すぎたってどういう意味?

いずれみんな切り替わるでしょ?
教科書も処理系も新規格対応になるんだから。

749 :デフォルトの名無しさん:02/05/21 02:20
VC.NETもC99未対応でしょ?

750 :デフォルトの名無しさん:02/05/21 02:21
C99ができた時点で以前の規格はobsoleteだろ。
C99に対応してない処理系はANSI/ISO準拠と言えない。

751 :デフォルトの名無しさん:02/05/21 02:22
C99対応に向かってるのってgccとcode-worriorだけでしょ

752 :デフォルトの名無しさん:02/05/21 02:22
まあまあ。
ANSIが出来たときも嫌がってた奴はいたけど、今はもういない。
時間の問題と思われ。

753 :デフォルトの名無しさん:02/05/21 02:23
リッチーもC99の方向性には否定的だったんじゃないの?

754 :デフォルトの名無しさん:02/05/21 02:23
>>751
Unixからスーパーコンまで、ベンダー製コンパイラはとっくにC99だよ。

755 :726:02/05/21 02:23
おお、たくさんレスが・・・
そういえば言い忘れていたので一応申し上げます。
UNIXでのmsgsnd(でしたっけ?msgsnd??)とは異なり、件の環境で使われていたXXX_sndmsgは、
メッセージのコピーは作成せず、そのままバッファが渡されます。

よって、auto変数をメッセージバッファに使う場合、
「メッセージバッファは(内部ルール上)構造体イメージ」→「そのタスクのスタック領域がメッセージとなる可能性極めて高し」→
「他のタスクから、そのタスクのスタックに対する読み書きが可能」
という罠が待っていたのでした。

756 :デフォルトの名無しさん:02/05/21 02:23
C99なんて特に便利な機能は追加されていないでしょ。
無視無視。

757 :デフォルトの名無しさん:02/05/21 02:24
>>754
クソコンパイラはそういうところで点数稼がないとな

758 :デフォルトの名無しさん:02/05/21 02:24
>>754
_Boolとか_Comprexとか使えんの?
マジで?
標準pragmaも全部対応してる?
そんな話聞いたこと無いぞ

759 :デフォルトの名無しさん:02/05/21 02:24
要するにMS以外は全部もうC99なんだろ?
あとはMSがその気になれば、それで世の中ぜんぶC99になるんじゃねえの?

760 :デフォルトの名無しさん:02/05/21 02:24
>>726が浮いてるな(w

761 :デフォルトの名無しさん:02/05/21 02:25
http://seclan.dll.jp/c99d/c99d01.htm
ずいぶん便利になったものだと思うが。

762 :デフォルトの名無しさん:02/05/21 02:26
gccは準拠してないし、bcc5.6も準拠してないんだが。
Intel C++もvectorC++もまだだな。
当然、open watcomも。DMCはしらん

763 :デフォルトの名無しさん:02/05/21 02:26
Borlandはどうよ?
C++Builder6ってC99対応してる?
アップグレードしてないのでわからんが、カタログ見る限り言及がないから対応してないような・・

764 :デフォルトの名無しさん:02/05/21 02:27
つーかVC++やBCCはCなんてどうでもいいんでしょ。
C++がメインでCはおまけ。

765 :デフォルトの名無しさん:02/05/21 02:27
_Complexも_Boolも#pragmaも、今売ってるコンパイラならたいてい
サポートしてるよ。MS以外。

766 :デフォルトの名無しさん:02/05/21 02:29
>>765
IntelとBorlandはどうなんだ?

767 :デフォルトの名無しさん:02/05/21 02:29
つまりあれだ。
PCではC99のベンリな機能が使えないので羨ましいと。
みんなして「あのブドウはすっぱい」と(w

768 :デフォルトの名無しさん:02/05/21 02:29
>>765
具体的にC99に準拠してるっていうコンパイラあげてみろよ
「MS以外」はいいから

769 :デフォルトの名無しさん:02/05/21 02:31
>>767
「PCでは」じゃなくて「Winでは」と言え。

gcc3.xには_Boolも_Complexもpragmaもあるよ。
_Complexは2.xからあるけど。

770 :デフォルトの名無しさん:02/05/21 02:32
内部定義できない時点でC99はクソ

771 :デフォルトの名無しさん:02/05/21 02:32
大抵対応してるんだから、Windows環境も含むすべてのコンパイラで
5割以上はサポートしてないとおかしいよな。
CW Comeau Kaiとかの標準対応だけがウリのコンパイラ上げてもしゃーない。
実用になるモノじゃないとな

772 :デフォルトの名無しさん:02/05/21 02:33
>>768
C99になると何が困るの?

今までのプログラムが動かなくなるわけじゃないんだから
別にいいんでは?

773 :デフォルトの名無しさん:02/05/21 02:33
Modern C++ Designに出てた Comeau って
http://www.comeaucomputing.com/
対応してる感じ?
Dinkumと組んでるのかー

774 :デフォルトの名無しさん:02/05/21 02:33
>>769
gccって標準C99準拠してないんだがどーよ?
準拠に向かっているだけなんだが。

pragma ≒ 標準pragma

775 :747:02/05/21 02:33
俺も浮いてるっぽい。悲しひ。

776 :デフォルトの名無しさん:02/05/21 02:34
C99は、まあ、別にどうでも良いが機能が減るわけじゃないんで使えるよ
うになったら使うだろうな。

777 :デフォルトの名無しさん:02/05/21 02:37
C99、出されてもそれほどメリットは無いんだよね。
中途半端に仕様が複雑化するだけ。

778 :デフォルトの名無しさん:02/05/21 02:38
>>777
は・げ・ど・う

今までうまく使えたんだからC99なんて使わなくてよい。

779 :デフォルトの名無しさん :02/05/21 02:40
でも、さすがに今時トラディショナルCで書いてるヤシはいないよな。


780 :デフォルトの名無しさん:02/05/21 02:40
結局製品名が挙がってこないな

781 :デフォルトの名無しさん:02/05/21 02:41
ungetc って、どんな時に使うと便利なの?
ない頭をフル回転させて考えてみたけど
どう考えても使い道が分からないんですよね
てな訳で、こんな時には便利だぞ〜って
使い方を知ってる人は教えて下さい

782 :デフォルトの名無しさん:02/05/21 02:41
>>780
>>773

783 :デフォルトの名無しさん:02/05/21 02:42
>>781
stdinから読んでみた。
やべー・・・読まなきゃよかった。
もどしとこ・・・(-_-)

784 :デフォルトの名無しさん:02/05/21 02:42
>>777
そうだね。
無くても困らないんだよね。C->C++みたいなシフトならともかく。
gccの独自拡張と同レベル。
末尾再帰展開でもしてくれるんなら、おおっ!とか思ったけど。

785 :デフォルトの名無しさん:02/05/21 02:43
>>783
ワラタ

786 :783:02/05/21 02:43
例えば、','まで読みたいとすると、','を読まなければならないでしょ?
それを戻したいとき。

787 :デフォルトの名無しさん:02/05/21 02:43
>>781
たとえば数字だけを読むルーチンで
読んだ結果が数字じゃなかったらungetcしてリターン

788 :デフォルトの名無しさん:02/05/21 02:45
よく変数でhogeってありますよね?
その、hogeの意味はなんですか?

789 :デフォルトの名無しさん:02/05/21 02:46
>>788
論争になるよ。
bar,baz,fooも。

790 :デフォルトの名無しさん:02/05/21 02:46
>>788
名前に意味がないときに付ける名前

791 :デフォルトの名無しさん:02/05/21 02:47
>>782
結局一つだけ?

792 :789:02/05/21 02:47
あ、意味か。由来じゃなくて。
>>790の通りだね。

793 :デフォルトの名無しさん:02/05/21 02:48
Comeauってなんて読むの?
カミーユ?

794 :デフォルトの名無しさん:02/05/21 02:48
コーマン

795 :781:02/05/21 02:49
お〜
787は確かに、あった方が便利ですねって
良く考えると、結局783と同じなのかな…

796 :デフォルトの名無しさん:02/05/21 02:49
>>793
こもー

797 :デフォルトの名無しさん:02/05/21 02:50
今まで知らなかったがマニュアル見てみると、
漏れが使ってるSun Workshop 6のCコンパイラは
ISO/IEC 9899:1999準拠と明記してあった。



798 :デフォルトの名無しさん:02/05/21 02:54
>>796
コミューじゃないの? って自信ないけど

799 :デフォルトの名無しさん:02/05/21 02:55
>>798
しらん。
シャトーと同じように読んでみただけ。

800 :デフォルトの名無しさん:02/05/21 02:56
ungetcに2文字戻したい場合は、どうしますか?

801 :米山:02/05/21 02:56
800GET

余裕でした。

802 :デフォルトの名無しさん:02/05/21 02:56
>>800
二回使う。

803 :デフォルトの名無しさん:02/05/21 02:56
>>802
駄目じゃん?

804 :デフォルトの名無しさん:02/05/21 02:57
>>803
そうなの?

805 :デフォルトの名無しさん:02/05/21 02:58
>>804
知らん。
でもおれは1文字だけ戻すようにしてる。
なんでだろ?

806 :デフォルトの名無しさん:02/05/21 03:00
あ、本当だ。
プログラミング言語Cに保証されるのは1文字だけだと書かれている。

807 :デフォルトの名無しさん:02/05/21 03:00
>>805
理由があった筈なのに?

808 :デフォルトの名無しさん:02/05/21 03:00
>>801って何?

809 :デフォルトの名無しさん:02/05/21 03:01
うわ、もう3時だ。
ねなきゃ。

810 :デフォルトの名無しさん:02/05/21 03:01
>>808
やおい

やまなし
おちなし
いみなし

811 :デフォルトの名無しさん:02/05/21 03:01
>>808 シッ見てはいけません!

812 :デフォルトの名無しさん:02/05/21 03:03
>>810
全国的にやっぱそう?
友達から同じ様に聞いた。

813 :デフォルトの名無しさん:02/05/21 03:03
>>812
そうだよ。

814 :デフォルトの名無しさん:02/05/21 03:04
雑談スレと化してますな。
深夜だから成せる技ですな。

815 :デフォルトの名無しさん:02/05/21 03:05
で、ungetcに2文字入れたい様なケースはどうなの?

816 :デフォルトの名無しさん:02/05/21 03:06
つーか、お前らもう少しスレを長持ち汁!

817 :デフォルトの名無しさん:02/05/21 03:07
>>815
fseek(fp,-2L,SEEK_CUR);

818 :デフォルトの名無しさん:02/05/21 03:08
>>815
ungetcを使わなくても良い関数にする

819 :デフォルトの名無しさん:02/05/21 03:09
>>817
それstdinだと無理っぽいね。
あとテキストモードでも微妙。
あ、ケチつけてるわけじゃないよ?ほんとに。

820 :デフォルトの名無しさん:02/05/21 03:10
>>819
分かっている。
俺だってstdinにfseekなんて使いたくねー(ワラ

821 :デフォルトの名無しさん:02/05/21 03:10
>>819
ネタでしょ

822 :821:02/05/21 03:11
>>821
ネタではないけどね。
ungetcはstdin以外にも使えるから。

823 :デフォルトの名無しさん:02/05/21 03:11
getc/ungetcにラッパーを被せる。
らっぱじゃないよ。
好きなだけgetc/ungetc呼べるようにできるよ。

824 :822:02/05/21 03:12
名前間違った。

825 :デフォルトの名無しさん:02/05/21 03:16
>>823
の解決方法がまともかな。
freadやらは別途対応しないと使えなくなるが。

826 :デフォルトの名無しさん:02/05/21 03:21
やった事ないから分からんけど
fgetposとfsetposで、無理やり戻せないかな…

827 :デフォルトの名無しさん:02/05/21 03:24
FILE型をラップしたFILEEX型を作る。
typedef struct {
 FILE *fp;
 char ungetbuf[好きなだけ];
} FILEEX;
/*インタフェース*/
FILEEX*fex_open(const char *filename, const char *mode);
void fex_close(FILEEX*);
int fex_getc(FILEEX*);
int fex_ungetc(FILEEX*,int);
/*
お好みで
long fex_read(FILEEX*,const void *,long);
long fex_write(FILEEX*,void *,long);
*/

828 :デフォルトの名無しさん:02/05/21 03:26
あ、バッファの現在位置を忘れてた
typedef struct {
 FILE *fp;
 char ungetbuf[好きなだけ];
 size_t pos;/*常にスタックトップを指す*/
} FILEEX;


829 :デフォルトの名無しさん:02/05/21 03:29
実装をちょびっと
int fex_ungetc(FILEEX *fexp,int c) {
 return fexp->ungetbuf[fexp->pos++] = c;
}
int fex_getc(FILEEX *fexp) {
 return (fexp->pos)?fexp->ungetbuf[--fexp->pos] : fgetc(fexp->fp);
}


830 :デフォルトの名無しさん:02/05/21 03:51
バッファあふれそうなのがちょっとやな感じ。
かといってリストにしたら遅そうだが。

831 :デフォルトの名無しさん:02/05/21 03:57
変数名をファイルに吐き出すことは可能でしょうか?

int abcd_1,abcd_2,abcd_3,abcd_4,abcd_5;

とあったとき、
void print_function_name(int *hoge);
という関数に変数のポインタを渡して、この関数の中で、
変数の名前、abcd_3、という「文字列」を印字したいのですが。

対応表の文字列リストを作っておく、という方法しかないでしょうか?

832 :デフォルトの名無しさん:02/05/21 04:07
>>831
ポータブルにはそれしかないだろうな。

システムに依存してよくて、externな変数だけでいいんなら、
バイナリからアドレスと名前の対応を抜き出す方法がたいがい
ありそうだが。

833 :デフォルトの名無しさん:02/05/21 04:09
変数のアドレスと変数名と両方渡せば?
print_function_name(&abcd_1, #abcd_1);
みたいに。

(ナンデfunction_nameナノニヘンスウ名ヲプリントスルンダロ)

834 :デフォルトの名無しさん:02/05/21 04:17
>>832-833
ありがとうございます。
グローバル変数なのですが、システム依存するのは危険なので
対応リストを作ってみます。
>#abcd_1
こんな書き方C言語でできましたっけ?
ともあれ、関数名、変数と関数を間違いました・・・突っ込みサンクス

835 :トレドミンMAX:02/05/21 04:37
>>834
#〜はプリプロセッサが処理します。

それにしてもこの時間にこれだけスレが伸びるとは…

836 :デフォルトの名無しさん:02/05/21 05:56
ついでに質問ですが
(1) TRACE("i = %d, j = %d\n", i, j);
とすると、#define DEBUG 1のときだけ
i = 100, j = 20
のように表示して、それ以外の時は何も表示しない
ようにしたいのです。こういう可変引数のマクロはどう
やって書いたら良いですか?

(2) funcという関数が、他のどの関数から何回呼ばれた
か数えたいのです。呼び出し側のソースは変えたくない
のですが、良い方法はないでしょうか?

837 :デフォルトの名無しさん:02/05/21 06:16
gprof?

838 :デフォルトの名無しさん:02/05/21 06:30
>>836
(1)
可変引数のマクロ・・・分らん。関数にしる!
(2)
プロファイルを取れば分ります。
もしくは関数を呼び出すだけのhoge()関数を作って、
今の関数をhoge_himitu()とかにするとか。

839 :デフォルトの名無しさん:02/05/21 06:34
#if (DEBUG == 1)
#define TRACE(x) printf x
#else
#define TRACE
#endif

TRACE(("i = %d, j = %d\n", i, j));

static cnt = 0;
++cnt;

コンパイラ付属のプロファイラを使え

なんでお前らCFAQよまねえの?


840 :デフォルトの名無しさん:02/05/21 06:48
srand( rand() );
こんなコード見たら本人に突っ込んどくべきですか?
問題ない?

841 :デフォルト値名無しさん:02/05/21 07:01
CってC++みたいなデフォルト値使えないんですか?

842 :デフォルトの名無しさん:02/05/21 07:07
べき

843 :デフォルトの名無しさん:02/05/21 07:07
つかえない

844 :デフォルトの名無しさん:02/05/21 07:18
ポインタをint(C99ならintptr_t)にキャストしたときの数値って
何か仕様みたいのあるの? 下位nビットは0、とか

845 :デフォルトの名無しさん:02/05/21 07:25
ない

846 :844:02/05/21 07:39
>>845
thx 簡潔な回答ね

847 :841:02/05/21 08:15
答えもらっといてから補足で悪いんですが、引数のって意味ですね。
多分何を考えてるのかお見通しだと思いますが。

848 :840:02/05/21 08:24
>>842 うむ、やはりそうですか。
控えめに問い詰めるてみることにします。

849 :デフォルトの名無しさん:02/05/21 08:59
>>844 そもそもDSPなんかアドレス単位が 32bitってのもあるし

850 :デフォルトの名無しさん:02/05/21 09:13
>>836

(1)
#if DEBUG
#define TRACE(fmt, ...) printf(fmt, __VARARGS__)
#else
#define TRACE(fmt, ...)
#end

(2)
#define func(x) func0(__func__, x)

呼ばれる側をfunc0という名前にしろ。第1引数に関数名
文字列が渡されてくるので、それをハッシュ表に登録しろ。

これらのコードが使えないコンパイラはさっさと捨てろ。


851 :デフォルトの名無しさん:02/05/21 09:52
ともっち大好きあげ

852 :デフォルトの名無しさん:02/05/21 10:28
                     ノ⌒)
         ∧_∧     ( _ノ、ノ
         ( ´Д`)    / /  。
       /⌒    ⌒'/ /    。
      /_/|       / /     。
    (ぃ9 ./    / //      。
       /   / /3
      (   / //
       \. \\
         \. \\
          >  ) )
         / //
         / / /
         / / /
       ( ヽ ヽ
        \__つ)

853 :836:02/05/21 12:05
みなさんありがとうございます。

>>837-839
呼ばれた回数をプログラムの中で使いたいのです。

>>850
試してみました。
うまくいきそうです。
ありがとう。

854 :デフォルトの名無しさん:02/05/21 12:36
ターゲットのオペコードマップは覚えないとダメでしょうか?

855 :デフォルトの名無しさん:02/05/21 12:38
>>854
http://natto.2ch.net/denpa/へ逝ってください。

856 :デフォルトの名無しさん:02/05/21 12:49
>>855
いや、冗談抜きにCハカーの人は386の一バイトのオペコードぐらい
覚えてるのかなーと思ったからさ。覚えるっていっても256個しか
ないからたいしたことないけど。

857 :デフォルトの名無しさん:02/05/21 12:52
>>856
ハイソサイエティハッカーの日下部陽一は覚えています。

858 :デフォルトの名無しさん:02/05/21 12:53
x86なんぞ覚えてもあと数年しか役に立たんだろ,と思いつづけて早15年

859 :デフォルトの名無しさん:02/05/21 12:56
>>857
マジですか?やっぱり日下部先生凄い。
日下部先生ならhexl-modeでプログラミングしてそうだ。。。

ところで、次スレの1はまた日下部先生にしようよ。
やっぱり先生が一番だよ。

860 :デフォルトの名無しさん:02/05/21 12:57
>>859
〜にしよう。だって?何言っているの?
本人が立てるに決まっているだろ。

861 :デフォルトの名無しさん:02/05/21 12:59
インタラプトのオペコードは0xCDなヨカン

862 :デフォルトの名無しさん:02/05/21 13:07
俺は486用のデバッガ作ったよ。でも今思い出せるのはな・・・

    (゚д゚) NOP ダケダ!
   ~(  )−
    / >

863 :デフォルトの名無しさん:02/05/21 13:10
あ、INT3も思い出した

864 :デフォルトの名無しさん:02/05/21 13:10
INTも覚えてるな。

865 :デフォルトの名無しさん:02/05/21 13:14
いまからCを勉強したいのですが
市販のVisual C++,C++ Builder etc
を買ったほうがいいですか?
落とせるCとどう違うんですか?

866 :デフォルトの名無しさん:02/05/21 13:29
男は黙ってgcc

867 :デフォルトの名無しさん:02/05/21 13:31
>>865
コンパイルが簡単。
HELPが充実。
デバッガ、エディタ、ライブラリが圧倒的に強力。
効率が10倍ぐらい違うと思う。

868 :デフォルトの名無しさん:02/05/21 13:32
>>867
thanks a lot!


869 :デフォルトの名無しさん:02/05/21 13:34
>>866
Kako(・∀・)EE!!

870 :デフォルトの名無しさん:02/05/21 13:35
>>866
女は?

871 :デフォルトの名無しさん:02/05/21 13:40
女子供はニガテだ

872 :デフォルトの名無しさん:02/05/21 13:41
女子供はすっこんでろ!
ここは戦場だぞ!

873 :デフォルトの名無しさん:02/05/21 13:44
女も第一線で戦います!

874 :ガンオタ:02/05/21 13:51
考えてみれば富野ってフェミニストだよな。
やっぱ戦場にも女性進出は必要だよ。

875 :デフォルトの名無しさん:02/05/21 13:57
>>874
マクロス見ろ

876 :デフォルトの名無しさん:02/05/21 14:07
>>874
ザブングル見ろ

877 :デフォルトの名無しさん:02/05/21 14:13
Windows98のDOS(?)で動かすには
どういうコンパイラが必要なんでしょうか?


878 :デフォルトの名無しさん:02/05/21 14:17
x86互換のリアルモードで走るプログラムを吐くスーパーコンパイラが必要です

879 :デフォルトの名無しさん:02/05/21 14:26
「DOSを動かす」でなく「DOSで動かす」コンパイラだから16ビットの
コマンドラインコンパイラ。
MS-CとかTurbo-CとかBDS-CとかHITECH−Cとか・・・

880 :デフォルトの名無しさん:02/05/21 14:59
コンパイルする環境はWindows or DOSで
exeを走らせたいのがWindows98のフロッピーで起動するDOSと言いたかったんです。
Freeなものはあるのでしょうか。



881 :デフォルトの名無しさん:02/05/21 15:22
>>880
LSI-Cが最適だと思われ。インストールしても1Mないし。
Vectorで検索しれ

882 :デフォルトの名無しさん:02/05/21 15:42
>>880
TurboC 1.01とか。Borlandのサイトから落とせたはず。
いらないライブラリとか削ればフロッピー運用も可能かも。
LSI-Cよりもビルド速度は速いし。

883 :デフォルトの名無しさん:02/05/21 16:12
878〜882>>
ありがとうございます。
早速試してみます。

884 :デフォルトの名無しさん:02/05/21 18:23
数学できなくてもシステムエンジニアになれますかね?

885 :デフォルトの名無しさん:02/05/21 18:25
>>884
なぜここで聞く・・・・
マ板にでも逝けよ。

886 :デフォルトの名無しさん:02/05/21 18:26
ご忠告ありがとうございます。
マ板ってどこですか?

887 :デフォルトの名無しさん:02/05/21 18:28
>>886
プログラマ板
http://pc.2ch.net/prog/

ネタ・愚痴中心の板。

888 :デフォルトの名無しさん:02/05/21 18:30
>>887
ありがとうございます
忠告どおり逝ってみます

889 :デフォルトの名無しさん:02/05/21 18:31
アセンブラ分からなくてもCプログラマと名乗っていいんですか?

890 :デフォルトの名無しさん:02/05/21 18:34
Cでまともなプログラムが書けるなら名乗っても許す

891 :デフォルトの名無しさん:02/05/21 18:34
ポインタとか構造体とか分からなくてもCプログラマと名乗っていいですか?

892 :デフォルトの名無しさん:02/05/21 18:35
アセンブラって何ですか? 藁

893 :デフォルトの名無しさん:02/05/21 18:35
>>889
そんな奴腐るほどいるぞ

894 :デフォルトの名無しさん:02/05/21 18:36
>>893
例えば俺とかお前とかな。

895 :デフォルトの名無しさん:02/05/21 18:36
>>893
へーそうなんだって俺もわかんないけど
サブルーチンならなんとなく分かります

896 :デフォルトの名無しさん:02/05/21 18:37
>>892
自分で調べろよ。
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=assembler&sw=0

897 :デフォルトの名無しさん:02/05/21 18:37
既出ですが、BASICの
・REM
・PRINT
・END
・INPUT
・LET
この五つのの意味を教えてください。
できればそこのURLを貼っていただくとありがたいです


898 :デフォルトの名無しさん:02/05/21 18:38
stdio.hっの名称ってどういう由来ですか?

899 :デフォルトの名無しさん:02/05/21 18:38
>>897
どう罵倒しようか…

900 :デフォルトの名無しさん:02/05/21 18:39
900

901 :デフォルトの名無しさん:02/05/21 18:39
>>898
Standard I/O

902 :デフォルトの名無しさん:02/05/21 18:39
分かりましたURLありがとうございます>896

903 :デフォルトの名無しさん:02/05/21 18:41
>>898
あ、そうだったですね、ありがとうございます。
そうするとスタンダード インプット オンプットの略ってことですかね?
どういう意味なんだろう

904 :デフォルトの名無しさん:02/05/21 18:41
厨房ですけどC言語はじめるにはどのソフト買えばいいでしょうか
いっぱいあって分からんです

905 :デフォルトの名無しさん:02/05/21 18:42
アセンブラなんか萎える
小さいのがいっぱい萎える

906 :デフォルトの名無しさん:02/05/21 18:43
>>904
マイクロソフトのc++が使いやすそうですよ

907 :901ではないが:02/05/21 18:43
>>903
スタンダード インプット アウトプットだ。


908 :デフォルトの名無しさん:02/05/21 18:44
>>903
アウトプットだよ。
標準入出力

909 :デフォルトの名無しさん:02/05/21 18:44
>>904
僕も最近,C言語を習得しようと思ってるので
お互いに頑張りましょう

910 :デフォルトの名無しさん:02/05/21 18:46
>>907
>>908
そういえばそうだった、ありがとうございます!

911 :デフォルトの名無しさん:02/05/21 18:49
関係ないけど
スタンダードが標準っていう意味なら
GLAYのALL STANDARD IS YOUは
すべての標準はあなたに??
バカですいません

912 :デフォルトの名無しさん:02/05/21 18:55
あんたが基準だ じゃねーの?

913 :デフォルトの名無しさん:02/05/21 18:56
そういえば、stdin,stdout,stderrってFILE *型の"大域変数"だったんだな。
考えたこともなかったが。

914 :デフォルトの名無しさん:02/05/21 19:04
const double a=45.72;
double b;
...
...

if(b==a){

}
実際にbが45.72の場合にもif文の中に入ってくれないんですけど、
どうしてなんでしょうか。。。

915 :デフォルトの名無しさん:02/05/21 19:06
>>913
とは限らんが。

916 :デフォルトの名無しさん:02/05/21 19:08
>>954
なんで浮動小数点型が「見た目ぴったりの厳密な値」と思う
やつがこんなに多いんだろうね。==で比較しちゃいかん、
と言うのは初歩の初歩だと思うんだが。

917 :デフォルトの名無しさん:02/05/21 19:11
>>916

>>954は浮動小数点の疑問を書くのですか?

918 :デフォルトの名無しさん:02/05/21 19:11
914サソの疑問は %f じゃなく %e で差をとって見てみると良く分かる
んじゃないかとおもうんだな。

919 :デフォルトの名無しさん:02/05/21 19:11
最初は誰もわからんだろ >>こんなに多い

920 :デフォルトの名無しさん:02/05/21 19:17
このスレなんでこんなに人気があるの?

921 :デフォルトの名無しさん:02/05/21 19:18
Cだから

922 :デフォルトの名無しさん:02/05/21 19:22
今日中に新スレになる予感

923 :デフォルトの名無しさん:02/05/21 19:28
>> 915
んだんだ。昔、そういう仮定のもとに書かれたチャセンという
ぷろぐらむが、まさにそういう罠でコンパイルできなかった。
こういう誤解が広まるのはこまるね。

924 :デフォルトの名無しさん:02/05/21 19:31
>>914
if ( fabs(a - b) <= DBL_EPSILON) {
}

925 :デフォルトの名無しさん:02/05/21 19:34
Singleton

キタ━━(゚∀゚)━━ァ!

926 :925:02/05/21 19:35
あ、こりゃ失礼
語僕しますた

927 :デフォルトの名無しさん:02/05/21 19:36
>>924
二つの値が十分に近いって奴だな。
C Fuck Youか何かに載っていたような・・・

928 :デフォルトの名無しさん:02/05/21 19:36
>>926
さらに誤字ですか。

929 :925ぐらい?:02/05/21 19:38
失礼します
Cでカレントディレクトリからある条件(たとえば二桁の数字とか)
のフォルダのみを取得する方法はありませんでしょうか?
よろしければソースで示していただけると助かります。

最近Cを始めたのですが、
本を見てもフォルダの扱いってあまり書いて無いんですね。
(自分の読み方が悪いのかもしれませんが)
お助けいただけたら幸いです。

930 :デフォルトの名無しさん:02/05/21 19:39
>>929
Cの標準規格ではディレクトリ内のファイル(ディレクトリ)名を得る方法は定義されていない。


931 :デフォルトの名無しさん:02/05/21 19:40
>>929
組み込み系などディレクトリがない環境もあるからね。
man fnmatch(3)

932 :デフォルトの名無しさん:02/05/21 19:45
>>929
プラットフォーム依存。
たいていの処理系だと、それ用のライブラリがあるのでマニュアル見るしかない。
WINだとFindFirstFile(), FindNextFile()
POSIX準拠OSだとopendir(), readdir(), closedir()


933 :925ぐらい?:02/05/21 19:46
>>930
ご親切にありがとうございます。
それにしても定義されていないのですか。
するとこれはC++などの領域に入るものであるということなのでしょうか。

自分はVC++を使用しているのですが、
もしC++で上で書いたようなことが出来るようでしたら
お教えいただけませんでしょうか。
たびたび申し訳ありません。

934 :デフォルトの名無しさん:02/05/21 19:47
>>933
違う違う。
>>932の言うようにOSごとに、可能ならば多くの場合ライブラリが用意されている。

935 :デフォルトの名無しさん:02/05/21 19:49
識者の方にお伺いしますが、
a^=b^=a^=b
って式は、undefined なんですよね。

936 :925ぐらい?:02/05/21 19:50
>>931-932,>>934
や、そうなのですか。勘違いして申し訳ありません。
自分の環境はWIN2000なのでそれでご教授いただけますと助かります。

937 :デフォルトの名無しさん:02/05/21 19:50
>>931
へー、fnmatchなんてのがあるんだ。知らなかったよ。

ところで、組み込み系だとファイル自体なかったりしないか?(w
(freestanding environmentというやつね。)

fopen()があるのにopendir()等が規格に入らなかったのは何故だらう?

938 :デフォルトの名無しさん:02/05/21 19:50
>>936
>>932に書かれている関数をMSDNライブラリで調べる。

939 :デフォルトの名無しさん:02/05/21 19:51
>>937
ファイルのない環境までは考えていなかったとか。
元々OS記述用言語だし。

940 :925ぐらい?:02/05/21 19:52
>>938
わかりました。いろいろありがとうございました。失礼します。

941 :デフォルトの名無しさん:02/05/21 19:55
>>937
glob + fnmatch が便利。つーか挙げるなら glob だった。
ソースがほしいみたいなこといってたから挙げたけど、
使うだけなら FindFirstFile opendir でいいか。

942 :デフォルトの名無しさん:02/05/21 19:56
>>935
うん。

>>939
規格だとfopen()もfclose()もmalloc()もexit()もとにかく全部の標準ライブ
ラリが使える環境(hosted environment)と、fopen()やfclose()やmalloc()
などが使えない環境(freestanding environment)の2種類を想定してるよね。

で、fopen()が使える環境だと「ファイル名」とか「ファイル」って概念はあ
るのに、ファイル名の一覧を取れないのはなぜなんだろうね。

943 :デフォルトの名無しさん:02/05/21 19:59
>>935
式がundefinedというより、1つの式の中で同じlvalueの値を複数回
変えようとする「ことが未定義な動作」だ。


944 :デフォルトの名無しさん:02/05/21 20:02
935
シーケンスポイントにaとbがそれぞれ2つか?

945 :デフォルトの名無しさん:02/05/21 20:02
>>942
取れるのが名前だけじゃ不便だし、
ファイルシステムがOSにより様々だから規定しようがなかった

946 :935:02/05/21 20:10
ありがとうございます。
いいアルゴリズムっていうか小技を教えて
ってスレで出ていた小技なのですが、
誰も突っ込まないので、ちょっと心配になったんです。
(もちろん、花っから、こんな馬鹿なコードは使うつもり
はありませんでしたが。。。)

947 :デフォルトの名無しさん:02/05/21 20:18
>>944
bは問題なかろ。問題はaだよな。

>>945
そうかもね。不便でもないよりましだった気もするが。

もし入れるとしたら、「ディレクトリ名」なんてのは指定できないから
カレントディレクトリのリストしか取れない。しかもchdirも入れられ
ない、か。うーん。やっぱりあってもしょうがないか?

948 :デフォルトの名無しさん:02/05/21 22:04
qsortの引数に配列の要素の大きさを指定する場所がありますが、
実際の処理の中ではどう使われてるんでしょう?
自分で汎用的なものをつくるとき、任意のオブジェクトをソートするときは
どうするのかなーと思って。

ソートして入れ替え処理が出てきたとき(Dataが要素の型とすると)
Data work = array[i];
array[i] = array[j];
array[j] = work
とworkのための領域(Data型一個の領域)が必要だと思いますが、
この領域はどう確保してるんですか?
malloc(size)とかだと重いような気がします。

質問がわかりにくくてすいません。


949 :デフォルトの名無しさん:02/05/21 22:15
>>948
qsortに渡すのは「void*の配列」じゃないかな。
sortされるのはvoid*であって、実体ではない。


950 :デフォルトの名無しさん:02/05/21 22:21
>>948
void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));
このプロトタイプ宣言のうち、widthをひとかたまりとしてソートします。
だから、workのための領域は必要ありません。

951 :デフォルトの名無しさん:02/05/21 22:28
ポインタってむずいな。

952 :デフォルトの名無しさん:02/05/21 22:42
>>951
難しくないよ。慣れの問題だよ。

953 :デフォルトの名無しさん:02/05/21 22:44
>>949 ちょっと待った。
だとすると、qsortの第一引数はvoid **じゃないとおかしいし、
第三引数は不要になっちゃうよ(sizeof(void *)に決まってるから)。
sortされるのは実体でしょう。

http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/lib/libc/stdlib/qsort.c?rev=1.11&content-type=text/plain

これはFreeBSDのlibcのqsort()のソースね。
実際の交換を行っているのはswapcode()というマクロで、
(サイズがlongの場合は特例でswap()の中で交換している)
配列要素をcharまたはlong単位で分割して交換処理をやってるみたい。
他のOSのqsort()も似たようなものではないかと。


954 :948:02/05/21 22:45
>950
>workのための領域は必要ありません。
普通のソートしか知らないので、入れ替えるときに
work領域を使わない方法というのがちょっとわからないんですが・・・。

qsortってc言語でかかれてるんですか?
もしそうなら、一度ソースを見てみたいです。

955 :948:02/05/21 22:51
>>953
と思ったらソースをどうも。
しっかり読んで見ます。でも難しそー。

956 :デフォルトの名無しさん:02/05/21 23:12
>>955
要するに、ライブラリ関数の中で勝手に交換の為のwork領域を用意して
くれるという事だよ。

957 :デフォルトの名無しさん:02/05/21 23:35
Win me でVisual C++を使ってます。
これで作ったプログラムをDOS上で動かすことはできるんですか?

958 :デフォルトの名無しさん:02/05/21 23:45
>>957
できる

959 :デフォルトの名無しさん:02/05/21 23:45
そのVCのヴァージョンが1.5とかなら、
 PureDOSの上で動かせるプログラムが作れるでしょう。
「DOSで動かす」のDOSがWin32Consoleの頭悪い表現なら、
 答えは「できます」
そのほかは
 できません

960 :デフォルトの名無しさん:02/05/21 23:54
FreeBSD について来る heapsort は malloc してますね。
heapsort のアルゴリズムの都合で
ソートするオブジェクト一個分の作業領域があれば便利なんですな。
ちなみに、最悪の場合を考えると、
heapsort の方が qsort (quicksort) よりがぜん有理。
平均の場合は qsort の方が早いけど
オーダは同じなので、最悪の場合が
気になるようなクリティカルな場合は
heapsort の方がいいかも。
たとえば、4.4BSD 由来の qsort は、同じ値のキーが
多数ある場合、死ぬ程遅いのでこういう時に真っ当な
qsort を持って来るのが面倒なら heapsort を使うって感じ。

961 :デフォルトの名無しさん:02/05/21 23:56
「VCを使って作ったプログラム」というところがみそ。

962 :デフォルトの名無しさん:02/05/21 23:57
作業領域もheapsortが有利だね。
元のデータ以外は定数個しか要らない。

963 :デフォルトの名無しさん:02/05/21 23:59
ガーソ...Linuxにはheapsortなんてついてこないようだ

964 :デフォルトの名無しさん:02/05/22 00:02
みんなすごいね。。。
そこまでソートに速さを求めるプログラム組んでんだ。。。

。。それとも単なる追求心?

965 :デフォルトの名無しさん:02/05/22 00:03
>>964
ソートでハマッたことのある人は多いと思う。
思ったより遅くて。

966 :デフォルトの名無しさん:02/05/22 00:07
>>965
多数のデータから上位10件を表示するのに、ソート使ったら怒られました。
(まあ、確かにえらい遅かったが…)

967 :デフォルトの名無しさん:02/05/22 00:08
>>966
ソートしないでどうやるの?

968 :デフォルトの名無しさん:02/05/22 00:09
>>967
君は多数のデータから1番大きい数字を探す時もソートを使うんですね

969 :966:02/05/22 00:15
>>967
えーっと、priority queueを使えと言われたが、
良くワカランかったので上位10個ソート済みの
配列を持ってた(w

データなめ終わったとき配列内に残ってたやつ
が上位10個。

970 :デフォルトの名無しさん:02/05/22 02:34
>967
ちょっと考えてみた。

たとえば、n件のデータのトップ10をとるなら
qsortだと最速でO(n*log(n))、最低速だとO(n*n)。
一方、全要素をなめて最大値を探すのはO(n)だから
これを10回繰り返せばトップ10が出るからオーダーはO(n*10)
あと、n>>10だと仮定すればO(n)だな。

結果としてオーダーを見るとソートするより最大値取得を
必要な回数だけ繰り返す方が早い。

ちなみに、priority queueを使えば操作自体はO(n)ですむけど
1件当たりの処理がちょっと重くなるから場合によって使い分ければ良いと思う。


971 :デフォルトの名無しさん:02/05/22 06:07
大きさ m のヒープを作れば、一回のデータ追加の
操作は O(log(m)) だから、
n 個のデータの上位 m 個を求めるには
O(n log(m)) で済む。
(全部のデータをプライオリティキューにするのでは無くて
これまでに見たことがあるデータの上位 m 個だけをキューに
しておけば良いから。)

972 :971:02/05/22 06:13
いい忘れたけど、
「大きい順んに m 個」
と言う場合、ヒープは小さい順に並べるのね。
そしたら、ヒープにある m 個のデータのうち
最小の奴だけは O(1) で取り出せ、それを更新する手間が
O(log(m)) になるから...

973 :デフォルトの名無しさん:02/05/22 09:14
一番大きなものを探すだけなら、配列内の要素を全て一度だけ見ればOKだろ?

974 :デフォルトの名無しさん:02/05/22 10:40
int型の変数に数字以外を入力すると表示させる方法がわかりません

975 :デフォルトの名無しさん:02/05/22 10:44
↑「数字以外が入力された」を表示させるでした。

976 :デフォルトの名無しさん:02/05/22 10:51
>>974-975
何を言っているのかよくわからんが、scanf系関数で数字列以外が入力された場合のことなら、戻り値をチェックすればよい。

977 :デフォルトの名無しさん:02/05/22 11:26
O(n log n)とO(n log m)って、まあせいぜい数倍の違いってことか。

でも実際には、データを全部メモリ上に持つ(そして何度も見る)のと
1パスで良い(全部同時に持つ必要はない)のはだいぶ違うね。

978 :デフォルトの名無しさん:02/05/22 14:01
日時を文字列で持っているのですが、これを1分進めたいという
場合どのようなやりかたがあるでしょうか?
char workdate[15];
strcpy(workdate, "20020522135930");
これが
"20020522140030"
になってほしいのですが。
いったん日時型かなにかに変換するのかなと思ったりしていますが
わからないのでよろしくお願いします。

979 :デフォルトの名無しさん:02/05/22 14:12
int year, month, date, hour, min, sec;
sscanf(workdate, "%04d%02d%02d%02d%02d%02d", &year, &month, &date, &hour, &min, &sec);


980 :デフォルトの名無しさん:02/05/22 14:18
とりあえずworkdate[16];
NULL文字は入れんでええのかえ

981 :デフォルトの名無しさん:02/05/22 14:19
>>974
数値の入力にscanfを直接使うのはC言語では推奨されない。
全てを文字列として読み込み、その後、sscanfで処理すべし。

982 :デフォルトの名無しさん:02/05/22 14:21
しまった(*ノД゚)
15でよかよ、ワシのミスじゃ。スマソ

983 :デフォルトの名無しさん:02/05/22 14:25
次スレは日下部先生でひとつよろしく

984 :デフォルトの名無しさん:02/05/22 14:27
立ててみるぞ。

985 :(@_@)?:02/05/22 14:27
strncpyはコピーすべき文字数がコピー元の文字列長より少なかったら
自動的に'\0'を入れないようだけど何故'\0'を付けないの?
付けた方が使いやすいと思うんだけど

986 :伝説の日下部陽一:02/05/22 14:34
次スレ
以降しる!

C言語なら、俺に聞け! <21>
http://pc.2ch.net/test/read.cgi/tech/1022045622/l50

987 :デフォルトの名無しさん:02/05/22 14:36
>>985
そういう仕様だからです。
文句はK&Rに言いましょう。

988 :デフォルトの名無しさん:02/05/22 14:40
ANSIじゃないの?

989 :デフォルトの名無しさん:02/05/22 14:41
今まで我慢してたけど、昨日ともっちで初めてオナニしたよ。
気持ちよかった。いつかともっち

990 :デフォルトの名無しさん:02/05/22 14:43
いつかともっち

991 :デフォルトの名無しさん:02/05/22 14:46
Includeフォルダに
graphics.hがはいってないっす。
どこにああるの?

992 :デフォルトの名無しさん:02/05/22 14:46
>>991
いつかともっち

993 :991:02/05/22 14:48
あいた!すれ残り数ぜんぜん見てなかった。
あっちでききます。

994 :デフォルトの名無しさん:02/05/22 14:48
>>991
いつの処理系だ?
TurboC++か?
使っている参考書が古すぎて最近のでは動かんぞ。
そのソースは諦めるべし。

995 :1000!!:02/05/22 14:48
              ∧            ∧
              / ・           / ';,
             /  ';          /  ';  1000 ワショーイ…
             /   ;______/   ;
          /                  \
         /    /          \     \
        /´   (  ) |____|  (  )      |
       |  /////  (  |     :|    )  /////    |
       |    (   ) :|      |  (   (       |
        |    )  (  |     |   )   )      |
        |   (   ) ';    /   (   (     /
         \  )  (   \/    )   )  ../
           ヽ              ........:::

996 :1000!:02/05/22 14:49

              ∧            ∧
              / ・           / ';,
             /  ';          /  ';  1000 ワショーイ…
             /   ;______/   ;
          /                  \
         /    /          \     \
        /´   (  ) |____|  (  )      |
       |  /////  (  |     :|    )  /////    |
       |    (   ) :|      |  (   (       |
        |    )  (  |     |   )   )      |
        |   (   ) ';    /   (   (     /
         \  )  (   \/    )   )  ../
           ヽ              ........:::



997 :991:02/05/22 14:50
TurboC++です。
じゃあ、glibw32.libをDLして使うしかないのかな?
参考書、確かに無茶古いの使ってます。

998 :デフォルトの名無しさん:02/05/22 14:50

              ∧            ∧
              / ・           / ';,
             /  ';          /  ';  1000 ワショーイ…
             /   ;______/   ;
          /                  \
         /    /          \     \
        /´   (  ) |____|  (  )      |
       |  /////  (  |     :|    )  /////    |
       |    (   ) :|      |  (   (       |
        |    )  (  |     |   )   )      |
        |   (   ) ';    /   (   (     /
         \  )  (   \/    )   )  ../
           ヽ              ........:::



999 :デフォルトの名無しさん:02/05/22 14:50
1000かも

1000 :デフォルトの名無しさん:02/05/22 14:50
最後

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

212 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)