- 1 名前:デフォルトの名無しさん [2009/12/15(火) 23:42:55 ]
- C言語の*入門者*向け解説スレッドです。
★前スレ C言語なら俺に聞け(入門編)Part 57 pc12.2ch.net/test/read.cgi/tech/1260020924/ ★過去スレ 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 ★初心者、初級者の方は他の質問スレのほうが良いかもしれません。 例えば 【初心者歓迎】C/C++室 Ver.70【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1258873470/ とか ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 133代目 pc12.2ch.net/test/read.cgi/tech/1260532772/ ★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
- 516 名前:デフォルトの名無しさん [2009/12/25(金) 10:34:07 ]
- 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt
linuxで、g++でemacsで書いて、k-termでコンパイル。 すみません。今日締切の問題で、スレ違いかもしれないんですが、どうかスレ主さま、作ってください。 お願いします。
- 517 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 10:38:26 ]
- 宿題スレがあるのにスレ違いと分かっててなんで質問するんだ?あほ?
このスレの方が勢いがあるから?当然のようにageてるし
- 518 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 10:46:10 ]
- pc12.2ch.net/test/read.cgi/tech/1260532772/442
酷いマルチ>>516のほうが後ってのが特に
- 519 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 10:54:38 ]
- 大抵宿題スレも見てるから、ここにマルチすると逆効果なんだけどね
- 520 名前:デフォルトの名無しさん [2009/12/25(金) 13:46:35 ]
- >>517,518,519
すみません。すれ違いでした。でも本当に急いでいて・・ みなさん、無駄にスレ使ってしまってすみませんでした。
- 521 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 13:50:14 ]
- >>520
逆効果なんだけど特別に許してあげるよ 感謝すればね
- 522 名前:デフォルトの名無しさん [2009/12/25(金) 14:11:41 ]
- >>521
はい。
- 523 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 14:16:28 ]
- 書き込めば書き込むほど、答えが返ってくる確率が下がるんだがw
- 524 名前:デフォルトの名無しさん [2009/12/25(金) 17:01:15 ]
- sprintfのところでエラーもでず勝手にPGが終了されるんだがなんだこれ?
- 525 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:03:53 ]
- ソース見せてみ
- 526 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:07:18 ]
- すみませんうつし先のバッファサイズが足りてなかったみたいデス
しかし何も出ず終了とは
- 527 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:07:36 ]
- バッファ足りてないとか
- 528 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:08:36 ]
- バッファ足りてないとか
- 529 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:08:37 ]
- おぉリロード…
- 530 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:33:21 ]
- >>528-529
この間1秒
- 531 名前:デフォルトの名無しさん [2009/12/25(金) 18:31:07 ]
- PGが終了って、マ板ネタか?
- 532 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 18:32:10 ]
- マは常に終了してるからな^^
- 533 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 18:42:41 ]
- SEは終了してないとか
- 534 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:26:12 ]
- defineってどういうときにつかうん?
- 535 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:29:04 ]
- 気持ちよくなりたいときに使う
- 536 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:58:05 ]
- >>534
そりゃあプログラムを変更したい時に一か所一か所変更するのは面倒でしょ
- 537 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 22:06:15 ]
- defineに限らず構造体の定義などもまとめてヘッダファイルに記述する。
あとで変更したくなったときに、ロジック側を弄らなくて済むようにしておく。 あとはデバッグスイッチとかの条件コンパイル用かな。
- 538 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 22:32:54 ]
- 多用するとタコ殴り
- 539 名前:466 mailto:sage [2009/12/25(金) 22:38:24 ]
- MFCは、すごいマクロ使ってるね。あれはあれでありだとは思うが。
- 540 名前:デフォルトの名無しさん [2009/12/25(金) 23:19:37 ]
- >>539
頼むから冗談はよしてくれ
- 541 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:08:47 ]
- クリスマスにKFCでも食って気が上機嫌なんだろ
- 542 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:16:14 ]
- 気が上機嫌って何かおかしい気がしたけどよく考えたらそうでもない気がしないでもなかった
- 543 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:23:06 ]
- いや、おかしい。気が狂ってると書こうとして
それはあんまりだと思って、上機嫌に変えた、つもりだったのです。
- 544 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:45:24 ]
- >>537
defineも構造体定義も、ヘッダファイルに書く場合は複数のソースファイルに公開する必要がある場合。 ひとつのソースファイルだけで使用するなら、そのソースファイルで定義するのが基本。
- 545 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 01:37:05 ]
- >>530
あたまわるいなぁ、とか言われなかったんだな
- 546 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 01:57:05 ]
- >>539
MFCのマクロは、Cプリプロセッサの究極をいってるな。 いっちゃってるけど。
- 547 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 08:11:39 ]
- 誰かMFCのマクロを見せてくれ
- 548 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 17:30:50 ]
- >>546
いやいや、究極と言えば、Boost.Preprocessorとかメタプログラミングの類。 こんな調子で、演算とかさせるんだぜ。頭がおかしいとしか思えない。 ttp://d.hatena.ne.jp/qnighy/20091107/1257587259 MFCなんてかわいいもんだ。
- 549 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 18:14:49 ]
- Boost.Preprocessor はもう天才的。
プリプロセッサメタプログラミングだぜ? 本当にやりやがった・・・的な衝撃が走る。
- 550 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 18:32:21 ]
- ×天才的
○病的
- 551 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 18:34:03 ]
- メタプロ見てるとなんかもう新しい使いやすい言語でもつくりゃいいのにって思う
- 552 名前:デフォルトの名無しさん [2009/12/26(土) 19:00:45 ]
- 思うね
- 553 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 19:11:58 ]
- すいません。
feofというのは一体何の略なんでしょうか?
- 554 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 19:21:16 ]
- File EOF だと思うよ
EOF は End Of File 細かいことはキニシナイ
- 555 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 19:21:43 ]
- >>553
eof = End Of File FILE *fp を取り扱う関数は、一般に fopen(), fclose(), fseek() のように頭に f がつくので、 f + End Of File = feof() 本当のところは知らないのですけど。
- 556 名前:553 mailto:sage [2009/12/26(土) 19:26:58 ]
- feof end of file 略 でググってみましたらそれっぽいものが見つかりました。
ファイルポインタがEOFに達しているかどうかを調べるんだそうです ttp://www.phpbook.jp/func/file/index3.html ありがとうございました
- 557 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 19:36:57 ]
- 略称の語源じゃなくて用途を調べてたのかよw
- 558 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 22:59:09 ]
- whileとSleepを使わずに
変数の値が変更されたときに自動で関数に飛ぶことって出来ないんですか? atexit()みたいな感じに
- 559 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:00:00 ]
- >>558
環境依存なのでOS等の情報が必要です
- 560 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:02:39 ]
- atexitは自動じゃないよ
- 561 名前:デフォルトの名無しさん [2009/12/26(土) 23:09:56 ]
- if ((flag & BIT1) && (flag & BIT2)) {
これをもう少しスマートにやる方法ないですか?
- 562 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:16:03 ]
- コンパイラに最適化してもらいたい気分だ
- 563 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:22:17 ]
- すいません。
codepad.org/3p4Q55et 本に書いてある内容を要約するとこんな感じになるんですが、 ( !feof( stdin) ) というのは一体何を表しているのでしょうか。 stdinの中身がEOFにならなかったら〜という風に読めるのですが、 stdinとはcfPtrを指しているのでしょうか? stdinでググると標準入力だというようなことが出てくるのですが、 標準にそのままキーボードから打たれたものがEOFになったら〜という意味でいいのでしょうか?
- 564 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:28:05 ]
- >>563
戻り値 feof は,指定したストリーム上の最後の入力操作でファイル終了標識が 検出されると 0 以外の値を返し,ファイル終了標識に達しなければ 0 を返します。 とあるから、標準入力からWindowsならCTRL+Z、Unix系ならCtrl+Dが押される と !演算子によって条件が反転し真になる
- 565 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:28:18 ]
- >>561
ビットフィールドを使う
- 566 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:29:12 ]
- >>563
そうだよ。 ソースに書いてある通り、ctrl-zでEOFが入力される。
- 567 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:29:46 ]
- >>561
それぞれ1bitなら if ((flag & (BIT1|BIT2)) == (BIT1|BIT2))
- 568 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:34:42 ]
- >>564>>566
標準にキーボードから入力していてEOFが検出されなかった場合〜という意味ですね。 ありがとうございました。
- 569 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:37:40 ]
- キーボードとはかぎらないしCtrl-Zともかぎらないがな
- 570 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:42:21 ]
- >>569
すいませんどういう意味でしょうか?
- 571 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:46:41 ]
- >>570
ファイルからリダイレクトとか。
- 572 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:46:47 ]
- >>570
パイプやリダイレクトとか
- 573 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:47:47 ]
- >>570
C言語にはストリームという概念がある。 ここに結び付けられるものは何でも良い。ファイルでも入出力デバイスでもC言語から見れば一緒。 ただ、一般的なPCではディスプレイ、キーボードが付いてるので"デフォルト(標準)"をそこにしてあるだけ。 標準入力がシリアル通信ポートだったり、標準出力がファイルだったりする環境もあるってこと。
- 574 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:53:40 ]
- >>558
あきらめてアクセサメソッドを介して変数を参照するようにしてはいかがでしょうか。
- 575 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:54:09 ]
- DOSやWindowsならCtrl+ZだがUNIX系ならCtrl+Dだったかな
- 576 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:58:10 ]
- >>571->>573>>575
入力できればなんでもいいってことですか、ありがとうございました。
- 577 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 00:00:00 ]
- 何でもいいわけじゃない
何が割り当てられてるかだ
- 578 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 15:46:46 ]
- >>567
その前提条件って必要なの?
- 579 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 16:11:57 ]
- >>567
&&がなくなるから、速くはなりそうな気もするけど、 最適化でチャラになるかもしれないし、読みやすさなら 元のコードのほうがいいと思う。
- 580 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 21:48:47 ]
- main(){
char hello[] = {'h', 'e','l','l','o'}; puts(hello); } 結果がおかしくなります
- 581 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 21:50:48 ]
- char hello[] = {'h', 'e','l','l','o'};
じゃなくて char hello[] = {'h', 'e','l','l','o','\0'};
- 582 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 21:58:22 ]
- >>581
ありがとう、期待する動作になりました。
- 583 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 21:58:27 ]
- もしくは
char hello[] = "hello";
- 584 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 00:10:13 ]
- >>578
例えばBIT1が ((1<<0)|(1<<1)) だった場合 flagの下位2bitがそれぞれ 01,10,11 のどれであっても (flag & BIT1) は非0になるが (flag & BIT1) == BIT1 となるのは、11の場合のみ。 >>579 普通は"(BIT1|BIT2)"をそのまま使うなんてやり方しないよ。 const mask = BIT1 | BIT2; // constじゃなくてdefineだろうがenumだろうが構わんが。 if ((flag & mask) == mask) これを可読性が悪いとか言うならどうかしてる。 元の >if ((flag & BIT1) && (flag & BIT2)) { よりわかりやすいだろうに。
- 585 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 01:03:34 ]
- どっちも特に難解な記述だとは思わないけどさ
(1) if ((flag & mask) == mask) (2) if ((flag & BIT1) && (flag & BIT2)) どうみても(2)の方が分かりやすい
- 586 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 03:31:36 ]
- うーん、どうだろう
個人的には識別子が1個少ない分、(1)の方が読みやすい
- 587 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 03:40:46 ]
- ビット演算には三項演算子を使うべきだと思う
- 588 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 04:30:39 ]
- >>585
どうみても(2)の方が分かりやすいよね! (1) auto hoge_mask=BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8|BIT9; if((flag&hoge_mask)==hoge_mask) (2) if((flag&BIT1) && (flag&BIT2) && (flag&BIT3) && (flag&BIT4) && (flag&BIT5) && (flag&BIT6) && (flag&BIT7) && (flag&BIT8) && (flag&BIT9))
- 589 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 05:52:52 ]
- mask)==mask 部分が冗長に見えるから違和感感じるんDA
!^(flag|^mask) // こうだな
- 590 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 06:29:05 ]
- >>589
ドモルガン使ってこう書いた方が見た目は奇麗。 !(~flag&mask) まぁ~maskは定数になるだろうから>>589と計算量は殆ど同じだろうけど
- 591 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 10:39:41 ]
- ビットビットうるせーよ
- 592 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 10:54:10 ]
- >>591
禿同 可読性云々以前にコメントつければすむ問題
- 593 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 11:02:08 ]
- 今の時代、ビットフラグなんて使わないでフラグごとに変数使うんじゃねーの?
- 594 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 11:38:36 ]
- >>593
時代は関係ないし、それいうならC使う事自体がどうなんだって話に。 移植性考えないならビットフィールドでもいいかも知れん。
- 595 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:14:55 ]
- >>594
ただのフラグならビットフィールドでも移植性は関係無いだろ。
- 596 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:51:33 ]
- 移植性考えるなら、ビットフィールドのほうがいい。
- 597 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:58:56 ]
- やりたいことが
フラグAが立つ、かつ、フラグBが立つ なのか ビットAとビットBの両方がセットされてる なのかで使いわけろよ フラグの実装がビットだからビット演算使うのは短絡的
- 598 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 13:00:28 ]
- 移植性考えるならドトネトのほうがいい
- 599 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 13:56:28 ]
- 上位ビット/下位ビットのどっちから割り振られるかが処理系次第な
ビットフィールド使うくらいなら、_Bool 使えばいいのに。
- 600 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 14:07:42 ]
- ビットフィールド云々は置いといて、
ビット演算についてだけ言えば if (value & 0x0001) 奇数かどうか、を見るこれだけでも ビット演算はコメントを必ず入れるべきと思う。
- 601 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 14:11:17 ]
- >>599
> 上位ビット/下位ビットのどっちから割り振られるかが処理系次第な どんなもん、どっちでもいいだろ。
- 602 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 14:11:21 ]
- 思わない
- 603 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 14:11:28 ]
- ビットビットうるせーよ
- 604 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 14:12:30 ]
- 思う気がする
- 605 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 14:22:14 ]
- コメントよりマクロの方がいいだろ
if(IS_ODD(value))
- 606 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 14:23:20 ]
- ♪ひ〜とびと〜のビットビット〜
- 607 名前:デフォルトの名無しさん [2009/12/28(月) 14:40:05 ]
- ビット命
- 608 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 15:02:13 ]
- >>602
どっちでもいいだろ。 問題になるのはハードにマップされてるとかそういう時だけで、フラグで使ってるだけならメモリの配置は関係ない。
- 609 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:40:37 ]
- どっちでもいいね
- 610 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:06:00 ]
- いいんじゃないかな。どっちでも
- 611 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:20:29 ]
- 1bit毎のビットフィールドならエンディアンの影響は受けないでしょ。
- 612 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:30:26 ]
- ビットビットうるせーよ
- 613 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 19:37:07 ]
- Cのスレだから仕方ないだろjk
- 614 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 19:57:03 ]
- ある整数の最上位の1であるビットが何桁目かを計算したいんだけど一発で計算剃る方法ってある?
ビット数分だけ判定繰り返すしかないかな
- 615 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:15:24 ]
- あっぱれビット天国〜
- 616 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:05:18 ]
- >>614
どんな方法があるのか教えてくれたら教えるお(´・ω・`)クフゥ
|

|