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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:21:26.11 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.76【環境依存OK
hibari.2ch.net/test/read.cgi/tech/1312621728/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

445 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 21:31:49.20 ]
>>443
vtblのレイアウトはWindowsでは決まっている(そうじゃないとCOMが動かない)

446 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 21:49:50.45 ]
>>445
なるほど
VC++やOSのバージョンは特に気にしなくていいということですかね
安心しました

447 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 23:20:13.66 ]
#ifdef HAVE_CPP11
とか
#ifdef HAVE_CPP0X
みたいなことってできないの?

448 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 23:26:58.33 ]
www.google.co.jp/search?q=__cplusplus+%92%E8%8B%60%8D%CF%82%DD%8E%AF%95%CA%8Eq+%22c%2B%2B0x%22
かな

449 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 01:25:48.99 ]
VisualStudio2010みたいな中途半端なc++11の為に
HAVE_LAMBDAとかHAVE_DECLETYPEとかほしいな

450 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 02:02:08.21 ]
コンパイルエラーを捕まえて処理できる構文とかあればいいのにね

template <class X> void my_swap(X & a, X & b) {
STATIC_TRY { a.swap(b); }
STATIC_CATCH { std::swap(a, b); }
}
// a.swap(b)がコンパイルエラーならstd::swap(a, b)でも試す

こんな感じで
めんどくさいメタプログラミング、とかマクロで実装状況を調べて、とか正直めんどくさい

451 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 03:31:12.67 ]
一応SFINAEがそういうものなんだけど実装状態がいまいち

452 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:45:54.75 ]
intrusive_weak_ptrはなぜないんだろう
なんか作るのに難しい所があるのかな

453 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:33:08.96 ]
簡単だと思うんならやってみればいいんじゃね?



454 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:36:26.76 ]
クラスの静的メンバ関数って静的メンバ以外を引数にするのはNGですか?

455 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:41:25.59 ]
>>454
問題無いですよ。


456 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 17:50:14.19 ]
>>452
weak_ptr機能を導入すると実行コストがshared_ptrと大差なくなると思われ

457 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 19:49:04.54 ]
VTableのサイズをするにはどうすれば?

458 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:12:22.34 ]
サイズをする?

459 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:15:33.66 ]
知るですすいません

460 名前:デフォルトの名無しさん [2012/01/15(日) 22:39:15.44 ]
2ちゃんとかでよくみるAAをprintfで表示したいのですがどうすればいいでしょうか?
メールで提出するので何かをダウンロードしたりしないでプログラムの中だけでやりたいです。

461 名前:デフォルトの名無しさん [2012/01/15(日) 22:40:25.34 ]
>>460
すみません、フォントをMS Pゴシックに変える方法が知りたいです。

462 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 22:43:00.46 ]
windows コンソール フォント

463 名前:デフォルトの名無しさん [2012/01/16(月) 00:35:53.28 ]
vba用のdllをつくっています。C初心者です。
値をdllに渡して処理したあと、グローバル変数に値を入れておいて、
vbaから読み込みのフラグが立ったらその変数を戻すようにしているのですが、
グローバル変数は呼び出し速度が遅い等ネットで見かけます。

グローバル変数を回避して、ローカル変数のみで同様のことをするには
ざっくりどんなことをすればいいのでしょうか




464 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 00:38:14.88 ]
グローバル変数が遅いなんて初めて聞いたぞ
どこだその糞サイトは

465 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 01:50:55.97 ]
>>463
> グローバル変数は呼び出し速度が遅い等ネットで見かけます。

どういう理由で何の処理が遅くなるのかがあやふやなので、
まずはそのことがどこに書かれているか教えてください。

466 名前:デフォルトの名無しさん [2012/01/16(月) 02:05:19.02 ]
class window
{

467 名前:デフォルトの名無しさん [2012/01/16(月) 02:05:50.03 ]
すいません誤爆しました

468 名前:デフォルトの名無しさん [2012/01/16(月) 02:08:26.73 ]
class window
{

469 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 02:12:55.51 ]
};};

class window’ has the same name as the class in which it is declared


470 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 10:44:06.68 ]
>>464
排他処理のこと言ってるんじゃね?

471 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:25:02.57 ]
テンプレート関数について教えてください。
テンプレート関数に部分特殊化はないと思っていたのですが
以下のように書いたらよくわからなくなってきました。

//上になにもテンプレート宣言がないときは<>が構文エラー
//template<typename T, typename U, typename V> void f<>(T, U, V){}

//通常のテンプレート関数
template<typename T, typename U> void f(T, U){}

//テンプレートの特殊化は問題なし?
template<> void f<>(int, int){}

//この構文は何? 既に本体を持っています。上のがなければok
//void f<>(int, int){}

//同じ引数の別のオーバーロードは問題なし?
void f(int, int){}

//テンプレートの部分特殊化のつもりの文
template<typename T, typename U> void f<>(T*, U){}

//同じ引数の別のオーバーロードのつもりの文。関数テンプレートは既に定義されています
//template<typename T, typename U> void f(T*, U){}

//別のオーバーロードなのにtemplateの部分特殊化のように書ける?
template<typename T> void f<>(T*){}

上の文のおかしなところをご指摘いただけないでしょうか。
VC2010です。

472 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:25:36.02 ]
そもそもそのグローバル変数は何のために使っているんだろう。

473 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:47:37.53 ]
>>471
> //テンプレートの部分特殊化のつもりの文
> template<typename T, typename U> void f<>(T*, U){}

いいえ、それは部分特殊化ではありません。




474 名前:471 mailto:sage [2012/01/16(月) 12:30:28.34 ]
やはりそうですか。
だとすると<>があるとないとでは、どのように違うのですか?

475 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 13:05:46.91 ]
>>474
無意味で違いがない

476 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 13:35:20.11 ]
ありがとうございました。

477 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 16:00:34.59 ]
math.hのsin()を使う場合と、
float fsin = 0;
_asm{FLD DWORD PTR DS:[fsin]
FSIN
FSTP DWORD PTR DS:[fsin]}
を使う場合では、どちらが高速ですか?

478 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:18:33.69 ]
レスを待つ時間あるなら、自分で計測すりゃいいだろ

479 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:46:29.15 ]
自分で計測したとして
その結果は他の環境でも
当てはまりますか?

480 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:48:54.93 ]
>>477
ライブラリのバージョンだとかCPUやチップセットの種類だとか様々な環境の違いで変わること。

481 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:49:12.23 ]
そういう速度議論なんかはlibc開発者達の間でとっくに終わってる事なんだよね
一人の浅知恵が勝てるわけがない

482 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:54:55.30 ]
>>481
いや、勝てる。
libcはいかなる環境のいかなる使い方でも最悪の速度が悪化しないことが求められる。
自作は勝手に条件絞ってその条件の範囲内でのベンチマーク最速を目指せる。

483 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:55:58.80 ]
だからといってfsinでは勝てんがな



484 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:58:18.15 ]
>>482
こういうことを言う奴に限ってクソみたいなもんを作る

485 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:01:54.85 ]
数学関数の作り直しで勝つとしたら、周辺処理との絡み方を良くして
ループ展開、call削減、分岐削減、キャッシュヒット向上とか

486 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:04:20.74 ]
>>484
ベンチマーク最速を目指すために書きまくる人vs理論で必死に否定する人

487 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:08:00.77 ]
複数の方法を用意してベンチマークを比べて速い方を選ぶ。それを幾度も繰り返し。
速度問題で勝ちたきゃそれしかねーよ。

488 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:18:11.99 ]
>>477
これはsqrtの例だけど、こんな感じで検証して、できれば記事を投稿しろ。
www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspx

489 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:19:55.69 ]
あと、SSEが使える環境なら、FPU命令を使うよりSSEで関数を組んだほうが速い。
gruntthepeon.free.fr/ssemath/

490 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:25:56.78 ]
zebra, john, gmpのソースを見て思った。
最高の速度を追求するときは標準関数には頼らない。

491 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:14:30.29 ]
class Hoge
{
int mHoge;
virtual void hoge(void) = 0;

void test(int Num) {
mHoge = Num;

}
};

みたいな抽象クラスを継承するHugaというクラスのインスタンスを作った時、

関数testの実体はインスタンスの数だけ存在するのでしょうか?

492 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:16:15.94 ]
しません

493 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:19:11.75 ]
しない



494 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:20:15.86 ]
そうなんですね。意外ですmHogeはインスタンスの数だけあるのでしょうか?

495 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:20:17.72 ]
関数は常に一つ!

496 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:32.80 ]
クラスってそういうもんなんですね。

497 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:33.44 ]
491さんではないですが、知らなかった
一つにするときはstaticを使うもんだと思ってました

498 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:33.96 ]
>>494
なかったら困るだろ

499 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 13:42:53.62 ]
IEのインターネット一時ファイルを弄ろうとしているのですが、
普通の方法(↓)ではアクセスできないみたいなんです。
fopen( "C:/.../Temporary Internet Files/sample.jpg", "r" )
戻り値:null
何か特別な処理が必要なんでしょうか?

500 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 13:52:28.98 ]
馬鹿には無理

501 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 14:07:00.59 ]
IEのキャッシュを扱うには専用のAPIを使う必要がある。
GetUrlCacheEntryInfoEx とか。

502 名前:499 mailto:sage [2012/01/19(木) 14:17:04.90 ]
すみません。自己解決しました。
IEのインターネット一時ファイルの実体(?)って
"/Temporary Internet Files/Content.IE5/"の更に下にあるんですね。
エクスプローラーではTemporary Internet Filesの直下にファイルがあるように見えたんですが、
コマンドプロンプトで見て気づきました。

503 名前:499 mailto:sage [2012/01/19(木) 14:19:27.28 ]
>>501さん
情報ありがとうございます。
GetUrlCacheEntryInfoExで調べてみます!



504 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 01:56:49.32 ]
char hoge[10];
int len = strlen(hoge);
これってlenに9が返ってくるとは思わないほうがいいですか?
帰ってこないとしたらどう初期化すべきですか?

505 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:00:01.82 ]
int len = (sizeof(hoge) / sizeof(hoge[0])) - 1;

506 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:40:25.88 ]
9がほしいなら
char hoge[10];
int len = sizeof(hoge)-1;
でおk

507 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:50:14.66 ]
特に決まった初期化の方法はない感じですかね?
ともあれレスありがとうございます

508 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 07:56:40.51 ]
>>504
初期化したいのなら、hoge[0] = '\0';で。

509 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 08:09:46.09 ]
>>504
char hoge[10] = {}; で。

510 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 09:55:24.58 ]
hoge[0] = '\0'ってヌル文字でしたっけ
するとstrlen(hoge) で0になっちゃいませんか?

>>509
これはどういう動作になるんでしょうか?
strlen(hoge)が9に約束されます?

511 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:12:30.97 ]

template <unsigned int N> void init(char (&)[N]) {
for(unsigned int i = 0 ; i < N - 1 ; ++i) a[i] = 1;
a[N - 1] = 0 ;
}

char a[10] ;
init(a) ;

cout << strlen(a) << endl ;

512 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:24:30.57 ]
>>510
???
hogeに何が入っているかに因るから
strlen(hoge)が保証される分けない。

strcpy(hoge, "a");
ってやった後に
strlen(hoge);
ってすればstrlen(hoge);は1であることが保証されるけど、

strcpy(hoge, "abcdefghi");
の後に
strlen(hoge);ならstrlen(hoge);が9であることが保証される。

hogeの定義により確保したmemoryの大きさを保証したいのなら
>>506の言うとおりsizeof(hoge)とする以外にないよ。

513 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:53:05.54 ]
やはりそういういうことですよね
>>511参考にさせて頂きます



514 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:07:59.47 ]
配列の長さと文字列の長さを混同しないようにな。
strlenはたんに'\0'の前までの数を数えているだけなのだから。

515 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:09:49.37 ]
配列に格納できる最大長が欲しいのか。
それならそうと最初からそう言えと。

516 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:10:16.96 ]
char hoge[] = "123456789";

517 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 13:00:26.21 ]
コンパイル時に決定される配列の大きさを実行時に求めたいという要求が理解出来ない

518 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 10:41:15.47 ]
コンパイル時に決定されるかどうかは関係なく、
ポインタから配列の大きさを求めることは出来るのか?という疑問です
もっと言えば、関数にポインタだけ渡しておけば、あとは勝手にサイズも見てもらって処理するような処理は可能か?ということです
上では一応sizeof使えとのことでしたが、ポインタの渡し方によっては
ポインタそのもののサイズを返したりするので、結局素直に初期化する関数を作るべきかなあ

519 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:05:15.29 ]
>>518
vector使えでFA

520 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:05:33.02 ]
vector渡せばいい

521 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:10:22.47 ]
サイズ付きの構造体、クラスでPK

522 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:42:01.82 ]
> ポインタから配列の大きさを求めることは出来るのか?という疑問です
これを書こうよ。。。
答え:できない

523 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:45:38.89 ]
すいません、疑問がうまく文章になるまで時間がかかりまして。
vector考えてみます



524 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 12:59:38.80 ]
// func.cpp
namespace {
template <unsigned int R> inline BigInt Factor(BigInt const & n) { return n == 0 ? 1 : n * Factor<R - 1>(n - 1); }
template <> inline BigInt Factor<0>(BigInt const & n) { return n == 0 ? 1 : n * Factor<256>(n - 1); }
}
BigInt factor(BigInt const & n) { return Factor<256>(n) ; }

// func.hpp
BigInt factor(BigInt const & n);


こんな感じのコードを見かけたんですけどこのテンプレートになにか意味あるんですか?

525 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:14:48.03 ]
>>524
どこら辺を意味がないと思ったの。

526 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:49:19.71 ]
>>525
なんで普通に再帰しないのかなーって

527 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:51:40.62 ]
>>526
再帰の限界の数の回避とかなのかね。

528 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:18:57.37 ]
こんなならループのほうがよさそうに思えるが

529 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:49:56.34 ]
test

530 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 16:48:29.11 ]
>>528
テンプレートでコンパイル時に計算させようとすると再起しかないんじゃないの。


531 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:21:33.84 ]
>>530
そういう意味じゃないとおもう

532 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:53:13.43 ]
テンプレート関数を特殊化したり、
テンプレート引数の代わりに関数引数で再帰している
よくわからないコード

533 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:53:29.35 ]
>>528
コンパイル時定数として階乗の結果が欲しいのをループじゃ対応できないのでは?



534 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 18:03:02.90 ]
問題は、100やそこらの再帰じゃ済まない階乗の値をBigIntで持つ必要が本当にあるのかどうか。

535 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 18:26:06.14 ]
inline展開されてオーバーヘッドが無くなるというメリットはありそうだがこのサンプルでは無意味だろうな

536 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 20:12:08.33 ]
>>535
コンパイル時に計算されるからインラインに展開してオーバーヘッドがなくなるとか関係ないのでは?

537 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 21:30:45.28 ]
>>530,533,536

それはもしかしてこんなコードじゃないのかい
ttp://codepad.org/t8ejWQ2g

538 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 10:01:51.79 ]
質問です。

template <typename T = char>
class Hoge
{
};


void test(void)
{
  Hoge h;
}

テンプレート引数 T に対して char を与えてやってるので、
Hoge を使用する際、テンプレート引数を与えなくてもよさそうなのに、

error C2955: 'Hoge' : クラス テンプレート を使用するには テンプレート 引数リストが必要です

となります。どうしてですか?

どうぞよろしくお願いします。


VS2008 pro
Win7 pro x64


539 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 10:03:11.96 ]
Hoge<> hoge;

540 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:31:02.17 ]
つまり、class Hogeとtemplate<>class Hogeの区別がつかないんだな。

541 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:49:44.40 ]
GPU計算に興味が有るんだけど、C++だとOpenCLってやつが一般的?
C++で使えて入門に向いてるのって何があるかな?

542 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:53:37.64 ]
下記関数は5ms周期で実行されています。
CTMAXが200を超えたとき、例えば201に
なったとき、10ms周期の処理が5ms後に実行
されるという現象がおきます。
下記のように毎回実行される5msの処理は仕方
ありませんが、10ms以降の処理は実行タイミング
がかぶらないようになっています。この状態でさ
らに実行タイミングがずれないような処理を作りた
いのですが、思いつきません。できるものでしょうか?
void time(void){ #define CTMAX 200 static int ct;
if(++ct > CTMAX) ct = 0;
func5ms();/* 5ms処理 */
if(ct & 0x01) == 0)
func10ms();
else{ if(ct & 0x02) != 0) func20ms();
else{ switch (ct){
case 1: case 21: case 41: case 61: case 81:
case 101: case 121: case 141: case 161: case 181:
func100ms(); break;
case 13: case 53: case 93: case 133: case 173:
func200ms(); break;
case 5: case 105:
func500ms(); break;
case 9:
func1s(); break;
}}}}

543 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:12:36.72 ]
よく分からんけど、

s = milisecond();
do_something();
e = milisecond();

if(e-s<200))
sleep_milisecond(200-(e-s));

ぐらい?



544 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:24:07.29 ]
とりあえずこういうこと?
ctって0〜200までの値、つまり
201個の値を取ることになっていたんだけど、
そこがまず問題だよね。
1005ms が 1000ms と等しいよ。

本当ならば、>= としなければならないよね?
// if(++ct >= CTMAX) ct = 0;
or
ct++;
ct %= CTMAX;


545 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:34:49.47 ]
void time(void)
{
#define CTMAX 200
static int ct = 0;

// 0 <= ct <= 199
ct %= CTMAX;

mod_10 = ct % 10;
mod_100 = ct % 100;
mod_200 = ct % 200;
mod_500 = ct % 500;

if(!mod_500)
func500ms();
if(!mod_200)
func200ms();
if(!mod_100)
func100ms();
if(!mod_10)
func10ms();

ct++;
}


546 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 13:52:36.91 ]
素直に書いた方がoptimize有利なんだから
ct = (ct + 1) % CT_MAX;


547 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:01:39.16 ]
time()を初めて実行した時に困るでしょ。
ct = 1;で実行することになって起動後9ms, 19ms, 29ms, ...
で実行することになるよ。
人が書いたコードにbug入れる奴っているんだよな
迷惑なんだよな

548 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:06:09.81 ]
そもそも標準関数と同じ名前の関数を作るな間抜け。

549 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:10:55.35 ]
これって組み込みだから問題ないと思って特に指摘しなかったよ。
time.hなんて高尚なヘッダは存在しないんじゃないの?

550 名前:538 mailto:sage [2012/01/24(火) 16:33:33.09 ]
>>539
ありがとうございます。助かりました。

551 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 07:51:50.37 ]
結局>>542はどうなった?
自分は解決したから後はシーラないってか?

552 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:36:12.44 ]
>>544
さんのいうとおり++ct >= CTMAXとしただけでとりあえず
自分の作ったやつでも正常に動くっぽいですね。

ちなみに関数名にtimeなんて使ってません。書き込むとき
面倒なんで簡単な名前に変更しただけです。

>>545
のプログラムはわかりやすいですが、0のとき全部実行され
てしまうのが難ですね。
それからmod_10で考えると10回に1回しか起動しないので、
それだと10msじゃなくて50ms周期になってしまいます。

553 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:43:21.64 ]
>>552
> ちなみに関数名にtimeなんて使ってません。書き込むとき
> 面倒なんで簡単な名前に変更しただけです。

それにしても標準関数と名前がかぶるってねーだろ



554 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:51:57.71 ]
まぁ549さんの言うとおり、組み込みなんでtime.hなんて
使いませんし。

555 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:14:03.52 ]
>>552
bug指摘されちゃった。
static int ct = 0;
if(ct == 0){
ct = 1;
return;
}
投稿した後に、これでうまくいくって気づいてはいたんだけどね。。。
この後はctが0になることはなくて、
0と等価な200がctの値としてくるから問題ないよね。
これくらい思いついてよ。。。

> それからmod_10で考えると10回に1回しか起動しないので、
> それだと10msじゃなくて50ms周期になってしまいます。

こっちは気づかなかった。きちんとdebugしてうまい具合にしてよ。

556 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:19:00.51 ]
実際に問題になるかどうかじゃなくて、そういう紛らわしいことはするなってこった。

557 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:24:21.70 ]
ct += 5とするか、
time()を1ms毎に実行するようにするかして修正すれば良さそうだね。
後は任せた。

void time(void)
{
#define CTMAX 200
#define POLLING 5
static int ct = 0;
if(ct == 0){
ct = POLLING;
return;
}
// 0 <= ct <= 199
ct %= CTMAX;

mod_10 = ct % 10;
mod_100 = ct % 100;
mod_200 = ct % 200;
mod_500 = ct % 500;

if(!mod_500)
func500ms();
if(!mod_200)
func200ms();
if(!mod_100)
func100ms();
if(!mod_10)
func10ms();

ct += POLLING;
}

558 名前:549 mailto:sage [2012/01/25(水) 10:29:57.73 ]
自分で実装する時はtime.hがないからっていって、
time()やらtime.hに含む関数名を使ったりしないよ。
本当は、time()なんて関数を自作するのはまずいし、
他人に披露する時に借りの名前とするのも、
あらぬ誤解を招きかねないのでまずいんだけど、
でも、2chに書き込まれるような関数名に意見するのも面倒だし、
組み込みで使っている関数だって事は一見して明らかだったので、
time.hを使うことはまずないだろうって事であえて指摘しなかったんです。

まあ、本当は>>549がおかしいんだよ。
一々指摘するのも嫌だから指摘しなかっただけでさ。

私が名付けるとすれば、polling()かなぁ

559 名前:549 mailto:sage [2012/01/25(水) 10:31:25.79 ]
>>558
まあ、本当は>>549がおかしいんだよ。
は間違いで、
まあ、本当は>>542がおかしいんだよ。
が正しい。

560 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:47:03.80 ]
>>542
コードを書く前にまずは何をしたいのかを正しい日本語で人に説明する訓練をしなさい

561 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 21:39:52.68 ]
てすと

562 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:12:52.00 ]
class Hogeを事前に宣言しておいて、
あとから定義したいと思うのですが、うまくできません。
何か解決方法はありますか?


// 宣言
class Hoge;
Hoge func( );


int main( )
{
Hoge h = func( );

return 0;
}


// 定義
class Hoge
{
public:
};

Hoge func( ){ return Hoge(); }

563 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:19:17.13 ]
//hoge.h///////////////
// 宣言
class Hoge;
Hoge func( );
///////////////////////

//hoge.cpp/////////////
#include "hoge.h"

int main( )
{
Hoge h = func( );

return 0;
}


// hoge定義
class Hoge
{
public:
};

Hoge func( ){ return Hoge(); }
/////////////////////////////
ってことなら無理
Hoge h = func( );この時点でHogeの定義が見えてないとダメ
int main()の前に hoge定義を持ってこないと



564 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:21:27.99 ]
func()がHogeではなくHoge*(またはスマートポインタ)を返すようにすれば大丈夫なはずだが、
設計を見直したほうがいいような気がする。

565 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:37:44.02 ]
std::map<boost::shared_ptr<Hoge>, value_t>から要素を生ポインタで検索したいという状況に陥ったのだけど、何かいい手はないですか?
とりあえず動くコードとして、
mapの要素を巡回してshared_ptr<Hoge>::getの返り値と検索キーを比較
一致していたらそのイテレーターの指す要素をmから削除
としているのですが、これではO(N)になってしまいmapの利点を生かせません


566 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:44:01.91 ]
生ポインタをキーにする。

567 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:03:22.81 ]
スマポをキーにしようという発想が理解できない

568 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:44:20.83 ]
検索キーになるポインタをshared_ptrに放り込む。
カスタムデリータに何もしない関数を指定してdeleteを防ぐ。
でも危険度は生ポインタをキーにするのとかわらないな。

569 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 09:47:26.46 ]
>>568
それって別ポインタとみなされて比較うまくいかないと思うけど

570 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:08:13.74 ]
コードが長くなってきたので、クラスの宣言と定義を、hとcppに分けたいのですが
下記のような場合、どう分ければいいでしょうか?

class Hoge {
private:
 const int m_x;
public:
 Hoge(int x = 3) throw() : m_x(x) {
  //do something 1
 }
 void func(int a = 5) {
  //do something 2
 }
};

571 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:31:36.35 ]
// Hoge.h
struct Hoge {
Hoge(int x = 3);
void func(int a = 5);
private:
const int m_x ;
};

//Hoge.cpp
#include "Hoge.h"
Hoge(int x) : m_x(x) { do_something_1(); }
void Hoge::func(int a) { do_something_2(); }


572 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:46:52.59 ]
>>571
ありがとうございます
理解できました

573 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:27:31.12 ]
Cを独学で学んでいる入門者です
コンパイル→実行について教えてください

PCは富士通のノートパソコンで
OSはvista home premium
エディタはemacs
コンパイラはMinGW
です

ソースファイルをコンパイルして実行する際、
M-x compile
だと上手くいかないので、

M-x shell
から
>gcc -std=c99 ファイル.c
でコンパイルしています

ただ、毎回gcc -std=c99を書き込むのは煩わしいし、複数のソースファイルをコンパイルして実行する方法がわかりません。

Emacsで複数のソースファイルをC99で?コンパイルして、実行する効率的なやり方が知りたいです



574 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:40:29.72 ]
IDE(統合開発環境) vs emacs(テキストエディタ)
kohada.2ch.net/test/read.cgi/prog/1244310984/

575 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 07:41:57.55 ]
>>573
make
もしくはbatかシェルスクリプト

576 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 07:46:48.53 ]
ふつうmakeだろ

577 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 08:57:23.22 ]
GetOpenFileName/GetSaveFileNameで
lpstrFileに確保するバッファの大きさを決めるにあたって
あらかじめ受け取るファイル名の長さを取得できないでしょうか。

長さが足りない場合再起不能だし、かといって使われないのに数キロも確保したくないし
それでも足りない場合だってあるだろうし。

GetWindowTextに対するGetWindowTextLengthのような
関数があればよいのですが、この場合ユーザーからの入力なので
どうしたものやら。

578 名前:573 mailto:sage [2012/01/30(月) 09:04:33.22 ]
ありがとうございます。

Makeの使い方を調べてみます。

579 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:32:00.09 ]
>>577
MAX_PATH分確保しとけばいいだろ

580 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:36:18.61 ]
大きなバッファを用意しても、260文字以上は格納されないんですか?

581 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:04:06.02 ]
WinAPIならファイル名読むタイプのAPIは大抵バッファに読み込んだ文字数返るから
その文字数とバッファ長比べてバッファが足りてないと判断したら失敗とみなしてバッファを伸ばしてリトライすればいいよ

582 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:12:39.59 ]
つーか、そもそもCommonDialogで256文字以上返せるのか?
そうでないなら260どころか、257で充分だ。

583 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:22:41.08 ]
ttp://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx



584 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:01:42.03 ]
仮想関数の戻り値が、継承先の型でもOK、っていうルールの名前を何ていったっけ?

585 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:11:23.37 ]
共変性かな

586 名前:584 mailto:sage [2012/01/31(火) 07:55:25.34 ]
>>585
それだ!ありがとー!

587 名前:577 mailto:sage [2012/01/31(火) 16:47:56.33 ]
おお、ディレクトリ含めて260文字とかいれたら、無効ですって言われた・・・
ってことは、260文字以上入れたかったら、自分でダイアログ作れってことか・・・

588 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:03:36.11 ]
32ビットWindowsなんだけど
アクセスして良いポインタかどうかを判定しようとしていて

ぬるぽ 0
初期化されてない有効なヒープ 0xcdcdcdcd
解放されたヒープ 0xfeeefeee

この他に、一見してアクセスできなそうなポインタって何かあるかな。

589 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:06:29.89 ]
そんなんで判断するなよ

590 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:07:41.88 ]
0xdeafbeef
0xdeaddead
0xbeaffeed

591 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 18:05:29.85 ]
自分で確保してない領域にアクセスすんな。

592 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 19:51:41.31 ]
外部から渡される未知のポインタなんよ

593 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:47:10.19 ]
なにそれ怖い



594 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:50:48.03 ]
悪魔召喚ポインタ

595 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:17:34.81 ]
絶対に逆参照してはいけな

596 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:23:31.08 ]
書き込んだ名前の人間は必ず死ぬという死神のポインタ


597 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:26:01.82 ]
C系列って恐ろしい言語だったんだな

598 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:29:14.36 ]
しょうもないネタには食いついてやがんの






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

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

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