- 1 名前:デフォルトの名無しさん [2009/10/29(木) 21:10:18 BE:227211146-DIA(352353)]
- C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 131代目 pc12.2ch.net/test/read.cgi/tech/1255709298/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 54 pc12.2ch.net/test/read.cgi/tech/1254829314/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
- 581 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 01:09:20 ]
- そういうことね
列挙型の列挙子の数をとる方法ない(気がする) しばしば、一番最後にダミーを入れたりするが、 enum { foo = 128, bar, baz, dummy }; とかしているときには終わっている そもそも何の目的で列挙子の数を知りたいのかによって、 別の解決方法があるかもしれない
- 582 名前:デフォルトの名無しさん [2009/11/10(火) 01:42:16 ]
- >>581
ことの発端は >>549 でさ 俺が >>557 と返したら >>571 ときたわけよ ダミー列挙子みたいな不純物を必要としない きれいな方法はバラ変数か構造体で、 配列の用途じゃねえだろって立場をとってたんだ それで仮に列挙子と配列の要素をきれいに対応させる バラ変数や構造体よりも合理的な方法を誰か示したら 俺の負けかなって思って詰ろを作って待っていたんだが みんな寝ちまったみたいだし、俺も眠いし・・・
- 583 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 01:55:49 ]
- >>558
グローバル変数が構造体で1億個とかあるらしい>某住基ネット上アプリ
- 584 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 02:10:11 ]
- >>583
ネタだと思いたいが、ひょっとして子[1]、子[2]...は駄目で、 長男、次男、三男...とかになってるのだろうか。
- 585 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 02:59:01 ]
- >582
>それで仮に列挙子と配列の要素をきれいに対応させる つまり、それは写像だな 列挙子集合E = {x | x e _N}, 配列A = {y | y e _R}が存在し、 f: x e E -> y e Aなるfを定義すれば良い 最初は全単射と思ったが、単に単射(|E| ≧|A|)であればよかった f def= ∀y e A [∃x e E]ごめん、数学そんなにやってないんだ C言語では、 type_t f(enum E x) { int x_dash; /* do_something */ /* 例えば、x_dash = x / 2; */ x_dash = x / 2; return A[x_dash]; } もっとも、 type_t A[N]; /* N = 128とか */ type_t *map(type_t *array, enum E x) { return (array+hash(x)); } int hash(int x) { return x % sizeof A; } となるが、これが合理的かと問われたら、 まったく合理的ではありませんでした、ありがとうございました と言うよりこれは、整数のハッシュ法じゃないかよ
- 586 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:21:26 ]
- C言語に限らないプログラミング言語一般論の領域
になってしまっている件と、生半可な集合論数学表現とか 振り回す人が出てきてる件について、この話題はいったん休止が 良いかと
- 587 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:28:57 ]
- >>582
普通についてる>>560を何でスルーしたんだろうなぁ それはそれとして、cのenumはやっぱ不便だよね。 他言語で改良されてる点はまさに改良だなと思う。
- 588 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:31:36 ]
- >>586
しかもあさっての方向の話はじめちゃってるしね
- 589 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:43:19 ]
- データ構造上やアルゴリズム上のエレガントな問題解決手段という
理由から配列を使うというのは古き良きアカデミズムな世界の話。 現実のプログラミング現場では名前空間管理の負荷が大幅に 軽減されるというコード作成上のメリットが絶望的に大きいので、 エレガントになろうがなるまいが構造体配列を使わざるを得ない ことが多い。(てかほぼ全て) しかしそこには問題の無理な構造化、規格化による現実との乖離の 危険性が伴うので、問題視する人も多い。
- 590 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:46:40 ]
- 構造体も配列も堅固な理論的バックボーンの成果じゃなくて
苦し紛れに作られたシンタックスシュガーに近い
- 591 名前:249 [2009/11/10(火) 10:13:04 ]
- >>249>>440>>448ですが
>>450をどこにいれればいいかわかりません… >>440を基盤に作りたいんですが>>450はどこにいれるんですか?
- 592 名前:デフォルトの名無しさん [2009/11/10(火) 10:16:53 ]
- >>586
ここで出てきている配列と列挙子は、 C に特有の性質を十分に使っているし、 性能面の評価も C 流だが? >>587 コンパイラのシンボルルックアップが 実行時のアドレス計算として持ち越されるわけだが 全レスの義務はないし個人的につまらなかったんで・・・
- 593 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 11:06:19 ]
- >>591
消したコードを元に何を言ってるんだ? >>592 プロセッサレベルで元コードが配列として表現 されていたのかそうでないのかを区別することが出来る とでも思っているのか?
- 594 名前:デフォルトの名無しさん [2009/11/10(火) 11:14:35 ]
- >>593
色々仮定をおけば区別がつかなくなる場合はありそうだが この流れの中でそんなのに構うつもりはない
- 595 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 12:24:11 ]
- >>592
実行時のアドレス計算は関係ないよね。 コンパイル時のシンボルルックアップ負荷の話でしょう?
- 596 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 12:25:39 ]
- コンパイルにやたらと時間がかかった昔ならともかく、
今でもそういうことって気にすべきものなの?
- 597 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 12:47:29 ]
- 昔だって気にしないよ
- 598 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 13:32:59 ]
- そういうことを気にすべきじゃないよ。
けれど、今でもビルドにやたら(数時間でいい?)と時間がかかる場合は少なくともC++でまれによくある あえてこういう表現にしてみた。
- 599 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 13:41:48 ]
- 誤解があるといけないので。
シンボルルックアップのせいでやたらと時間がかかる場合があるということではないです。 もしそうなった場合にそれをコードの面で解決しようとすることはないでしょうね
- 600 名前:249 [2009/11/10(火) 13:43:31 ]
- コードきれていました
>>249>>440>>448ですが >>450をどこにいれればいいかわかりません… www.dotup.org/uploda/www.dotup.org348416.txt.html を基盤に作りたいんですが>>450はどこにいれるんですか?
- 601 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:22:07 ]
- 「まれによくある」って2ch語?
- 602 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:22:35 ]
- 消えないように貼っておいたげた
codepad.org/TuCBekq8
- 603 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:23:58 ]
- >>601
2ちゃんではまれによく見るね
- 604 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:26:34 ]
- >>601
ググればすぐ答えが出るようなものを、一々質問してんなよw
- 605 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:27:48 ]
- まれによくある
の解釈 数的には実はよくある がそういうのは集積されており 目にすることは意外に少ない
- 606 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:34:47 ]
- 配列を使うことによるメリットとデメリットを列挙出来る?
- 607 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:37:55 ]
- 出来る
- 608 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:04:50 ]
- 居座ってる人が何をしたいのか分らん
- 609 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:21:29 ]
- 出来るがしない
- 610 名前:デフォルトの名無しさん [2009/11/10(火) 15:58:42 ]
- >>595
だから何つっちゃうよ? プログラム中に何万だかあるシンボルを同一空間に置けつったんだろ >>560 はよ、でそれを俺はつまんねつったわけ つーか、#define から enum へもう流れが変わってるんだが、まだ翻訳フェーズ(4)にこだわりたがるのは何でだ? 255歩譲って、翻訳フェーズ(4)の話に戻っても、翻訳環境の負荷を軽くって定量的にどのくらいやるべきだと思っている? それは配列が向かない用途(断言)に、理を曲げてまで配列を使わせるほどの事情たりえたことが、おまえさん自身あったのか? そのうえでだが、それは配列の存在意義を聞かれたときの答えとして妥当だと思うか?
- 611 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:26:11 ]
- オタクがきれた^^
- 612 名前:デフォルトの名無しさん [2009/11/10(火) 16:48:25 ]
- C言語の勉強をしたいのですが、関係した資格はなんですか?
情報処理2種ですか?
- 613 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:52:27 ]
- 今は情報処理2種っていう資格は名前が変更になって
C言語以外もいろいろ選択できるようになってるけど それでいいんじゃないでしょうか。
- 614 名前:デフォルトの名無しさん [2009/11/10(火) 16:58:30 ]
- ニコニコ動画で2009年10月15日に投稿された「【プログラミング】テトリスを1時間強で作って
みた【実況解説】」という動画が人気を集めている(写真1)。公開されてから2週間ちょっとで 15万回以上も再生され,コメントも数多く寄せられている。 内容は,開発ツールのインストールからスタートしてWindows環境でC言語を使い,わずか1時間強 でテトリスを完成させるというもの。そのあざやかな手腕には,感嘆の声がコメントで寄せら れている。プログラミングそのものがエンタテインメントになっており,1時間強見ていても全く 飽きることがない。 ニコニコ動画で「うp主」と呼ばれる動画投稿者はどんなプログラマなのだろうか?と思い,インタ ビューを申し込んでみた。うp主の名前は,紀平拓男さん。東京・南青山で携帯電話向けのソフト ウエア開発会社ブロードテイルを経営する若きプログラマCEO(最高経営責任者)だ。きっとプログラ ミング初心者の参考になる話を聞けるに違いない,と期待しながらインタビューを始めたが,予想以上に “すごい”紀平さんのプログラミング歴に圧倒される結果となった。 ──1時間強でテトリスを作れるのはすごいですね。プログラミング歴を教えてください。 幼稚園のころからですね。当時,セガが「SC-3000」というパソコンを出していて,これが家にあり ました。あるとき,親が「ベーマガDX」(注:電波新聞社が発行していたプログラミング雑誌「マイコン BASICマガジン」の別冊。様々なパソコン用のゲーム・プログラムなどを掲載していた)を買ってきた ので,そこに載っているプログラムを打ち込んでいました。 当時は「これを打ち込むとゲームができる」という認識しかなかったですが。SC-3000には顔のキャラ クタがあってそれをBASICのPRINT文で表示して親に自慢げに見せていたそうです。 テトリスを1時間強で作ってみた(ニコニコ動画) www.nicovideo.jp/watch/sm8517855 itpro.nikkeibp.co.jp/article/Interview/20091104/340019/
- 615 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:03:36 ]
- ニコ厨ってだけでちょっとね
- 616 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:07:52 ]
- あえてまれによくあると表現したのはTMPだとよくあるけどTMPを駆使するのはまれだから。
- 617 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:09:33 ]
- >>610
おお、どうしたんだい? そもそもの、プログラム中に何万だかあるシンボルが同一空間にないという仮定を持ち出してはならんぞ。
- 618 名前:デフォルトの名無しさん [2009/11/10(火) 17:29:06 ]
- >>617
なんだそりゃ どっから出てきた? 配列を使うからか? 違うね、配列を使うにしても分割のしようはあるが おまえさん翻訳フェーズ(4)にご執心なんだっけ #undef という手はあるが、前述のとおり俺は興味ない 面白そうな話でも出てくれば別だが今んとこ否定する
- 619 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:49:59 ]
- >>618
ちがうちがう。 配列にする前の、数万だか数十万だかの変数が、同一空間にある可能性を元の話題で否定していないのよ。
- 620 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:51:27 ]
- ちなみに>>599も俺で、
> 配列が向かない用途(断言)に、理を曲げてまで配列を使わせるほどの事情たりえたことが、おまえさん自身あったのか? もちろんない。
- 621 名前:デフォルトの名無しさん [2009/11/10(火) 18:25:11 ]
- >>619
元々が同一空間にぶちまけられた瓦礫の山でも何とかするのが俺らの仕事 そこで配列の出番かどうかが、この流れでの論点だったはずだが、違うかい?
- 622 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 18:27:16 ]
- テトリスくらいできるよ馬鹿野郎
- 623 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 18:33:01 ]
- 1時間でコールオブデューティー4を作る…とかだったら。
- 624 名前:デフォルトの名無しさん [2009/11/10(火) 18:53:39 ]
- むかーし、PC ショップであたかも即興でマシン語たたいて得意がってたのがいたが
何のことはない暗記してきたコードを再生していたに過ぎない(本人談
- 625 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:00:51 ]
- 砂漠が良いか賽のが原が良いかってことだったらどちらも
かなり困ったもの。程度問題。メリット、デメリットのバランス で決めるべき問題だろ
- 626 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:01:29 ]
- むかーし、pcショップで文字列を繰り返し表示させて画面を埋めるプログラムを書いたら、
ちょっと目をはなした隙に画面中央にその文字列を色を変えながら表示するプログラムに 書き換えられていたでござる。
- 627 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:03:02 ]
- それからも書き換え合戦は行われ、生まれたのがWindowsです。
相手は嫁です。
- 628 名前:デフォルトの名無しさん [2009/11/10(火) 19:08:54 ]
- 0 new
cls
- 629 名前:デフォルトの名無しさん [2009/11/10(火) 19:12:31 ]
- >>626
POKE 文でアトリビュート変えたんだろな
- 630 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:40:31 ]
- >>626
実は私が犯人かもしれないw 詰まらないデモが動いてたら今で言う「伝言板スクリーンセーバー」的な プログラムを動かすくらいはよくやってたから。 それも、リストを覗かれないように一行野郎で。
- 631 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 01:00:13 ]
- enum number{
one, two, three, four, five, six, seven, nine, zero };
- 632 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 20:12:09 ]
- 4の倍数のアドレスにあるintと4の倍数からずれてるアドレスにあるintって計算コストって同じ?
- 633 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 20:30:10 ]
- >>632
アドレッシング単位のプロセッサやメモリバスとのミスマッチの 問題は本来はかなり深刻。アドレスによって処理速度がかなり 極端に変わってしまう。 ただPCに限って言えばプロセッサのキャッシュが多層化され、 アドレッシング単位の違いによる相違を吸収されてしまっている 現在あんまし寝た子を起こすような質問をしないこと
- 634 名前:デフォルトの名無しさん [2009/11/11(水) 21:13:55 ]
- >>632
境界要求に違反するアクセスの結果を C は言語規則として定めない
- 635 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 21:36:29 ]
- 大抵はコンパイラが良い位置に配置するだろ。
char a, b, c; int d; とやったら c のあとに1バイトの未使用領域作ったり、 d a b c の順にするとか。
- 636 名前:デフォルトの名無しさん [2009/11/11(水) 21:44:53 ]
- 自動変数ならレジスタ割付するだろ
- 637 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 21:51:54 ]
- ちんこ
- 638 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 21:52:17 ]
- ほら湧いてきた
- 639 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:38:15 ]
-
今思うとハァ?な叱られ 「構造体は必ずビットフィールド使え! メモリは少しでも節約するのが常識だ!」 「mallocを無駄がないように確保しろ!」
- 640 名前:デフォルトの名無しさん [2009/11/11(水) 22:40:55 ]
- unsigned int *uint;
と宣言したものを、 *(long int *)uint; とキャストするとuintは何になるのですか。 long int **uintですか。 int int32; (int *)int32; とか、何になるのかよくわからないのですが。
- 641 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:50:17 ]
- long int だろ。
- 642 名前:デフォルトの名無しさん [2009/11/11(水) 22:50:21 ]
- 叱っている側としては
「ビットフィールド、ビット演算とは実体が何かよく理解して使え」 「詳細に着手する前にシステム全体のキャパシティとストラテジを把握しておけ」 「malloc の計算間違いは以ての外、超最低なので絶対にやるなよ」 といっているつもりなんだが、この原発信が 昼下がりに心がすでにアフター5な「ニュータイプ」たちの脳内で どんな減衰劣化を受けているかは、近頃なかなか驚きゃせん だからスパイラルを何回回れるかで道はまだあったりする 甘くも苦くもね
- 643 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:56:23 ]
- そもそも言われた言葉の意味を理解していないからな
- 644 名前:632 mailto:sage [2009/11/11(水) 23:01:33 ]
- レスd
ホンとはだめだけどPCなら気にスンナってことか
- 645 名前:デフォルトの名無しさん [2009/11/11(水) 23:17:45 ]
- いや、恐いよ
平然とビットズレを一切何の警告もなくやってのけたり 例外をつかまえるのにシステムコールが必要だったり
- 646 名前:デフォルトの名無しさん [2009/11/11(水) 23:18:23 ]
- ユーザモードでバッチグーだったコードが特権モードではNGだったりね
- 647 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 06:25:16 ]
- プログラマが完璧に制御できてると思ってるmallocは、OSがテキトーに確保してプロセスに渡してるだけ
本当にそれだけ確保したか分からないし中の挙動も分かってない でなきゃフラグメントなんか起こり得ない
- 648 名前:デフォルトの名無しさん [2009/11/12(木) 07:13:04 ]
- そのへんは「情報隠蔽」の理念に乗れる人と乗れない人の差だね
別に C++ でなくとも C でもやっぱり解ってなきゃいかん
|

|