[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 23:32 / Filesize : 137 KB / Number-of Response : 653
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 58



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++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

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
どんな方法があるのか教えてくれたら教えるお(´・ω・`)クフゥ

617 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:10:45 ]
一発じゃないけど
最上位ビットの位置が記された256個のテーブルを使う

618 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:13:18 ]
log をとるとかw

619 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:27:10 ]
人間の性能を表現するには何ビットあればいいですか?

620 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:33:57 ]
冬休みか



621 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:52:03 ]
どうしたの?君たち
警戒心起たせちゃって

622 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 23:00:34 ]
>>614
他人に作らせるのがもっとも賢い方法






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<137KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef