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 を取り出したいんですが
どうすればいいんですか?
何となくシフトすれば良いって気もしないでもないんですが・・・