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


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

【初心者歓迎】C/C++室 Ver.36【環境依存OK】



1 名前:デフォルトの名無しさん [2007/04/01(日) 23:01:13 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.35【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1171888583/l50
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm


552 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 11:33:55 ]
漏れは毎回毎回、menset か setmen で悩む

553 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 11:46:24 ]
構造体の初期化は
HOGE hoge = {0};がデフォ

554 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 11:54:00 ]
>>552
メーン、memはmenじゃないぜ〜

555 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:11:11 ]
要するに、アレだよな。

C言語コーダが
Hoge h = { 0 };
可能かどうかは自分で判断できるし、
作った時点では問題ないよな。

人様が作った構造体や、自作の構造体でもバカの一つ覚えで
memsetしちゃうのは問題アリじゃね。WinAPIで指定してる場合はともかく。

>>513 が言うように、個別の初期化は多少の手間は増えるけど
安全だし、それでいいと思うけどなあ。

#C++だって、わざわざ初期化リストを設けてるし(C++ならstructでも使えるよ)

556 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:13:03 ]
>>552 setmenって、男にナニをセットするんだ?
気になって気になって今日は良く寝れそうだ。

557 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:57:38 ]
setmenは男に何かをセットするんじゃなくて「セットする男達」だろ
常識的に考えて・・・

558 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 13:02:20 ]
YO! MEN!
いや、setmen は男を何かにセットする関数だろ
常識的に考えて・・・

559 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 13:10:18 ]
男の部分を何かにセットするわけか

エロいな

560 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 13:10:38 ]
>>551
そうしてたけど、最近の VC++ は警告出すから困る。
#pragma で抑制できるけど。

>>552
strcpy, strcat, strchr とか文字列に関するものは str が接頭辞になってる。
同じく、memset, memcpy, memmove とかメモリに関するものは mem が接頭辞になってる。
悩む必要性は無い。



561 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 13:35:11 ]
頻繁に使う構造体なら継承してコンストラクタ定義してしまえってじっちゃんが

562 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 13:44:51 ]
レガシーAPIに渡せないだろ

563 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 13:49:12 ]
こっちで変数定義したものを向こうへ渡すのなら、
アップキャスト(ポインタ・参照渡し)・スライシング(値渡し)が起こるだけで、
言語規格上問題ないだろ。

向こうでオブジェクトが作成され、自分はそれへのポインタを受け取るという場合に
派生クラスへのポインタで受けたら、言語規格上未定義にはなるだろうけどさ。

564 名前:552 mailto:sage [2007/04/22(日) 15:30:50 ]
>>560
そうなのか、memが初めなのか

脳内では、セット麺、麺セット、麺コピーって変換してた

565 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 16:13:33 ]
>>562
VC++ の CRect は RECT を継承したクラスなんだぜ。
でも、レガシーAPIに渡せるだろ?
仮想関数がないからな。

566 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 16:25:18 ]
>>565
仮装関数は関係ないだろ

567 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 16:25:32 ]
>>565
ちゃうちゃう。
CRectはRECTを継承してない。内部の最初に保持してるだけ。
is-aじゃなくてhas-aの関係
同様の方法でWinAPI32に引き渡せるMFCクラスあるでよ。

568 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 16:27:37 ]
>>567
CRectはRECTを継承しているよ

569 名前:567 mailto:sage [2007/04/22(日) 16:29:52 ]
>>565
ああ、ゴメン俺のまちがいだった。RECTの継承でよかったわ。

570 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 17:34:42 ]
レガシーAPIに渡せるってわざわざ自分で&付けてるのかよwwww
変換演算子あるんだから使えよカスwwwwww



571 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:06:24 ]
( ´д)ヒソ(´д`)ヒソ(д` )

572 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:06:58 ]
>>566
ああ、そうだ。関係なかった。すまん。

573 名前:デフォルトの名無しさん [2007/04/22(日) 18:24:12 ]
構造体をmallocしたときは初期化はどうしたらいい?
1.気にせずmemset
2.最近のmallocはゼロクリア保障なのでそれを信じる
3.地味に全部真面目に設定

574 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:32:22 ]
>>573
Cなんだよな。
1.自作の構造体で間違いないのならおk
2.保証されてるかどうかちゃんとCユーザーズマニュアルを見れ
3.一番安全

575 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:32:32 ]
一方ロシアはcallocを使った

576 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:32:57 ]
> 最近のmallocはゼロクリア保障
大嘘を付くな

577 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:41:35 ]
>>576
え、いや、ウソじゃないです。ごめんなさい。うそじゃないです。

578 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:55:40 ]
>>573
>最近のmallocはゼロクリア保障なのでそれを信じる
ってホントなの?どういう環境での話?

main() {
    for(;;) {
        struct { int i; } *s = malloc(sizeof *s);
        assert(s->i == 0);
    }
}

すぐに死ぬけど

579 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 19:05:37 ]
0 クリア保証してるのは calloc だろ。

580 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:38:22 ]
VC++2005で見た限りはvirtual関数があるとサイズが増えてるね。
#include <stdio.h>
struct TEST1 { int x; int y; };
struct TEST2 { int x; int y; void setXY(int x, int y) { this->x = x; this->y = y; }};
struct TEST3 { int x; int y; virtual void setXY(int x, int y) { this->x = x; this->y = y; }};
int main() { printf("%d %d %d\n", sizeof(TEST1), sizeof(TEST2), sizeof(TEST3));  return 0; }
結果
8 8 12




581 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 21:05:10 ]
>580
だから?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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