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


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

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



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


129 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:31:10 ]
ループ中の計算をシフトとビット演算で置き換えると
乗除の演算なしで掛け算が出来るなぁ…、なんて。

130 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:33:33 ]
燦然と輝くvoid main(void)

131 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:37:32 ]
>>128
小学校で習った掛け算の筆算を二進数でやってるようなもんだ

132 名前:128 mailto:sage [2007/11/06(火) 19:40:53 ]
>>129 こういうことですか?

while(a != 0){
if(a%2 == 1) prod +=b;
a=a >> 1 /* a=a/2 */
b=b << 1 /* b=2*b */
}


133 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 20:28:03 ]
>>129
そこはコンパイラの最適化に期待ということでは?
もっとも、これくらいならC/C++でもシフト使えということは同意。

134 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 22:35:19 ]
というか、そこで*を使ってしまうと、
「じゃあ(a*b)でよくね」みたいな話になるから(w

135 名前:デフォルトの名無しさん [2007/11/07(水) 19:47:22 ]
class hoge : public base
{
private:
base* m_base;
};

これって循環ですか?

136 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:25:07 ]
開発中によく見る記述ですが何か心配なことでも?

137 名前:デフォルトの名無しさん [2007/11/07(水) 20:58:33 ]
循環なら避けたいんですが、
循環ですか?

hogeの定義にbaseが必要で
でもhogeはbaseを持ってるので
なんか循環っぽいなぁと。



138 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:13:18 ]
ならお前の避けたい循環の意味をちゃんと書けやタコが

139 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:16:02 ]
知ってる人に聞ければいいです。
そもそも知らない人は
自分が知らないのに人に教えられるわけがないでしょう。

140 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:18:34 ]
それじゃ、誰にも答えられないね。

141 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:20:44 ]
>>140
全知全能の神光臨。

142 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:29:49 ]
循環じゃないよ

143 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:30:14 ]
とりあえず循環参照が起こる可能性は充分すぎるほどに有るわな。
ただ場合によるので、具体的にやりたいことを示してくれないと問題点の指摘は出来ん。

144 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:33:34 ]
baseの定義にhogeを必要としてたら循環定義

145 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:35:38 ]
循環ってのは
class sage の宣言に class age を使ってて
class age の宣言に class sage を使ってる場合。

よって循環ではないべ?

146 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:36:24 ]
>>135
普通に連結リストかなんかでありそうな気がするが

147 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:38:30 ]
>>140の立場wwwwww



148 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:43:03 ]
で、結局どっちの意味で循環って言ってるのよ?>>135は。

149 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:43:04 ]
>>135
あほすぎ

150 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:55:38 ]
>>149 = 顔をつぶされた>>140

151 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:08:21 ]
>>150
はずれ

152 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:19:11 ]
>>135
エスパーがいない可能性を考えないのか?

153 名前:wolf ◆8VH3XAqjlU mailto:sage [2007/11/07(水) 23:08:13 ]
>>135
base<---hogeで循環は存在しないけど
m_base = new する第3のクラスを含めた循環に注意です

154 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:11:41 ]
で、結局誰もまともに答えられないんですね。がっかりしました。

155 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:51:46 ]
>>154
>>153

156 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:59:52 ]
それはもう読みましたよ。

157 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 10:37:40 ]
>>156
お仕事頑張ってくださいね



158 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 10:38:57 ]
なるほど循環参照の事か

159 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 11:07:44 ]
>>154
聞いてる時点でお前はそれ以下じゃんw

160 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 11:28:52 ]
>>158

>>137読めば分かるだろ。

161 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:06:16 ]
>>159
それはつまり、回答者と質問者の理解度を対等に比較するのが
あなたにとっては「自然」である、ということですよね?
でもそれって、教師の知識が怪しい、という話をしている時に「生徒はそれ以下じゃんw」と
返すようなものですね。
こっちは、そういうレベルの人間が、知識を持っているという嘘をついて「教壇に立」って、
誰かに物を教えるのが間違いである、という点を言っているんですよ。
そういうレベルの人に回答者になってもらっては困るんです。質問者も、場も、混乱するだけなので。

確かに理解度は俺のほうが下です。
でも、あなた方も俺と同じ、質問者レベルなんです。回答者気取りをされると邪魔なのです。
そういうことです。

162 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:10:41 ]
社会性の無いキチガイが紛れ込んでますね

163 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:15:12 ]
>>161
何を聞きたいのか分かりません

実体の循環参照ならコンパイルできないので安心して下さい
ポインタを使う限り循環参照になる可能性は常にあります
諦めて下さい

164 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:28:37 ]
プログラムの勉強に飽きたら2,3日何もしないとかいう人いる?

165 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:31:58 ]
>>161
がっかりするとは俺もお前にがっかりだ

166 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:32:03 ]
勉強つーか趣味のコーディングではよくある。一週間以上になることもしばしば。

167 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:15:41 ]
リアルで >>161 は空気読めない人って
周りから言われるんじゃね?

教師は仕事で金もらって教えてるわけだが、
ここは2chだしなー
質問者はこうあるべき!
回答者はこうあるべき!
とか真面目に言われてもなー

郷に入れば郷に従えっていうから、
説教長文書くより、どうすれば
2chで回答を得られる可能性が高くなるのか?
を考えたほうが現実的。

妥協できないなら、ネットで質問なんてするな。
第三者からみれば、あんたが荒らしだから。




168 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:35:28 ]
釣られすぎ。

169 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:58:31 ]
>>162
まったくです。困ったものですね。
人に何かを教える立場というのは、自己顕示欲の異常に強い人達にとっては
魅力的なものなのでしょうね。だからそのスキルも無いのに気取りたがるのでしょう。

>>165
がっかりする分には好きなだけがっかりしてもいいですよ。
能もないのにでしゃばったりしないこと、これを学習することのほうが大切です。

>>167
「ここは2chだし理論」で物を言う人は、相手の言い分にもきちんとそれを適用して、
ここは2chなのだから説教なんかしてもしょうがない、という風に思い至るべきですよ。
ある理屈を、ある側にだけ適用するのはおかしな言動だと言わざるを得ません。
それから、「2chで回答を得られる可能性」は、この場合関係ありません。
回答者が回答できるレベルにあれば、それで解決していたことなので。
あと、第三者というのを一つの意志のように語るのは気持ち悪すぎです。
あっちの第三者と向こうの第三者は、異なる意識を持っているのです。
架空のみんなが自分を支持する夢から出て、自分の名義で物を言いましょう。

170 名前:167 mailto:sage [2007/11/08(木) 18:14:58 ]
うわーすごいな
だから空気読めといっとろうが

質問してみた

バカにされた

マジ反論 ←いまここ

まともな回答もついてるんだからさ
それでいいじゃん?
これ以上何を望んでるの?


171 名前:167 mailto:sage [2007/11/08(木) 18:16:16 ]
釣りなら見事に釣られたわけだがな>俺

172 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 18:37:21 ]
釣りでしょ。少なくとも>154は漏れだし。

173 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 19:19:35 ]
>>170
ダメ回答者達が維持したがっているダメな空気は、読んだ上で否定しています。
そんな種類の空気に支配的になられては困るので。

174 名前:173 mailto:sage [2007/11/08(木) 19:32:48 ]
ごめん釣りでした。

175 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 19:34:54 ]
ダメ回答者をバッタバッタと取り締まってくれる
救世主が登場


176 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 19:45:20 ]
>>138 = >>140
がメンツをつぶされた挙句暴れている模様。

177 名前:140 mailto:sage [2007/11/08(木) 20:33:36 ]
ちゅがうよ



178 名前:デフォルトの名無しさん [2007/11/08(木) 23:26:50 ]
スレッドで、void* で渡した引数をclassに変換したいのですがキャスト出来ないと言われます
2つ以上の引数をスレッドに渡すにはどうすればいいですか?

179 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 23:44:35 ]
classじゃなくて、classへのポインタにキャストしてみればどーか?

void func(void *arg)
{
((hogeclass *)arg)->func();
}


180 名前:デフォルトの名無しさん [2007/11/08(木) 23:49:05 ]
サンクスやってみます

181 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 23:50:40 ]
って、まさか本当に
HogeClass hoge = (HogeClass) threadArg;
 なんて記述をしてるんじゃ…。

182 名前:デフォルトの名無しさん [2007/11/08(木) 23:59:34 ]
キャストしたvoid型ポインタのarg引数のポインタの元の型
が適切な物なら良いけど、もしそうじゃないなら怖いな

183 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 00:12:57 ]
俺はその辺が気持ち悪くなってboost::threadに逃げた。

184 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 04:19:15 ]
空気読めて無い人って本当に空気読めてると思ってるんだ・・・
リアルでは出会えない珍獣を見た

185 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 05:51:13 ]
>>184
とっくにスレの流れ変わってるんだから、空気読めよ。

186 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 06:34:46 ]
違うんだ・・!>>184の空気を読めなくしたのは・・・本当は・・漏れなんだ・・・!

187 名前:デフォルトの名無しさん [2007/11/09(金) 10:24:19 ]
ビット列の出現個数を数えたいのですが毎回結果が違います 何ででしょうか?
#include <iostream>
#include <windows.h>
#include <process.h>
using namespace std;
#define N 1000
#define K 320000
unsigned int su[256];

unsigned WINAPI open(void *p){
unsigned long size; char *buf=new char [K+100];
HANDLE fp=CreateFile((char*)p,GENERIC_READ,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
ReadFile(fp,buf,K,&size,NULL);
for(int i=0;i<size;i++)su[ (unsigned char)buf[i] ]++;}

main(){
WIN32_FIND_DATA fd;
char path[200]="d:\\aaa\\",serchpath[200];
strcpy(serchpath, path); strcat(serchpath, "*");
SetCurrentDirectory(path);

HANDLE hd = FindFirstFile(serchpath, &fd);
int n; HANDLE hf[N];
for(n=0;n<256;n++)su[n]=0;
for(n=0;;n++){
for(;;){if(!FindNextFile(hd, &fd))goto end;
if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))break;}
hf[n]=(HANDLE)_beginthreadex(NULL, 0, open,(void*)fd.cFileName, 0 ,NULL);}

WaitForMultipleObjects(N, hf, TRUE, INFINITE);
end:
for(n=0;n<256;n++)cout<<n<<" no kosu "<<su[n]<<endl;}



188 名前:デフォルトの名無しさん [2007/11/09(金) 10:27:39 ]
su配列にマルチスレッドでアクセスしているところが駄目なんでしようか?

189 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:39:10 ]
>>187
・同一メモリに複数スレッドから同時にアクセスしているから
・serchpathなんてへんな変数名だから
・thread内でnewしているのに解放していないから
・高々Kバイトしか読み込まないのに100バイトも余計に確保しているから
・変数nを違う目的に使い回しているから
・コーディングスタイルが変態だから
・ハンドル変数にfpなんて名前を使っているから
・どっかWinAPIと思しき辺りの使い方が間違っているから
・毎回ディレクトリの状態が違うから
・毎回ファイルの内容が違うから
どれだろね。

190 名前:デフォルトの名無しさん [2007/11/09(金) 10:47:50 ]
正解はなんなんですか?

191 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:56:48 ]
>>190
1つずつ問題がないかどうか確認するんだ


192 名前:デフォルトの名無しさん [2007/11/09(金) 10:58:06 ]
これでも値が違います なぜでしょうか
#include <iostream>
#include <windows.h>
#include <process.h>
using namespace std;
#define N 200
#define K 16
unsigned int su[K];

unsigned WINAPI f(void *p){
int n=(int)p;
for(int i=0;i<n*n;i++)su[i%K]++;}

main(){
int n;
for(n=0;n<K;n++)su[n]=0;
HANDLE hf[N];
for(n=0;n<N;n++){
hf[n]=(HANDLE)_beginthreadex(NULL, 0, f,(void*)n, 0 ,NULL);}
end:
WaitForMultipleObjects(N, hf, TRUE, INFINITE);
for(n=0;n<K;n++)cout<<n<<" no kosu "<<su[n]<<endl;}

193 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:01:05 ]
>>192
馬鹿だから。

194 名前:デフォルトの名無しさん [2007/11/09(金) 11:03:41 ]
192よりこっちのほうがたんじゅんかとおもいます どこが駄目なんでしょうか 
#include <iostream>
#include <windows.h>
#include <process.h>
using namespace std;
#define N 200
#define K 12
unsigned int su[K];

unsigned WINAPI f(void *p){for(int i=0;i<(int)p;i++)su[i%K]++;}

main(){
int n; for(n=0;n<K;n++)su[n]=0;
HANDLE hf[N];
for(n=0;n<N;n++){hf[n]=(HANDLE)_beginthreadex(NULL, 0, f,(void*)n, 0 ,NULL);}
WaitForMultipleObjects(N, hf, TRUE, INFINITE);
for(n=0;n<K;n++)cout<<n<<" no kosu "<<su[n]<<endl;}

195 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:09:00 ]
書き手が駄目なんだろう。

196 名前:デフォルトの名無しさん [2007/11/09(金) 11:12:06 ]
こうしんされた値が、別のスレッドで更新されてしまうからですかね?
メモリがFDくらい動作がのろいとするとsu[・]の値を呼び出して
1を足して書き戻すときに、同時に呼び出して計算していた値で置き換えられると言うことです

197 名前:189 mailto:sage [2007/11/09(金) 11:16:26 ]
ちゃんと最初に指摘しているのに……(TT



198 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:18:14 ]
カワイソス

199 名前:デフォルトの名無しさん [2007/11/09(金) 11:20:38 ]
これと同じ事ですね 速くする為にスレッドにしたいのに排他制御入れたら鈍くなりますね

クリティカルセクション


ウェブページの来訪者数を表すカウンタのプログラムを例にとって説明する。カウンターのプログラムはおおまかに次の処理からなる。
ディスク等の記憶装置から現在のカウンタの値を読み出す
カウンタの値を1増やす
カウンタの値を記憶装置に書き戻す
ttp://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AB%E3%83%AB%E3%82%BB%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

200 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:24:24 ]
配列の要素を LONG volatile にしてInterlockedIncrement。

201 名前:187 [2007/11/09(金) 11:33:53 ]
いいこと思いついた スレッド側でビット列の個数を数えて、その個数を配列で返してメイン側で足しあわせる
これなら時間のかかる部分はスレッドでやってあるから高速のはず

202 名前:デフォルトの名無しさん [2007/11/09(金) 12:39:04 ]
環境:WindowsXP VS2005 SP1 MFCアプリケーション ダイアログベース

ある市販のDLL(libも付いてたので「追加の依存ファイルに指定済み」)の外部関数をコールするたびに、以下のようなメッセージが出力ウィンドウにでます。

HOGE.EXEの0x7c812a5bで初回の例外が発生しました:Microsoft C++の例外: std::runtime_error (メモリの場所 0x0012f16c)

0x7c812a5bでググるといくつかヒットしましたが、原因特定できず。
仕方ないので関数コールをtry catchでくくってもcatchできず。
_try _exceptでも受けれず。

このエラーはどうやったら出なくなるでしょうか?

203 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:40:31 ]
非同期処理じゃなくて高速化が目的なのかヨ。

よく知らねぇんだが、デュアルコアとは言え
プロセスでもない単なるスレッドでOSがマルチな処理してくれるんか?
シングルコアな動きするなら、ディスパッチするだけでむしろ遅くなりそうなんだが。

204 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:42:39 ]
ゆとり教育がどうこう言われてるけど、194はもっとソースにゆとりを持たせるべき
変態と言われてもそのままってことは真性のMなんだろうか

205 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:45:39 ]
>>203
しかも、実態はディスクアクセスで律速されるから(同じディスク上のファイルを調べる限り)殆ど速くなる余地がない罠。

206 名前:202 [2007/11/09(金) 12:47:30 ]
書き忘れましたが、出力ウィンドウに表示が出るだけで、
動作には影響は今のところありません。
あと、その市販のDLLに付いてきたMFCのサンプルプロジェクトで試しても同じエラーが出力ウィンドウに出ます。

207 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 14:46:34 ]
その市販DLLの名前も書かんということはエスパー希望か。



208 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 15:54:58 ]
const.cpp
1 #include <iostream>
2
3 void extfunc(const int &val)
4 { std::cout << val << std::endl; }
5
6 class A
7 {
8 static const int CONSTDATA = 0x100;
9 public:
10 void func()
11 { extfunc(CONSTDATA); }
12 };
13
14 int
15 main()
16 {
17 A a;
18 a.func();
19 return 0;
20 }

$ g++ --version
g++ (GCC) 4.2.3 20071014 (prerelease) (Debian 4.2.2-3)
$ g++ const.cpp
/tmp/ccN8OXMd.o: In function `A::func()':
const.cpp:(.text._ZN1A4funcEv[A::func()]+0x9): undefined reference to `A::CONSTDATA'

うーん・・・コンストメンバ変数って、参照で受ける事が出来ないんでしょうか?
extfunc(int(CONSTDATA)); とすれば通りますがなんか・・・

209 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 15:59:37 ]
メーカーに電話。

210 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 16:19:18 ]
>>208
定義が無いから賢いコンパイラなら定数データの領域は確保しないらしいね
(なので当然シンボルもない)
by メイヤーズ

定義してみなよ

const int A::CONSTDATA;

211 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 16:41:20 ]
>>203
187の場合で効果があるかどうかは別として、少なくともWindowsでは、
マルチスレッドでも複数の論理CPUを使ってくれる。

212 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 16:46:47 ]
Linuxにとっては、スレッドはプロセスと基本的には同じ。
従って、特定のスレッドがどのコアで実行されるかは
原則的にカーネルにゆだねられる。

213 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 17:07:17 ]
>>210
なんと・・・

6 class A
7 {
8 static const int CONSTDATA;
9 public:
10 void func()
11 { extfunc(CONSTDATA); }
12 };
13
14 const int A:CONSTDATA = 0x100;

でOKでした,#defineしちゃいそうだけどここは我慢・・・
サンクスです

214 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:00:56 ]
>>213
初期値の指定はクラス定義内でいいんだぜ。そうしないと配列要素数とかの
定数式につかえない。

>>210
クラスのメンバ変数は定義しない限り実体がなくて、参照やポインタを取ろうとすると
エラーになることは決まっている。整数型に限って初期値をクラス定義内に書けて、
書けば定数式に使えるという特別ルール。

215 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:03:41 ]
>>206
DLL 内で throw されて DLL 内で catch されてるんでしょ。何も問題ない。

216 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:33:03 ]
暗号アルゴリズムを勉強しはじめたところなのですが、
DES や AES など、一般的な暗号方式のライブラリはありませんか?
C でも C++ でもいいです。

ご存知のかた、もしくは自作モノを持っているかた、情報をお願いします。

;; できれば SHA-1 や base64 まで対応していると嬉しいですが、
;; 無くても構いません。



217 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:39:48 ]
勉強なら自分で作れ。ライブラリを使えるようになっても勉強にならないぞ
あとSHA-1やbase64は暗号じゃない



218 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:58:37 ]
>>216
opensslとかか?
まぁでも>>217に1票

219 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:07:12 ]
>>214
だからEffectiveC++に載っていると。。

220 名前:203 mailto:sage [2007/11/10(土) 01:21:43 ]
>>211-212
情報サンクス。
良く知らんことしゃべってすまんかった。

221 名前:187 スレッド出来ました [2007/11/10(土) 03:02:08 ]
#include <iostream>
#include <windows.h>
#include <process.h>
using namespace std;
#define N 100
#define K 320000
unsigned int su[N][256]; char fname[N][256],chk[N];

unsigned WINAPI open(void *p){
unsigned long size,n=(int)p; char *buf=new char [K+100];
HANDLE fp=CreateFile(fname[n],GENERIC_READ,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
while(1){ ReadFile(fp,buf,K,&size,NULL); if(size==0){chk[n]=0;return 0;}
for(int i=0;i<size;i++)su[n][ (unsigned char)buf[i] ]++;}}

main(){ WIN32_FIND_DATA fd;
char path[200]="d:\\aaa\\",serchpath[200];
strcpy(serchpath, path); strcat(serchpath, "*");
SetCurrentDirectory(path);
HANDLE hd = FindFirstFile(serchpath, &fd);
int n,i; HANDLE hf[N];
for(n=0;n<N;n++)for(i=0;i<256;i++)su[n][i]=0;for(n=0;n<N;n++)chk[n]=0;

for(;;){ if(chk[n]==0){
for(;;){if(!FindNextFile(hd, &fd))goto end;
if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))break;}
strcpy(fname[n],fd.cFileName); chk[n]=1;
hf[n]=(HANDLE)_beginthreadex(NULL, 0, open,(void*)n, 0 ,NULL);}
n++;if(n>=N)n=0;}
end: WaitForMultipleObjects(N, hf, TRUE, INFINITE);
for(n=1;n<N;n++)for(i=0;i<256;i++)su[0][i]+=su[n][i];
for(i=0;i<256;i++)cout<<i<<" no kosu "<<su[0][i]<<endl;}

222 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 08:40:14 ]
>>221
>for(;;){ if(chk[n]==0){
最初にこの行に到達するとき n=N だぞ。

223 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:27:45 ]
>>219
本は持ってないので知らないけど、クラス定義内の static const な整数型について
>210 みたいに「賢いコンパイラなら〜」って書いてあるなら、ちょっと不正確だと思う。

224 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:24:44 ]
>クラスのメンバ変数は定義しない限り実体がなくて、

これは必ずしも正しくないということが書かれてるよ。
これを実現するコンパイラがいわゆる賢いコンパイラ。
標準で、絶対に領域確保がされないことが保障されている
わけではなく、実装依存となる。static constなデータは、
確保されるならば、大抵静的領域になる。アドレスを必要とする
処理がある場合に限って(この場合は必ず領域確保が必要)領域
を確保してもいいし、無条件に確保しておいてもいい。
それは実装依存ということ。
領域確保を絶対に避けたければenumを使えばいい。

225 名前:224 mailto:sage [2007/11/10(土) 11:27:22 ]
>クラスのメンバ変数は定義しない限り実体がなくて、

というのは、もちろん非staticなメンバーについては正しい。
上で書いたのはstaticなメンバーについて。

226 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:34:49 ]
>>210>>214>>223

BCCで>>208で引っかかって調べたときに
>>208は新しい規格で>>213は古い規格」
みたいな記述を見たんだが。

コレがホントなら、「賢い」とかあんまり関係ないんじゃね?

正確なところ知ってる人、フォローplz


227 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:50:28 ]
>>226
ポインタや参照とかのアドレスを必要としない場合でも常にメモリ確保
を強制されるというのを新しい規格で認るのは信じがたいけど。

正確なところ知ってる人、フォローplz



228 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:43:08 ]
>>224
さっきから実装依存だと言ってるのって、名前空間スコープに定義した const 変数の
話じゃないの?

クラスの static const なメンバ変数はクラス定義内では宣言しかされないので、
別途定義が必要。整数型に限って、宣言につけた初期値を持つ定数式として使える
という特別ルールがあるだけ。

C++ 2003 規格の 9.4.2 p2 より
> The declaration of a static data member in its class definition is not a definition and may be of an
> incomplete type other than cv-qualified void. The definition for a static data member shall appear in a
> namespace scope enclosing the member’s class definition.

同じく 9.4.2 p4
> If a static data member is of const integral or const enumeration type, its declaration in the class
> definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that
> case, the member can appear in integral constant expressions. The member shall still be defined in a namespace
> scope if it is used in the program and the namespace scope definition shall not contain an initializer.


229 名前:228 mailto:sage [2007/11/10(土) 12:53:51 ]
あ、整数型の static const メンバ変数については "if it is used" ってあるから、
定数式の一部として使うぶんには定義は必要無いね。参照やポインタを取られる
可能性があるなら関係ないけど。

>208 の例もあるし、ライブラリとして提供するような時には気をつけて定義しとかないと
まずいね。







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

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

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