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


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

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

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

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

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

>>1 乙です

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

4:デフォルトの名無しさん
07/09/03 01:20:47
>>3
30過ぎると普通だよそれ

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

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

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

7:デフォルトの名無しさん
07/09/03 20:26:12
前スレの965です

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

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

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

9:デフォルトの名無しさん
07/09/03 21:10:19
BCB6のメンバ関数ポインタは12バイト。参考までに。

10:デフォルトの名無しさん
07/09/03 21:42:35
ありがとう!

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

12:デフォルトの名無しさん
07/09/03 22:54:45
アドレスとは定義されてない

13:デフォルトの名無しさん
07/09/03 23:05:49
C++3rd 15.5「メンバポインタ」の項を読むといい。

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

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

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

15:デフォルトの名無しさん
07/09/03 23:22:59
14はもちろん例えばの話ね。

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

17:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/04 10:47:52
>>17
URLリンク(msdn2.microsoft.com)

19:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/04 10:57:10
あ、そのとおりってことはないな。
19に書いたとおり、32ビットOSでの警告は現在の実装(ヘッダ)の問題と
思われるので、その警告は無視してよい、かな。


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

22:デフォルトの名無しさん
07/09/04 22:13:18
テンプレート  引数

ひきすう いんすう

hikisuu innsuu

hikky

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

じゃダメなん?

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

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

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

26:デフォルトの名無しさん
07/09/04 23:30:37
コンパイラマジックです。

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

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

28:デフォルトの名無しさん
07/09/04 23:34:35
定義されていなければ使えない
使える→どこかで定義されている
探せ

29:デフォルトの名無しさん
07/09/05 00:25:42
すみません

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

30:デフォルトの名無しさん
07/09/05 00:29:58
>>29
出来る。
あたりまえだろ。

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

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

2.5 - Can I use Winsock with { My Favorite Language }?
URLリンク(tangentsoft.net)

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

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


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch