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++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
513 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 02:27:34 ] >>512 深夜にありがとうございます! 仮引数になっていないのが原因だったってことでしょうか? Nを小文字のnに変えてもみたのですが、今度は report5.c : In function `sort': report5.c : 9 : error : 'x' redeclared as different kind of symbol report5.c : 7 : error : previous definition of 'x' was here と出てしまいました… ググってみるとxが衝突してるとのことですが、関数部とデータ入出力部の両方でxを使用しても問題ないはずですよね?
514 名前:511 mailto:sage [2009/12/24(木) 02:39:11 ] 連投すみません! 自己解決しました どうやら7行目と9行目の両方で変数xを定義していたのが問題だったようで… >>512 様ありがとうございました
515 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:57:05 ] 食ったー 満足じゃー
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