[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 05/27 13:31 / Filesize : 9 KB / Number-of Response : 34
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



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


2 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:17:26 ]
みんなのCの勉強法は?っていうFAQの続きで新スレスタート

はじめは、書きたいように書けばいいんだよ
それより、まず1行、書き始めようや

昨年書いた自分のコードを、今の自分ならイチから書き直したくなる
そんな気持ちにすらなる アマチュアなら、それでいいのではないかと

処理系を聞いてるくらいだから、まずコンパイラセットアップからはじめようや
VCExpressでもいいよ 他言語経験者なら、まずhello world 通すことからはじめようや

プロ(ルーキー)なら、先輩に聞け 聞ける先輩がいないなら、そんな先輩を探せ

>>1 乙です

3 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:20:14 ]
1年前のコードを見て自分が確実に劣化しているのを感じたんだが、
同じように感じる人って少ないのかな?

4 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:20:47 ]
>>3
30過ぎると普通だよそれ

5 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:23:11 ]
sfのコードは美しいばかりではない
玉石混交なのはもちろん、動くことを優先に、意図的にやっつけコード書いてることもある
コメントも読んで、書いた人の心理まで読んで欲しい

>>3
あるある、今の自分の鈍り具合を見て萎える
昨年のほうがましだったってね 正直なにくそだ

6 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:55:21 ]
void*型にメンバポインタはやっぱりどうしても入らないの?
代わりにどんなメンバポインタでも入る型は存在しないの?

7 名前:デフォルトの名無しさん [2007/09/03(月) 20:26:12 ]
前スレの965です

971さんの言う通りqのシグナルを送ってみたいと考えていました

いろいろありがとうございます
system使わないで実装がんばります(´・ω・`)ゞ

8 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:40:52 ]
>>6
そもそも変数のサイズが違うことがあるからねえ。
メンバポインタへのポインタなら入るyp

9 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 21:10:19 ]
BCB6のメンバ関数ポインタは12バイト。参考までに。

10 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 21:42:35 ]
ありがとう!



11 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:50:03 ]
>>9
ポぃンタってアドレスの入る箱でしょ.アドレス格納箱って32bitOSだと4バイトじゃないの?
それが、12バイトなんて信じられないぞなもし....なんで肥ったの????

12 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:54:45 ]
アドレスとは定義されてない

13 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:05:49 ]
C++3rd 15.5「メンバポインタ」の項を読むといい。

「メンバポインタは、変数ポインタや関数ポインタとは異なり、メモリの位置を指すポインタではない。
メンバポインタは、ポインタというよりも構造体オフセット、配列の添え字に近い。」

14 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:22:19 ]
メンバ関数へのポインタは、
非仮想関数の場合アドレスを、
仮想関数の場合vtblのオフセットを保持するようになっている。

もちろんどっちを保持しているかのフラグも要るし、
多重継承などで複数のvtblがある場合も考えなければいけないし、
そうしてぶくぶくふくれていく。

15 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:22:59 ]
14はもちろん例えばの話ね。

16 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 03:07:04 ]
>>13のは、主にメンバ変数へのポインタの話。
>>9のは、独自拡張のいわゆる__closureの影響。

17 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 10:28:56 ]
WinAPIの話なんですが、C/C++の型についてなので、ここで質問させてもらいます。

LPARAMの値lpを
SetWindowLongPtr(wnd, DWLP_USER, lp);
として設定すると、「LPARAMからLONGへの変換。データが失われる可能性がある」と出てきます。
LPARAMもLONGも、元をたどれば同じlongなので、データが変わることはないと思ったんですが…

また、hoge *h; ていうクラスのポインタがあって、
h = reinterpret_cast<hoge *>(GetWindowLongPtr(wnd, DWLP_USER));
とすると、「LONGからより大きいサイズの hoge * へ変換します」と出てきます。

↑2つとも、自分の環境だと自分の期待通り動いてるんですが、
64ビット環境とか、他の環境だと動かない可能性があると言うことでしょうか。

# そもそも、SetWindowLongPtrの第3引数や、GetWindowLongPtrの戻り値の型はLONG_PTRだと、
 MSDNライブラリに書いてあるんですが、なぜLONGなのだろう…

18 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 10:47:52 ]
>>17
msdn2.microsoft.com/en-us/library/aa383751.aspx

19 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 10:52:00 ]
>>17
>64ビット環境とか、他の環境だと動かない可能性があると言うことでしょうか。
そのとおり。
ただし、32ビットOSでは現在でもSetWindowLongPtrはSetWindowLongの別名として
マクロ定義されているだけなので、MSDNでは第3パラメタがLONG_PTRになっているが、
ヘッダの宣言ではSetWindowLongと同じLONGのままの扱い。
そのために警告として表示されると思われる。

>なぜLONGなのだろう…
WindowsAPIは当初から64ビット対応されてたわけではない。
以前はポインタやハンドルをLONGやDWORDで扱っている箇所があった。
64ビット対応したとき、単純にいままでLONGだった箇所はLONG_PTRに、
DWORDだった箇所はDWORD_PTRに変更したと思われ。

20 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 10:57:10 ]
あ、そのとおりってことはないな。
19に書いたとおり、32ビットOSでの警告は現在の実装(ヘッダ)の問題と
思われるので、その警告は無視してよい、かな。




21 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:10:11 ]
boost::function<bool (int, int)>;
このテンプレート部分はどうやって取得すればいいんでしょうか。
ああああああああああああああああああああああああ

22 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:13:18 ]
テンプレート  引数

ひきすう いんすう

hikisuu innsuu

hikky

23 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:21:34 ]
>>21
template<class T>
void func(boost::function<T> &f) { ... }

じゃダメなん?

24 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:32:31 ]
type1 (type2, type3, type4 .......)
からどうやって、 type1 type2 type3 type4 をそれぞれ得るか?

25 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:28:43 ]
「sizeof演算子は、size_t型の整数値を返す」と習いましたが、size_t型はC/C++の予約語ではなく、
どこかのヘッダファイル(VC2005だとcrtdefs.hにありました)にtypedefされている型だと思うんですが…。
でも「何も」includeしなくてもsizeof演算子は使える…。
というかsize_tも使える…。なんでsize_tが定義されてないのに使えるのでしょうか。コンパイラマジック?

こんなこと気にしてたら禿げますかね

26 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:30:37 ]
コンパイラマジックです。

27 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:33:28 ]
>>25
sizeofは、コンパイラがsize_tのtypedef元として
使うであろう整数型を結果とするということ。

コンパイラとライブラリは、全くの別物が
無関係に作るということが(おそらく)ないので、
これでうまくいくはず。

28 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:34:35 ]
定義されていなければ使えない
使える→どこかで定義されている
探せ

29 名前:デフォルトの名無しさん [2007/09/05(水) 00:25:42 ]
すみません

C言語でSocketを用いて通信する場合は
サーバー・クライアント両方とも
C言語で設計されていなくとも通信できるのですか?

30 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:29:58 ]
>>29
出来る。
あたりまえだろ。



31 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:32:02 ]
>>29
まったく問題ない
極端にいえば、アセンブラでソケットライブラリ叩いても結構
一見ばかばかしいとも思えるけど、FAQらしいのでマジレス

32 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:37:38 ]
せっかくなので、前見たなーってのを探してきた
たぶん、こういうニュアンスもあるんじゃないかと思う

2.5 - Can I use Winsock with { My Favorite Language }?
tangentsoft.net/wskfaq/newbie.html#langcompat

33 名前:デフォルトの名無しさん [2007/09/05(水) 01:03:39 ]
Cで16進数の FFC8D6 という値があったとして
それぞれ FF と C8 と D6 を取り出したいんですが
どうすればいいんですか?

何となくシフトすれば良いって気もしないでもないんですが・・・






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

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

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