スレを勃てるまでもな ..
337:デフォルトの名無しさん
07/06/16 19:38:56
いやあのね、それ、DOSの頃からのファイル属性の仕様だから(無属性が通常ファイルは)。
VCL上だけ変えたら、よけい混乱する人が続出するだけ。
338:296
07/06/16 22:06:28
>>337さんの書き込みを見て気がついた。
> ごめん、間違ってた。その通りです。
↑は前言撤回。
やっぱり間違っていなかった。
>>327と>>335が間違ってる。
339:デフォルトの名無しさん
07/06/16 22:23:05
>>337
(Sr.Attr & Attributes) == Sr.Attr
(Sr.Attr & ~Attributes) == 0
これらは、無属性の通常ファイルの場合も、真になるよ。
フィルターとしては、
指定した属性以外がついているファイルを除外する
ということになる。
340:298,306
07/06/17 04:47:51
>>314
やっぱりあったんですか・・。絶対値って言葉が出てきませんでした。
教えていただきありがとうございます。
自分は308ほど若くは無いですが、高校生くらいまでは学校の勉強に集中するのは同意します。
ていうか小学中学の時点でプログラム組めるとそれで数学やっちゃいそうで計算力が多分付きませんね。
プログラムは半年くらいしかまだやってないですけど、
プログラム以外の事も覚えなきゃなぁ〜とは思っています。。
341:デフォルトの名無しさん
07/06/17 11:10:21
Windows Vista にて
普通のサーバープログラムを sexe でサービスに入れたのですが
通知領域(タスクトレイ)にアイコンが表示されません。
サーバー機能は問題なく動作しているようです。
もちろん「ディスクトップとの対話をサービスに許可」していますし
Shell_NotifyIcon のタイムアウト処理も行い
msgTaskBarRestart によるタスクトレイ再登録も行っています。
直接の原因は Shell_NotifyIcon が全て ERROR_TIMEOUT に
なってしまっていることのようです。(1秒スリープで20回トライ)
対応策はあるのでしょうか?
やはり サービスプロジェクトで書き換えるしかない?
342:デフォルトの名無しさん
07/06/17 11:40:57
↑の書き込みで”全て ERROR_TIMEOUT ”と書きましたが、
”全て ERROR_TIMEOUT 以外”の間違いでした。
これから調べます。すみません。
343:デフォルトの名無しさん
07/06/17 11:51:40
調べたら ERROR_FILE_NOT_FOUND だった。
Shell_NotifyIcon で ERROR_FILE_NOT_FOUND って
何のファイルが無いんだ??? さっぱりわからん。
ちなみにサービス起動でない場合はちゃんとアイコンは表示されます。
344:デフォルトの名無しさん
07/06/17 14:24:46
>>341
それは、C/C++の質問というよりは、Win32APIの質問だ。
Win32APIのスレで質問しなおしたほうがいい。
質問し直しても、
設計が悪い、Windowsのアーキテクチャを理解しろ、
なんて言われるのがオチだが。
345:デフォルトの名無しさん
07/06/17 16:41:34
>>344
了解。
346:デフォルトの名無しさん
07/06/19 00:40:49
char *p[3] は char p[][3] と同じ意味でしょうか?
347:デフォルトの名無しさん
07/06/19 01:11:34
違います。
348:デフォルトの名無しさん
07/06/19 01:23:23
そうですか...
char **p[3] は char p[][3] と同じ意味でしょうか?
349:デフォルトの名無しさん
07/06/19 01:28:22
*はヒープ領域、[]はスタック領域を扱う。
だから、
char* p[3];
p[0] = new char[10];
ということはできても、
char p[][3];
p[0] = new char[10];
ということはできない。
350:デフォルトの名無しさん
07/06/19 01:32:59
>>349
むずかしす、難しいすぎて理解できません、orz
351:デフォルトの名無しさん
07/06/19 01:39:00
char *p[3] は、要素数3の配列で、要素はchar 型のポインタ
char p[][3]; は…こんな型はない。これは配列初期化時の特殊な構文。
char p[][3] = {{1,1,1},{2,2,2}}; とすれば、char p[2][3] = {{1,1,1},{2,2,2}}; だし、
char p[][3] = {{1,1,1},{2,2,2},{3,3,3}}; なら、char p[3][3] = {{1,1,1},{2,2,2},{3,3,3}}; だし、
上の二つは、左辺だけを見れば、一見同じ型のように見えるが、実際に宣言されているのは異なる型。
繰り返すが、char p[][3] という型はない。
Cの配列は、サイズ固定。
352:デフォルトの名無しさん
07/06/19 01:41:12
×char p[][3]; は…こんな型はない。これは配列初期化時の特殊な構文。
○char p[][3]; は…こんな型はない。これは配列宣言時の特殊な構文。
353:デフォルトの名無しさん
07/06/19 01:50:07
>>351-352 型がキーワードみたいですが、型って何ですか?
354:デフォルトの名無しさん
07/06/19 01:59:31
ここでいう型とは、「データ型」のこと。
ビット列で表されるデータを、どう解釈するか、ということの取り決め。
二進表記で、01100101 は、数値型の取り決めでは 十進数の101をあらわし
同じデータを、文字型ではアスキーコードと解釈して 'A' になる。
あくまでも取り決めであって、それ自体が自ら意味を持っているわけではない。
それぞれの型が、何を意味しているかは、一つ一つそのルールを覚えなければ
理解することはできない。
355:デフォルトの名無しさん
07/06/19 10:10:08
>>349
>*はヒープ領域、[]はスタック領域を扱う。
はい?
おまいはPascal出身か?
356:デフォルトの名無しさん
07/06/19 17:43:03
>>346
関数の仮引数という状況においてだけは、同じ意味になる
357:デフォルトの名無しさん
07/06/19 23:06:30
PSDKのサンプルにあったんだが
CAllocator::CAllocator(HRESULT& hr, HWND wnd, IDirect3D9* d3d, IDirect3DDevice9* d3dd)
: m_refCount(1)
, m_D3D(d3d)
, m_D3DDev(d3dd)
, m_window( wnd )
{
....
}
っていう関数の定義があったんだが、引数リストの後、コロン以降はどんな意味がある?
検索したが、検索しにくくて見つけることが出来なかった
358:デフォルトの名無しさん
07/06/19 23:12:00
適当に数字を入力してもらってその数だけ配列を用意したいのですが、どうすれば
できるのでしょうか?
イメージではこんな感じで宣言したい。でもこれだとエラーでる(´・ω・`)
cin>>num;
int i[num];
359:デフォルトの名無しさん
07/06/19 23:14:32
>>357
つ[初期化指定子]
>>358
つ[c99]
つ[std::vector]
360:デフォルトの名無しさん
07/06/19 23:15:04
int*i;
i=new int[num];
361:デフォルトの名無しさん
07/06/19 23:26:58
>>359-360
ありがとうございます。できました(゚∀゚)
これでi[255]なんてぶさいくな宣言せずにすみます
362:デフォルトの名無しさん
07/06/20 05:39:27
delete するの忘れないようにな
使い捨てのコードなら別にいいけど
363:357
07/06/20 09:30:27
>>359
検索できた!ありがとう!
ぱっとみ難解だが頑張るよ!
364:デフォルトの名無しさん
07/06/20 14:23:53
>>349
ヒープかスタックかは、型で決まるのではないぞ。
365:デフォルトの名無しさん
07/06/20 21:49:43
>>364
>349は型に言及しているわけではないぞ。
#勿論、演算子に決まるわけではないが。
366:デフォルトの名無しさん
07/06/20 22:01:34
レジスタ割り当てってのもあるぜ。
367:デフォルトの名無しさん
07/06/20 22:10:19
レジスタの前に静的領域を思い出そうぜ。
368:デフォルトの名無しさん
07/06/20 23:40:50
C++でPCAのライブラリ的なものってどっかにあったりしませんか
369:デフォルトの名無しさん
07/06/24 16:39:47
自動配線ツールをCで書こうと思ってるんですけど。
アルゴリズムはmazeをベースで。
書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか?
アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。
サンプルなどがあればと思って質問させていただきました。
誘導していただければ幸いです。
370:デフォルトの名無しさん
07/06/24 17:40:31
マルチするな
371:デフォルトの名無しさん
07/06/25 05:36:17
>>369
「自動配線ツール」だけで通じると思うな。
372:デフォルトの名無しさん
07/06/25 17:12:26
例えば2乗や3乗の時はpowよりもa*aやa*a*aとした方が速いですが、
何条ぐらいまでかけ算に展開した方が速いのですか?
コンパイラは最適化時に自動的に展開してくれるのでしょうか?
373:デフォルトの名無しさん
07/06/25 17:34:19
やってみりゃいいじゃん
374:デフォルトの名無しさん
07/06/25 17:48:47
>>372
学校の宿題っぽいな。
375:デフォルトの名無しさん
07/06/25 20:59:31
っ 実測
376:デフォルトの名無しさん
07/06/25 21:05:17
powのソース嫁
実装をみれば、ああなるほど、と思うぞ。
377:デフォルトの名無しさん
07/06/25 22:17:07
自己参照構造体で、リストの最後尾にデータを追加しようとしています。
エラーが出て困っています。何かわかりましたら教えてください。
構造体が以下のとおりで、
struct list {
double x; double y; double z;
struct list *next;
};
以下のように呼び出してるのですが、
=========================================
struct list *listp; //宣言
〜〜中略〜〜
listp = add_list(x,y,z,listp);
=========================================
struct list *add_list(double x, double y, double z, struct list *listp){
struct list *p;
if ((p = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("malloc error\n");
exit(1);
}
p->x = x; p->y = y; p->z = z;
p->next = NULL;
listp->next = p; //←←実行時にここでエラーが出ます。
return p;
}
378:デフォルトの名無しさん
07/06/25 22:29:54
>>377
このスレで何度も言っていることだが・・・
プログラムは省略せず全部コピペしろ!
どんなエラーメッセージが出たのか書け!
デバッガでステップ実行しろ! (変数の値のチェックもな!)
がんばれ。
379:デフォルトの名無しさん
07/06/25 22:58:22
>378のいうとおりなのだが、書いてある範囲で怪しいのは
listp = add_list(x,y,z,listp);
のlistpには何が入っている?
中略がどうなっているかわからんが初めはあさっての方向を
指しているぞ。
380:372
07/06/26 02:38:22
やってみたら5乗あたりで抜かれるね
381:デフォルトの名無しさん
07/06/26 07:57:55
そして8乗はx *= x; x *= x; x *= x;に抜き返される悪寒。
後は、精度の問題が出るような数値のときにどうするかだな。
382:デフォルトの名無しさん
07/06/26 10:08:30
ある vector< vector<string> > A と vector< vector<string> > B があって、
Aの1列目とBの1列目が同じIDの集合をもっています。
そこで、Aのsort(たとえばAの2列目を昇順)を実行したときに、BもAと同じ順番に
連動してsortしたいのですが、どのようにすればよろしいでしょうか?
383:デフォルトの名無しさん
07/06/26 10:11:40
その中略の中にlistpの初期化や代入が無かったら
add_listのlistp->next = p でこけるのはあたりまえ。
384:デフォルトの名無しさん
07/06/26 11:19:32
>>383
アンカーくらいつけようよ。
>>382
先ず、Aの2列目をキーにBをソート、然る後にAをソート。
385:デフォルトの名無しさん
07/06/26 13:18:08
>>384
なるほど。ありがとうございました。
386:デフォルトの名無しさん
07/06/26 13:37:17
>>381
powの実装も、
乗数が整数の場合には、
だいたいはそれなんだけど、
ループ回数が可変だから、
どうしてもオーバーヘッドが。
387:デフォルトの名無しさん
07/06/26 13:54:31
>>382
そもそもAとBを分ける必要はあるの?
そして、1列目がID、2列目が何か、というように役割が決まっているなら、どうして構造体にしないの?
typedef struct {
string ID ;
string 何か ;
vector<string> A ;
vector<string> B ;
} HOGE ;
vector<HOGE> AB ;
こういうのじゃ駄目なの?
388:387
07/06/26 14:03:09
ちなみに、頻繁にソートかけるなら、
vector<HOGE> AB ;
とは別にソート用に、
vector <HOGE*> AB_PTR ;
を用意して、AB_PTRのほうをソートする。
そしたら今度は、
ABとAB_PTRを同期させる必要が出てくるので、
ABとAB_PTRを裸で見せるのはやめて、クラスでラップする。
389:デフォルトの名無しさん
07/06/27 02:27:37
A ? TRUEの処理 : FALSEの処理;
っていう書きかたを最近知ったのですが
Aが変数ならこの書きかた出来るんですがAが関数の場合はエラーになってしまうんですが
どうやっても無理ですか?
390:デフォルトの名無しさん
07/06/27 02:37:27
>>389
関数の返り値で分岐させたいってこと?
普通に出来るんだが…
コードかエラーメッセージでも挙げてみてくれ
391:デフォルトの名無しさん
07/06/27 03:00:20
すいません今関数作ってやってみたら成功しました
エラー出てたのは関数じゃなくて#defineだったからなのかもしれませんorz
Windowsプログラムになってしまうんですが、こういう事出来ないかなと。
//ウィンドウ生成
hWnd = CreateWindow(
〜略〜
) ? 処理TRUE : 処理FALSE;
error C2440: '=' : 'BOOL' から 'HWND' に変換できません。
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャスト
または関数スタイル キャストが必要です。
とりあえず今は上のようには書かずに次の行にこう書いて妥協してます
hWnd ? 処理TRUE : 処理FALSE;
392:デフォルトの名無しさん
07/06/27 03:24:13
Cond ? 処理TRUE : 処理FALSE;
条件演算子を使う場合、処理TRUEと処理FALSEの値の型は同じか、
または処理FALSEの型から処理TRUEの型への暗黙の変換が可能でなければならない。
つまり型(クラス)HogeとFooとの変換が定義されていない場合、
Cond ? Hoge() : Foo();
のようなことは出来ない。
あと、式の値を再利用する必要がないなら素直に
if(hWnd = CreateWindow(...)) {
処理TRUE;
} else {
処理FALSE;
}
とすべき。
393:デフォルトの名無しさん
07/06/27 03:29:59
>>391
変数 = 関数() ? 値1 : 値2;
と書いたら当然、値1か値2が変数に代入されるわけだが。
やりたいことがよく判らんが、処理を分岐させたいのなら三項演算子は使うべきじゃない。
関数の呼び出し結果を変数に代入しつつ別の変数に評価を入れたいのなら、
変数1 = (変数2 = 関数()) ? 値1 : 値2;
とでもすればできなくはないが、やはりこの場合も無理に一行に書くことはないだろう。
394:デフォルトの名無しさん
07/06/27 03:34:05
>>392
分かりました。ありがとうございます。
ここは素直にIFで書いておきます・・・
395:デフォルトの名無しさん
07/06/27 03:38:08
>>393
何となくコードを削りたくなってしまって、、
396:デフォルトの名無しさん
07/06/27 04:10:33
hWnd = 関数() ? val1:val2;
というのは、
hWnd = (関数() ? val1:val2);
だというのは判ってる?
きみのやりたいのはたぶん
(hWnd = 関数()) ? val1:val2;
397:デフォルトの名無しさん
07/06/27 04:11:59
あ、「出来る」というだけで、決して「やれ」という意味じゃないから
398:デフォルトの名無しさん
07/06/27 05:29:05
>>396-397
ありがとうございます。
自分でも後からいろいろ試してて、、
何か、ちょっと勘違いしてたみたいです
396のでやりたい事が出来ました。
どうせ趣味で書いてるんで自分さえ読めれば良いんでやってきますwwww
399:デフォルトの名無しさん
07/06/27 06:53:09
しばらく経つと、自分でも読めなくなるに一票。
400:デフォルトの名無しさん
07/06/27 10:24:16
そうみたいです・・読みずらいってレベルじゃないですね。
一回全部のIFを書き直してみたんですがいくつか残して戻しましたよorz
ちなみに分岐はこんな風に書きました
A ? 処理:
B ? 処理:
C ? 処理: 0;
何もしないっていう処理は適当に当てはめたんですが
0; で良いんでしょうか?
なんかこの書き方面白すぎてはまりそうですw
(もう既にはまってるか)
401:デフォルトの名無しさん
07/06/27 10:28:36
>>400
なるほど、処理の分岐に三項演算子を使いたかったのか。
意味的にそんな阿呆なことをする子には教えてあげません。
402:デフォルトの名無しさん
07/06/27 11:38:53
覚えたての言葉を使いたがる子供みたい
403:デフォルトの名無しさん
07/06/27 12:04:58
自分でも、埋め合わせに 0; を思いついた時にこんな馬鹿な話が・・・って思いましたw
でもそんないじわるされるとは予想外でしたwwっうぇw
と・・・こんな風にかく人少ないと思うので
誰かに指摘されるまでは0;やNULL;って書きます
いろいろありがとうございました
404:デフォルトの名無しさん
07/06/27 14:49:10
だから、阿呆だって指摘されているだろう。これ以上何を指摘されたいんだ?
405:デフォルトの名無しさん
07/06/27 15:59:22
ほうっておこうや
時に暖かく見守る事もしつよう(←なぜかry)な事なんだ
406:デフォルトの名無しさん
07/06/27 19:45:15
389みたいなやつを見ると、コーディング規約で3項演算子の使用を禁止したくなる気持ちが、よく分かる。
407:デフォルトの名無しさん
07/06/27 20:17:06
ふっふっふぅ、漏れの策定したコーディングガイドでは三項演算子の「代入用途以外の使用」を禁止している。
408:デフォルトの名無しさん
07/06/27 20:22:17
それよりも条件演算子の重ねがけを禁止すべき
こんなコードを書かれたらたまらん
x = p1 ? p2a ? at : af : p2b ? bt : bf;
409:デフォルトの名無しさん
07/06/27 21:20:16
きちんとインデントで整理できてれば見やすくないか?
x = p1
? p2a
? at
: af
: p2b
? bt
: bf;
410:デフォルトの名無しさん
07/06/27 21:46:34
でも条件とそれに対応する処理を列挙していくような書き方って
関数型プログラミング言語っぽくて面白い気がする
411:デフォルトの名無しさん
07/06/27 22:22:31
>A ? TRUEの処理 : FALSEの処理;
こう書いている時点で勘違いしているとおもう。
式1 ? 式2 : 式3
式1を評価して0以外なら式2の評価した値が、0なら式3を評価した値が
全体の評価結果になる。
>何もしないっていう処理は適当に当てはめたんですが
> 0; で良いんでしょうか?
こういう発想が出る時点で三項演算子を使うべきではない。
412:デフォルトの名無しさん
07/06/27 22:52:05
>>410
if文でいいじゃないか。
413:デフォルトの名無しさん
07/06/27 23:27:28
>>409
そこまでするくらいならif文でいい希ガス。
414:デフォルトの名無しさん
07/06/28 09:59:27
常にif文でいいじゃないかと言われる運命だなw
マクロで使用して、何をするかがマクロ名で明確にわかるときに使うかなあ。
415:デフォルトの名無しさん
07/06/28 19:56:25
クラスがなかなか覚えられません(´・ω・`)
「はじめてのC++」でもかなりのページしめてるけど、やっぱりそれぐらい大切ってこと?
416:デフォルトの名無しさん
07/06/28 20:22:14
クラス使わないなら C でも使っとけ、って言われるくらい。
417:デフォルトの名無しさん
07/06/28 21:09:18
>>415
「覚える」という言葉を使う時点で、間違っているのですよ。
「覚える」というのは、
セックスで例えるなら、ハウツー本を読み漁るだけの童貞君。
プログラミング言語は使いこなしてナンボ。
セックスで例えるなら、百人切りで鍛え上げたテクニック。
418:デフォルトの名無しさん
07/06/28 21:26:31
百人と浅い付き合いをするくらいなら、一人と深く付き合った方がより使いこなせると思うのだが。
419:デフォルトの名無しさん
07/06/28 21:40:31
C++でSTLを使うのは非常に上手だが、STLを使うことしかできない
そういう人みたいな感じになるぞ。
420:デフォルトの名無しさん
07/06/28 22:14:33
一人と深く付き合った事がある加藤鷹が理想
他の女に乗り換える時に楽
421:デフォルトの名無しさん
07/06/28 22:18:34
ちんこが持たねぇっす
422:デフォルトの名無しさん
07/06/28 22:43:11
C++でSTLとboostを非常に上手く使える人間だったら十分問題ないと思うけど
423:デフォルトの名無しさん
07/06/28 22:47:03
STLを使う/使える案件しかやらないのなら、いいんだよ。
424:デフォルトの名無しさん
07/06/29 00:24:37
ありがとう。やっぱりクラスは大切なのか
これからは積極的に使って身につけていくことにします(`・ω・´)
425:デフォルトの名無しさん
07/06/29 11:58:49
つーかいまどきC++は生産性が悪すぎ。
426:デフォルトの名無しさん
07/06/29 12:07:56
言語間での生産性の差ってそんなに大きくないだろう
427:デフォルトの名無しさん
07/06/29 12:23:40
全ての状況下に於いて、生産性だけが重要とは限らない
428:デフォルトの名無しさん
07/06/29 12:42:54
C++でtemplate meta programmingやマクロを駆使して書いたプログラムが強いところって何でしょう?
「皆が読めなくなるからやめろ、STLやtemplateも出来れば使うな、boostなんて以ての外」
って言うところも多いと聞きますが…
429:デフォルトの名無しさん
07/06/29 13:13:27
STL程度で「皆が読めなくなる」なんて、三流以下のソフトハウスでもなければ言われないと思いますが。
430:デフォルトの名無しさん
07/06/29 13:31:26
三流以下のソフトハウスが多いことの証左なんだろうさ。
ところで、>>428 の
>〜が強いところって何でしょう?
が何を訊いてるんだかよく判らない。
「〜に強い会社ないし集団はどこでしょう?」
の意だろうか。
431:デフォルトの名無しさん
07/06/29 15:12:02
STLの実装にバグがあってトラぶった時、STLなんて使うからだと言う人がいた。
たしかに、使ったSTLの実装は古く、メンテナンスされていないものだった。
だがしかし、その人が書いたSTL相当の独自のクラスにもバグがあった。
ちなみに一流の現場では、STLは使わず、もっと良いテンプレートライブラリを使うと思う。
STLはC++標準に入ってはいるものの、最善策ではないから。
432:デフォルトの名無しさん
07/06/29 16:37:08
C言語で、配列の個数を外部から入力することはできますか?
例えばa[n]という配列に対しnをscanfでキーボードから読みけませて、要素がn個の配列を作るといった感じです。
433:デフォルトの名無しさん
07/06/29 16:49:32
C99じゃなけりゃ、m(c)allocやalloca使うしかないかな
434:デフォルトの名無しさん
07/06/29 18:07:51
>>428
利点を挙げるとしたら、高度の抽象化に役立つということ。
問題は、それを必要とされない、あるいは必要性が理解されないということ。
435:デフォルトの名無しさん
07/06/29 21:28:52
>>432
おれがこの前教えてもらった方法
int *a,n;
scanf("%d",&n);
a=new int [n];//a[0]〜[n]まで確保
Cだと無理なのかな
436:デフォルトの名無しさん
07/06/29 21:44:34
STLやtemplateもboostもstd::もしらないけどc++動かせるよ
どんな利点があるのか教えろ
437:デフォルトの名無しさん
07/06/29 21:46:11
つか、進化した言語の方が優れているなら、アセンブラもC言語も絶滅しているはずだろう
しかししてない
だから使える機能を使えばいい
438:デフォルトの名無しさん
07/06/30 00:59:45
>>436
delete[]のような後処理が要らないしrealloc相当のことができる
std::vectorが取っ掛かりには便利。
Boostは正規表現が実用的だろう。
439:デフォルトの名無しさん
07/06/30 05:31:00
>>438
そんなのはSTLの専売特許ではないしぃ。
440:デフォルトの名無しさん
07/06/30 15:41:07
標準もしくは準標準ってところが大事なのかと
441:デフォルトの名無しさん
07/06/30 19:26:00
STLがどんなにクソッタレでも、C++標準に入っている以上、しかたない。
あの万能ナイフっぷりには呆れるぜ。
442:デフォルトの名無しさん
07/06/30 20:33:49
こんな風にC++の標準関数まとめてくれてるサイトない?
URLリンク(cham.ne.jp)
443:デフォルトの名無しさん
07/06/30 22:26:36
ある
444:デフォルトの名無しさん
07/06/30 22:30:38
本スレテンプレのコレとか
URLリンク(www.cppreference.com)
445:デフォルトの名無しさん
07/06/30 22:48:49
>>439
436が使ったことないって言うから、
早速使えそうなものを薦めてみた。
うんちく語っても仕方がないと思ったし。
446:デフォルトの名無しさん
07/06/30 23:05:10
じゃあSTLはまぁそこそこ使える、かつ稲葉氏のページにあるものは一通り知っている
っていう人に対してお勧めのboost library(sandbox含む)を教えてください
447:デフォルトの名無しさん
07/07/01 09:48:04
STLは機能が多すぎて、つまり、注意事項が多すぎて、怖い。
オブジェクトを手っ取り早く永続化したくて、
一定のアドレスにオブジェクトを配置する、
カスタムなヒープを使う、カスタムなアロケータを
使うように指示して、それがちゃんと使われるのか、とか。
448:デフォルトの名無しさん
07/07/01 10:07:28
>>447
そんだけなら単にSTLコンテナ宣言してる場所をgrepすりゃいいだけじゃね
つか、STLに限った話じゃ全然ねー
STL使わんでも普通にmalloc()だのnewだの使われたくないんだろ?
アホじゃないの?
449:デフォルトの名無しさん
07/07/01 11:23:31
>>447
アロケータは使い方を知らないとハマるわな。
450:デフォルトの名無しさん
07/07/01 11:30:39
実装によってはアロケータをガン無視しちゃってるのがなかったっけ
451:デフォルトの名無しさん
07/07/01 13:23:33
setやmapをそのままシリアライズしたいって思うことあるよなぁ。
iteratorで舐めてファイルに書きだしたものを、
ファイルから読んで1つずつinsertするのは、
なーんか無駄っぽいんだ。
452:デフォルトの名無しさん
07/07/01 16:23:59
ライブラリにしとけばええやん。
453:デフォルトの名無しさん
07/07/01 20:32:59
>>452
そういうことではなくて、B木の構築コストがもったいない。
454:デフォルトの名無しさん
07/07/05 11:19:09
ほんと初歩的な事なんですが・・・
C言語には行とかいうのは関係なくて全部一行で書けるって聞いたんですが
#include<stdio.h> main()〜
っていうのはどうやっても出来ないんでしょうか?
455:デフォルトの名無しさん
07/07/05 11:40:20
#include はC言語じゃなくてプリプロセッサ用
456:デフォルトの名無しさん
07/07/05 13:57:29
>>455
プリプロセッサっていうのは、コンパイルの時の処理ですよね
一行ずつ読み込む・・・から、
やっぱ、無理って事でしょうか?
457:デフォルトの名無しさん
07/07/05 14:08:36
ヘッダファイルの中から使う分だけ直接持ってくりゃいいべ
458:デフォルトの名無しさん
07/07/05 17:44:03
>>457
その手が、、、あった。。。ありがとうございました
459:デフォルトの名無しさん
07/07/05 22:25:40
標準ライブラリのヘッダの中身って結構処理系独自拡張のオンパレードだから、
あまりおすすめできないけどな。
460:デフォルトの名無しさん
07/07/05 22:26:50
7行プログラムとかlisp500とか書きたいんだろうか
461:デフォルトの名無しさん
07/07/06 00:07:56
プロトタイプと構造体とtypedefくらいだべ
462:デフォルトの名無しさん
07/07/08 06:21:10
大きな配列を確保する際、newやmallocだと確保できるのに、
プログラム中に最初から
double a[100000]
のように書くと実行時に確保できない旨のエラーがデルのは何故ですか?
463:デフォルトの名無しさん
07/07/08 06:41:41
スタック領域
464:デフォルトの名無しさん
07/07/08 06:51:11
>>462
staticでもつければ?
465:デフォルトの名無しさん
07/07/08 13:20:28
>>462
スタック領域が足りなくなるから。
環境によってはスタック領域を大きくできるぞ。
466:デフォルトの名無しさん
07/07/09 11:12:57
スタックとヒープの違いを把握しましょう
467:デフォルトの名無しさん
07/07/09 13:51:14
ご教授お願いします。
コード
URLリンク(kansai2channeler.hp.infoseek.co.jp)
不正なbreakですとなってしまいます。なぜでしょうか?
468:デフォルトの名無しさん
07/07/09 13:53:55
>>467
なんちゅうスタック破壊
469:467 ◆4usmhdjocU
07/07/09 14:01:12
すみません詳しく教えていただけると助かるのですが・・・
470:デフォルトの名無しさん
07/07/09 14:01:25
誤>printf("New string --->%s\n,tbl");
正>printf("New string --->%s\n",tbl);
471:デフォルトの名無しさん
07/07/09 14:01:59
>>467
このスレで何回も言ってることだが・・・。
・エラーメッセージの類いは、一字一句そのままコピペすること。
往々にして勝手に要約して端折った部分に大切な情報がある。
それが大切だと分かってないから、問題の原因が理解できない。
・デバッガでステップ実行すること。
がんばれ。
472:デフォルトの名無しさん
07/07/09 14:03:23
>>470
あーあ、答え書いちゃった。
プロセスを教えずにリザルトだけ教えていたら、
いつまでたっても467はヒヨコのままだぞ。
473:デフォルトの名無しさん
07/07/09 14:04:41
>>467
・forの書き方に問題があるから、不正なbreakになる。
・>468も指摘しているが、printf()の使い方にも間違いがある。
474:デフォルトの名無しさん
07/07/09 14:04:41
>>469
getsは危険です絶対に使ってはなりません。
475:467 ◆4usmhdjocU
07/07/09 14:07:17
C:\Documents and Settings\cp1\デスクトップ\testplog\test.cpp(39) : error C2043: 不正な 'break' です。
cl.exe の実行エラー: error C2043: 不正な 'break' です。
>>470
ありがとうございます
>>471,472
わざわざ自分のことを考えていただきありがとうございます。
しかし、エラーがでてなおりません。
次はヒントでいいので教えていただけませんか?
476:デフォルトの名無しさん
07/07/09 14:07:40
標準関数でtolower()ってのがあるから、使う時はtolower()使ってね☆
477:467 ◆4usmhdjocU
07/07/09 14:08:19
とてつもない初歩的なミスでした・・・
聞いていたじぶんがはずかしくなりました><
お手数かけました
478:デフォルトの名無しさん
07/07/09 14:08:45
>>475
セミコロン
getsとかtolowerとか、練習で問題文写してるんだろうから
あんまり言うとわからなくなるぞ
479:467 ◆4usmhdjocU
07/07/09 14:08:52
>>476
勉強します^^
480:デフォルトの名無しさん
07/07/09 14:09:27
for(i = 0;i < max;i++);
481:467 ◆4usmhdjocU
07/07/09 14:10:14
>>478,480
ありがとうございました
482:デフォルトの名無しさん
07/07/09 14:26:19
そしてthruされる>473、>474……
483:デフォルトの名無しさん
07/07/09 14:52:12
LINK : fatal error LNK1104: ファイル "win32.lib" を開けません。
link.exe の実行エラー
これってどうやれば直りますか
484:デフォルトの名無しさん
07/07/09 14:52:58
そもそも、
固定の文字列を出力するのにprintfを使う
getsを使う
などという、
見習ってはいけない「お手本」を載せている、
クソッタレ参考書がいけないと思うんだよね。
いったい何十年前の本なんだよ、って感じ。
485:デフォルトの名無しさん
07/07/09 14:54:44
>>483
1. ライブラリ名が正しいか確認する
2. リンカのマニュアルを確認する
486:デフォルトの名無しさん
07/07/09 15:18:44
>>484
固定の文字列を出力するのにprintf()を使う以外の見習うべきお手本は何?
487:デフォルトの名無しさん
07/07/09 15:27:00
puts()
488:デフォルトの名無しさん
07/07/09 15:37:30
>>487
puts()に替えたら改行しちゃいました。どうしたらいいでしょう。
489:デフォルトの名無しさん
07/07/09 15:42:43
fputs()
490:デフォルトの名無しさん
07/07/09 15:49:06
どうせコンパイラが最適化でputs()に置き換えたりするんだからprintf()でいいじゃん。
491:デフォルトの名無しさん
07/07/09 15:56:06
そんなコンパイラはgccぐらいしか知らんが
492:デフォルトの名無しさん
07/07/09 16:10:55
打つ量の削減とかそういう理由で使い分けてる
493:デフォルトの名無しさん
07/07/09 16:19:48
わかっていない人のために説明すると・・・
printfの第一引数は、あくまでも書式を指定するための文字列である。
だから、
printf("100%元気") ;
なんてのは大間違いなわけ。
あえてprintfで任意の文字列を出力したいのであれば、
printf("%s", "100%元気") ;
とすべき。
そんな間抜けな間違いはしないよ、というかもしれないが、うっかりミスは恐ろしいし、
void PrintMessage(char* szMessage) {
printf(szMessage) ;
}
なんてことをやったりしたら、収拾がつかなくなる。
494:デフォルトの名無しさん
07/07/09 17:06:51
まあ
printf("%s\n", s);
なら
puts(s);
一択だわな。タイプ量が少なく効率も良い。
printf("%s", s);
を
fputs(s, stdout);
にするかどうかは気分次第だな。
改行を打ち出す時は
puts("");
が短いが、俺は
putchar('\n');
を使うことがおおいな。
495:デフォルトの名無しさん
07/07/09 17:11:41
inline void NEW_LINE() {
putchar('\n');
}
::NEW_LINEみたいにしたり(w
496:デフォルトの名無しさん
07/07/09 17:13:03
>>495
賢いのう、ワレ!
497:デフォルトの名無しさん
07/07/09 18:44:07
>>484
> いったい何十年前の本なんだよ、って感じ。
昔のBASICなどのPRINTと同じ感覚の老人が書いた本だろ。
498:デフォルトの名無しさん
07/07/09 18:46:41
printf(name) ;
printf("\n") ;
printf("ほげほげを入力してください。\n") ;
printf("入力できる数値の範囲は、fooからbarです。\n") ;
こんなの見たら卒倒するよ。
499:デフォルトの名無しさん
07/07/09 19:20:09
JavaやってからC++に戻ってくると>>498みたいに書きたくなる。
500:デフォルトの名無しさん
07/07/09 19:30:03
getsはともかく、printfは別にいいだろ
char配列そのままprintfに渡すのはまずいけど、
文字列リテラルなんかコンパイラによってはputsに置き換えたりする事もある
501:デフォルトの名無しさん
07/07/09 20:20:28
ループ成立w
502:デフォルトの名無しさん
07/07/09 20:32:46
別にprintfでもputs/fputsでも、そんなん好みの問題やん。
503:デフォルトの名無しさん
07/07/09 23:25:28
UDPの通信メッセージの最大長っていくつですか?(socket、bind、sendtoを使います)
SOCK_DGRAMで作成した場合は、固定長最大メッセージをサポート、
ってなってるから、約64KBまで送信できると思うのですが、イーサネットの
フレーム長が1500byteまでとか言う風に書いてあって、よく分からないのです。
オフィス用の一般的なPC(WinXP SP2、10BASE-T)の環境でテストプログラムを
作ったところ、一応60KBちょいまで送受信できたので64KBまでOKなのかな?
あと、さらに質問で、64KBまで送受信できるけどXXbyteを超えると信頼性が
著しく下がるとかありますか?
また、上のほうでも書きましたが、イーサネットで1500byteってのはアプリケーションでは
意識してないけれど、ネットワーク層(?)とかデータリンク層(?)とかのレイヤが
勝手にセグメント化してくれてるのでしょうか?
長々として申し訳ないのですが、どなたかお助けを。
504:デフォルトの名無しさん
07/07/10 00:05:05
TCP/IPではパケットサイズを期待してはいけない。それは下位層によって1バイトずつに分断されているかもしれない。
UDPではパケット到来順序を期待してはいけない。それは経路によって順不同に並べ替えられているかもしれない。
だっけ?
505:デフォルトの名無しさん
07/07/10 08:40:13
>>503
> UDPの通信メッセージの最大長っていくつですか?(socket、bind、sendtoを使います)
環境による。
通信バッファが小さくて長いUDPパケットを受け取れない人もいるし、
なかには、受け取れないどころか即死するヘボ実装の人もいる。
両側とも自分で書いたプログラムなら、通信の最初に、
送受信できる最大サイズを調べるためのメッセージ交換を入れたらどうかな。
最初は128バイトあたりで、送受信を確認できたら、サイズを2倍にしていくの。
> イーサネットのフレーム長が1500byteまでとか言う風に書いてあって
UDPパケットが長い場合、複数のイーサネットフレームに分割して送受信される。
> 64KBまで送受信できるけどXXbyteを超えると信頼性が著しく下がるとかありますか?
パケットサイズが可変なのに対して、パケットのCRCチェックサムのビット数が固定なので、
長さに比例してエラー検出能力が下がっていくけど、あんまり気にしない。
信頼性を気にするなら、更に自前で別のチェックサムを付けてUDPに載せるといい。
506:デフォルトの名無しさん
07/07/10 19:17:26
>>503と>>505は釣りかい?
マジなら>>505はもう一度勉強な。
それから、UDPの送信フレーム数そのものに制限は無い。
どこで知ったかしらないが、64kbyteなんて制限はない。
恐らくAPIレベルの話だろう。64kbyte以上送りたければ、何度もAPIを呼べばいい。
受信側が受け取れなければ、単に破棄するだけだ。
それは、受け取り側が糞なんじゃなくて、そういう仕様。
UDPの通信フレームの最大長は、1500オクテット(=バイト)だが、
IP情報分を除くと1480バイトになる。経路が全てイーサネットで
組まれているのなら、APIレベルで1480バイト以下を送れば分割(フラグメント)は起こらない。
インターネットに流すのならもっと小さくする必要がある。
IPヘッダ専用のチェックサムはあるが、それはデータとは無関係。データ自身には何のチェックバイトもない。
イーサネットフレームのCRCはあるが、それは送信時のもので、異なるプロトコルにぶちあたるとコロリととれてしまう。
イーサネットフレームに戻るときにはCRCも戻るが、それは再構築されたものなので、送信時のものとは全く関係ない。
そもそも、UDPは、次の特徴をもっている。
・>>504が言うとおりIPフレームの到来順序を期待してはいけない。
・戻されたIPフレームがどの順番に届くかは保証されない。
・IPフレームの一部が失われた場合、再送の手順は行わない。
・IPフレームは分割(フラグメント)されるかもしれないが、分割された順序を記憶するフィールドがあり、再構築されるようになっている。
UDPとは、
・本来、内部LANのように信頼性の高い部分で使用することを前提に策定された
・今は、動画や音声のように、一部が失われても十分機能する場合によく用いる
のですよ。ちなみにコレはIPv4の仕様。IPv6はこうとは限らない。
507:506
07/07/10 19:33:25
ちょっと訂正
APIで1480バイトを指定するのではなくて、
窓の手でMTUを指定する(Windowsの場合)。
社内LANだけの場合は1500にする。
508:デフォルトの名無しさん
07/07/10 21:13:41
このスレで良いのかわからないのですが、質問失礼します。
データ圧縮されたファイルの1文字当りの平均情報量は、テキストファイルのものに比べてどのように変化するんでしょうか?
できれば理由も説明してくだされれば幸いです。
よろしくお願いします。
509:デフォルトの名無しさん
07/07/10 21:26:20
圧縮後の情報量なんて、圧縮しているのだから1文字当たりの量は増えているとだけは言える。
どれくらいになるかは圧縮率次第。それがわからないと平均なんてわからない。
510:デフォルトの名無しさん
07/07/10 22:05:31
>>508
それ、学校の宿題か?
511:505
07/07/10 22:22:05
>>506
お前こそ勉強し直しだ。
> それから、UDPの送信フレーム数そのものに制限は無い。
用語は正しく。
UDPはメッセージもしくはパケットで数える。フレームとは言わない。
> どこで知ったかしらないが、64kbyteなんて制限はない。
UDPヘッダの長さフィールドが16ビットなので、64kbyte弱が上限。
> 恐らくAPIレベルの話だろう。64kbyte以上送りたければ、何度もAPIを呼べばいい。
複数回に分けてSendToを呼ぶと、複数のUDPパケット=メッセージになってしまう。
UDPは、TCPと違ってストリームではなくメッセージなので、意味が変ってしまう。
> 受信側が受け取れなければ、単に破棄するだけだ。
> それは、受け取り側が糞なんじゃなくて、そういう仕様。
なにその教科書どおりの話は。
世の中には、破棄せず不正なステートに陥ったりバッファオーバーフローしちゃう糞実装があるんだよ。
> UDPの通信フレームの最大長は、1500オクテット(=バイト)だが、
> インターネットに流すのならもっと小さくする必要がある。
んなのはIPよりも下のレイヤの話であって、
フラグメントを禁止したりしなければ、
下のレイヤのために小さくする必要はない。
現実には途中の経路のルーターが、
IPのレイヤで蹴落としてくれることがある。
512:505
07/07/10 22:30:23
> IPヘッダ専用のチェックサムはあるが、それはデータとは無関係。データ自身には何のチェックバイトもない。
嘘つき。
UDPパケットにもチェックサムはあって、それにはペイロードも含まれている。
ただし、
チェックサムは実装が必須とはされていないので、
相手がチェックサムを確認しない可能性もあるし、
こちらがチェックサムを付加しない可能性もある。
> ・本来、内部LANのように信頼性の高い部分で使用することを前提に策定された
> ・今は、動画や音声のように、一部が失われても十分機能する場合によく用いる
なんか違うなぁ。
コストをかけてコネクションを張る必要のないメッセージのやりとり、という用途も考えられていたし、
DNSなんかもUDPを使うんだけどなぁ。
513:デフォルトの名無しさん
07/07/10 22:40:45
コード
URLリンク(kansai2channeler.hp.infoseek.co.jp)
入力文
URLリンク(kansai2channeler.hp.infoseek.co.jp)
言語はCです。
コンパイル(gcc)して文をリダイレクトで入力したのですがどうしても一行目で
処理が終わってしまいます。何が問題なんでしょうか?
514:デフォルトの名無しさん
07/07/10 22:55:52
>>513
このスレで何度も言ってることなのだが・・・
デバッガでステップ実行しろ!
515:デフォルトの名無しさん
07/07/10 22:57:58
>>513
1行しか読んでないから
fgetsは1回実行されるだけじゃん
516:デフォルトの名無しさん
07/07/10 23:02:02
gccみたいな糞環境だとデバッガ使うのも一苦労でしょ^^
VC2005にきなさいな
517:デフォルトの名無しさん
07/07/10 23:03:30
VC2005でデバッグしてからgccにもってくのもあり
518:デフォルトの名無しさん
07/07/10 23:03:50
gdbの事かー
GUIフロントエンドでも使っとけ
519:503
07/07/10 23:07:50
>>505,506
サンクス。勉強になった。
で、再度質問で申し訳ないのですが、
要は、やりたい事が最大で5KBくらいのデータを送りたくて、
UDPについて調べてました。(TCP/IPは困ったことにノウハウが無い)
「IPフレームがどの順番に届くかは保証されない」ってのは
例えば4000byteのメッセージをsendtoすると、
1500byte(これをAとする)、1500byte(これをB)、1000byte(これをC)の
フレームに分けられて伝送される。
でも、受信側のアプリケーションでrecvfromした時にバッファに入っているデータが、
A+B+Cの順序で4000byteのこともあれば、B+C+Aの順序になっちゃうこともあるということでしょうか?
それとも1回のsendtoと1回のrecvfromだと、
こういうような順序の不都合は起きなかったりするのでしょうか?
自前のコードで1KB以下のメッセージでセグメント化するのは、
コードが煩雑になるのでできるだけ避けたいんですよね。
520:デフォルトの名無しさん
07/07/10 23:17:16
>>519
> B+C+Aの順序になっちゃうこともあるということでしょうか?
ない。
521:デフォルトの名無しさん
07/07/11 01:15:34
そもそも一回のrecvで全部取れる保証が無い。
522:デフォルトの名無しさん
07/07/11 08:49:29
>>521
それはTCPの場合ね。
523:603
07/07/11 09:11:40
>>505
水を得た魚のようにはしゃいじゃって。UDPヘッダを考慮に入れてなかったんだが、お前の反論はただの荒らしだ。
訂正:UDPヘッダには16ビット分のデータがある。64kbyteが限界
(イーサネット上ではIPパケットが1500バイトになるように分割。)
>用語は正しく。
用語は大切だが、ここではそれを議論してんじゃネーだろ。文脈を読めよ。
>> 受信側が受け取れなければ、単に破棄するだけだ。
>なにその教科書どおりの話は。
>世の中には、破棄せず不正なステートに陥ったりバッファオーバーフローしちゃう糞実装があるんだよ。
だーかーらー文脈にそって語れよ。質問者のテスト環境ではWindowsXPって書いてあるだろ。それに、教科書どおりなんて文句言うぐらいなら、用語にケチつけるな。
>> インターネットに流すのならもっと小さくする必要がある。
>フラグメントを禁止したりしなければ、
>下のレイヤのために小さくする必要はない。
下でちゃんと訂正してますー。はしゃぎすぎで良く読んでない証拠だな。
>> ・本来、内部LANのように信頼性の高い部分で使用することを前提に策定された
>> ・今は、動画や音声のように、一部が失われても十分機能する場合によく用いる
>コストをかけてコネクションを張る必要のないメッセージのやりとり、という用途も考えられていたし、
意図と使い方は違ってても問題ないし、たかだか一つの文句を増やすために引き合いにだしたのか?
>DNSなんかもUDPを使うんだけどなぁ。
DNSにUDP?まさに信頼できる接続の典型じゃないか。
お前、どういう形でインターネット使ってるにしろDNS指定されてるだろ?
いきなりDNSルートにつなぎに行かないだろ?
524:デフォルトの名無しさん
07/07/11 10:17:45
>>523
何も有益な話はないな。
525:デフォルトの名無しさん
07/07/11 12:01:24
>>603にプレッシャーがかかりました
526:デフォルトの名無しさん
07/07/11 16:26:50
scanfが入力を受け付けてくれなくて困っています。
char c,d;
printf("数値いれろ");
scanf("%c",&c);
printf("数値入れろ");
scanf("%c",&d);
って感じで実行すると
数値入れろ数値入れろ_(←カーソル)
二番目のscanfだけは入力出来る状態です。何が原因なのでしょうか。
OSはWindwosXPでコンパイラはBCC5.5です。
527:デフォルトの名無しさん
07/07/11 16:37:56
キーバッファからなんか喰ってるんだろ。
528:デフォルトの名無しさん
07/07/11 17:42:56
ファイルから標準入力へリダイレクトすることを考慮に入れず、
人間相手にインタラクティブに入力することだけを考えるなら、
printf("数値いれろ");
という表示をする前に、
すでに入力されているものがあれば、それを全て捨てる処理を入れる。
529:デフォルトの名無しさん
07/07/11 17:44:21
初心者は馬鹿の一つ覚えで
scanf()をfgets()→sscanf()に置換汁
530:デフォルトの名無しさん
07/07/11 17:44:36
毎度おなじみの言葉を言うの忘れてた。
デバッガ上でステップ実行しろ!
とりあえず、
1つ目のscanf("%c",&c);でcに何が入ってきているのか、
デバッガ上で確認してみよう。
531:デフォルトの名無しさん
07/07/11 17:53:41
>>529
そもそも、初心者向けの教科書の内容が古すぎるんだよな。
scanf系なんか、その存在すら教える必要ないのにな。
自分はscanf系を使ったのは、
C言語やりはじめて最初の一ヶ月くらいで、
その後15年間まったく使っていないよ。
使いもしないものを目に触れさせるだけでも無駄だし、
ましてや、それで新人がハマったりするようでは、有害だよ。
532:デフォルトの名無しさん
07/07/11 18:03:45
scanf()も使いどころを知っていれば便利なんだけどね
533:デフォルトの名無しさん
07/07/11 21:13:36
>>531
「scanf系」ってなんじゃらほい?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4308日前に更新/282 KB
担当:undef