09/09/17 22:22:59
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.67【環境依存OK】
スレリンク(tech板)l50
【アップローダー】(質問が長い時はココ使うと便利)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
2:デフォルトの名無しさん
09/09/17 23:01:03
○ >>1 乙 もうお前に用はない
く|)へ
〉 ヽ○ノ
 ̄ ̄7 ヘ/
/ ノ
|
/
|
/
3:デフォルトの名無しさん
09/09/18 00:41:55
◤◥◣
▂ ◢◤▀〓▲▂▐ ▂ ▪ ▂▄▅▆▇■▀▀〓◣▬ ▪ ■….
▍ ▼ ◥◣▼ .▂▅■▀ ▪ ■ ▂¨ ∵▃ ▪ ・
▀▍ ◢◤ ▅ ▐◣ ◢◤ ◢▇█▀ ¨▂▄▅▆▇██■■〓◥◣▄▂
▍ ▅ ◢■ ▍ ■ ▂▅██▅▆▇██■〓▀▀ ◥◣ ∴ ▪ .
▐ ▂ ▐◣ ▐▅▇███████▀ ▪ ∴ ….▅ ■ ◥◣
▀◣▂ ▀◥▅▆▇████████▆▃▂ ▪ ■▂▄▃▄▂
◥◣▄▂▄▅▀ ■ ¨ ▀▀▀■▀▀▀ ▪ ■ ∴‥
↑はUnicode対応のブラウザで見るとコーヒーを吹くプーさんが表示されますが、これを
1.正しく画面に表示する
2.テキストファイルに出力し、再入力してから画面に表示してもやはり正しく表示される
3.出力されたテキストファイルをUnicode対応のテキストエディタやブラウザで表示しても正しく表示される
ようにするC++のコードを書いてください。
多くの人にはとても難しいです。
4:デフォルトの名無しさん
09/09/18 01:13:38
MFC使えば簡単だけど
C++標準でやろうとすると死ぬな。
5:デフォルトの名無しさん
09/09/18 01:21:12
またあやふやなコトを…
6:デフォルトの名無しさん
09/09/18 04:23:11
たとえAAであってもディズニーキャラはモザイク掛けといた方がよくね?
7:デフォルトの名無しさん
09/09/18 12:10:11
wchar_t s[] = L"ハート♡髑髏☠DANGER☣";
wcout << s << endl;
wcout.clear();
wcout.imbue( locale( "Japanese" ) );
wcout << s << endl;
んー。動かん。
URLリンク(codepad.org)
8:デフォルトの名無しさん
09/09/18 13:32:14
バイナリモードでやったら
9:デフォルトの名無しさん
09/09/18 16:00:44
long double を使う必要が出たため、
Turbo C++(2005?)で long double を double へ変換するDLLを作成し、
VC2008EEで呼び出そうとしていたところ、関数コール部分で以下のエラーが出ました。
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
dumpbin でチェックしたところ、関数名はあっているようでしたし、
defファイルを作成し、lib /machine:i386 /def: で lib を作ってリンクもしています。
何が問題なのでしょうか?
10:デフォルトの名無しさん
09/09/18 16:34:37
URLリンク(download.microsoft.com)
↑を読んでみたけど、マイクロソフトでさえUnicodeを正しく表示できないのにワロタ。
11:9
09/09/18 18:00:13
追記です。
libを使用せず、LoadLibrary()を使用しても同じ結果でした。
12:デフォルトの名無しさん
09/09/18 18:12:55
とりあえず呼び出し規約は一致させてるのか
13:デフォルトの名無しさん
09/09/18 18:32:41
指定したURLのHPのソースコードを取ってくることは可能でしょうか?
14:デフォルトの名無しさん
09/09/18 18:36:59
>>13
HTMLソースって意味なら環境依存の方法で可能なことが多い。
15:9
09/09/18 18:38:19
>>12
libリンクの方だと__stdcallではVCの方でリンクエラーが出ていました。
そのため、libリンク方式の方は指定していません。
LoadLibrary()の方は__stdcallを指定しています。
16:デフォルトの名無しさん
09/09/18 18:38:32
>>14
C++標準関数でありませんか?
調べると、.NETやMFCなら沢山出てくるのですが・・・
17:デフォルトの名無しさん
09/09/18 18:39:39
>>13
ブラウザがやってることと同じことをやるだけだな。
HTTPプロトコルに従った手順(テキストベースの送受信)でやりとりして得るだけの話だし
18:デフォルトの名無しさん
09/09/18 18:41:43
>>16
言語レベルでそこまでの範囲を想定してないから、標準では無い。
非標準で、その手の面倒をみてくれるライブラリは あるかもね
19:デフォルトの名無しさん
09/09/18 18:46:01
>>15
呼び出し側の 宣言が狂っているんじゃないの?
lib式)
プロトタイプ宣言の呼び出し規約定義はちゃんとあわせてるのか? (マンゲリング抑制も含めて
LoadLib式)
GetProcAddress() の戻りをどうキャストして使ってるんだ?
20:デフォルトの名無しさん
09/09/18 18:52:50
>>17,18
ありがとうございます。
もう少し調べてみます
21:デフォルトの名無しさん
09/09/18 18:53:58
>>16
C/C++標準は、socket(ネットワーク)を扱えるものは何一つ無い。
どこぞでも書いたが、(Win環境ならwgetを入手して)
system("wget")が一番楽かもしれない。
22:9
09/09/18 19:28:43
>>19
双方同じヘッダをインクルードして使用しています。
ヘッダ
#ifdef _USRDLL
# define __PORT __declspec(dllexport) /* DLLを作る場合 */
#else
# define __PORT __declspec(dllimport) /* DLLを使う場合 */
#endif
#ifdef __cplusplus
extern "C"
{
#endif
__PORT double __stdcall LONGDOUBLE( void* p );
#ifdef __cplusplus
}
#endif
LoadLib式は以下の通りです。
HMODULE h;
FARPROC p;
double (*func)( void* );
h = LoadLibrary( "longdouble.dll" );
p = GetProcAddress( h, "LONGDOUBLE" );
func = (double (*)(void*))p;
変数 = (int)func( long doubleが入っているメモリへのアドレス );
FreeLibrary( h );
23:デフォルトの名無しさん
09/09/18 19:31:53
VC++2008と32bitXPを使っているのですが、
64bitのOSにするとint等のビット幅以外になにか変わるところはあるんでしょうか
24:9
09/09/18 19:35:40
>>19
>マンゲリング抑制
とは何のことですか?
ググってみましたがよくわかりませんでした。
25:9
09/09/18 19:41:18
>>19
double (__stdcall *func)( void* );
に変更したところ、問題なく動作しました。
ありがとうございました。
26:デフォルトの名無しさん
09/09/18 21:26:23
>>23
むしろ、intの大きさは変わらない。
変わるのはポインタ・ハンドル・L/WPARAM・LRESULT・size_tなどの大きさ。
これにより、アドレス空間1プロセス4GB(うちユーザが使えるのは2-3GB)という制限が大幅に緩和される。
あと、x86→x86-64だとレジスタの増加で高速化が期待できる。
>>24
extern "C"のこと。
27:デフォルトの名無しさん
09/09/18 21:34:55
>>26
あれ、そうなんですか。もう少しよく調べてみます
ありがとうございました
28:デフォルトの名無しさん
09/09/18 21:56:11
多数派はLP64なのにVC++だけは、なぜかLLP64
29:デフォルトの名無しさん
09/09/18 21:59:00
Windowsプログラミングだと、LRESULT,WPRAM,LPARAMが64bitになっていてはまる場合もある。
LPARAMをlongに代入できないとか。
30:デフォルトの名無しさん
09/09/18 22:13:44
GetWindowLongPtr使うと警告出されたりとか
31:デフォルトの名無しさん
09/09/18 22:19:51
>>30
それは/Wp64をオフにすればいいだけ。
もう64ビット対象にばんばんビルドして確かめてくれってことで、
VC++ 2008では/Wp64オフが初期設定となっているから、それにならえばいい。
32:デフォルトの名無しさん
09/09/19 06:41:02
入出力マニュピレータ endlとか
なんで引数どころか()まで省略できるの?
33:デフォルトの名無しさん
09/09/19 07:21:21
>>32
それらを書くか書かないかで意味が違う。省略できているわけじゃない。
34:デフォルトの名無しさん
09/09/19 09:48:11
詳しく
35:デフォルトの名無しさん
09/09/19 10:46:35
int a,b,c,d,e;の中にランダムに整数が入ってるものとします。
この5つの中でいちばん数が小さい変数を見つけるにはどうやるのが良いでしょうか?
36:デフォルトの名無しさん
09/09/19 11:00:13
>>35
4回比較する
37:デフォルトの名無しさん
09/09/19 13:16:18
暗黙のアップキャストを抑制して、明示的にキャストした場合のみ
アップキャスト可能にすることって可能でしょうか?
38:デフォルトの名無しさん
09/09/19 13:23:29
暗黙のアップキャストを抑制する必要性自体がほとんどないし、できなかったと思う。
具体的に必要な場面を示せばなんか方法はあるかもしれない。
39:デフォルトの名無しさん
09/09/19 13:32:40
>>37
private 継承して BaseType& Base() を用意するとか?
40:デフォルトの名無しさん
09/09/19 14:17:48
class A;
class B : A;
func(A);
func(B);
templateの絡みで、こんな感じに親クラスと派生クラスを
オーバーロードした同名関数で処理したいのですが。
41:デフォルトの名無しさん
09/09/19 14:27:49
>>40
ん?それなら普通にオーバーロードで済まないか?
A, B の例でいいから、今できてるところまでひととおりのコードを貼ってみるといいかもね。
42:デフォルトの名無しさん
09/09/19 14:36:15
class Hoge {・・・};
int main(void)
{
Hoge h;
h; // ※
return 0;
}
※をエラーに(できればコンパイル時)することはできますか?
43:デフォルトの名無しさん
09/09/19 14:50:46
0除算でもしてみては
44:デフォルトの名無しさん
09/09/19 14:53:30
>>42 無理
45:デフォルトの名無しさん
09/09/19 15:15:22
C/C++は評価した値を捨てる事ができる言語だからな
Pascalとは違う
46:デフォルトの名無しさん
09/09/19 15:22:16
>>41
オーバーロードが用意されていればキャストされないのですね。
すみませんでした。
47:ぅゅ ◆e6.oHu1j.o
09/09/19 23:39:19
>>42
Cだとそういうの警告でるよ
エラーだすの実行時でいいならboolオペレーターっていうのがある
operator bool(){
printf("era-");
return 0;
}
48:ぅゅ ◆e6.oHu1j.o
09/09/19 23:40:47
あ、すまん勘違い
それじゃboolオペレーターの実行されねーや
49:デフォルトの名無しさん
09/09/19 23:42:18
>>47
その警告に C と C++ は関係ない。
その operator bool を Hoge に宣言しても h; では呼び出されない。
50:デフォルトの名無しさん
09/09/20 02:04:05
>>42
のコードって規格ではどういう動作するように決められてるの?無視するだけ?
51:ぅゅ ◆e6.oHu1j.o
09/09/20 08:03:51
>>47borlandでは.cのとき警告
52:デフォルトの名無しさん
09/09/20 10:15:49
Carクラスがあるとします
Car car1;
とオブジェクトを作成するのと
Car* pCar;
pCar=new Car;
とメモリを確保するのと、どういう短所長所があるのでしょうか?
53:デフォルトの名無しさん
09/09/20 10:27:03
前者はスコープを抜けるときにオブジェクトが自動的に削除される。そして生成廃棄が速い
後者は不要なオブジェクトを手動でdeleteする必要がある。そして生成廃棄が遅い。
なのに、なぜ後者が有るかというと、生成と廃棄のタイミングを自由に操作できるから。
54:デフォルトの名無しさん
09/09/20 10:31:24
>>53
なるほど、ありがとうございます
グローバル変数ほど長く使いたくない場合に使うんですね
55:デフォルトの名無しさん
09/09/20 13:05:14
templateの>>を離して書くのがだるいんですがこれはもうどうしようもないんですか?
56:デフォルトの名無しさん
09/09/20 13:37:34
そんなやならdifineでも使ってみては
57:デフォルトの名無しさん
09/09/20 13:42:31
>>55 c++0xで正式に実装される。
VC8でもできるから、できるコンパイラを使えばいい。
58:デフォルトの名無しさん
09/09/22 11:53:26
struct base
{
virtual void hoge(){・・・};
};
struct sub : public base
{
virtual void hoge(){・・・};
};
int main(void)
{
sub s;
s.hoge();
return 0;
}
↑見たいな感じに書いても仮想関数の検索コストって掛かるもの?
静的に決定できるからコストかからないと思うんだけどどうなんでそか?
59:デフォルトの名無しさん
09/09/22 12:00:13
>>58
コンパイラによるとしか
60:デフォルトの名無しさん
09/09/22 13:49:23
>>58
VCで確認したら、sub::hogeを直接コールしてた。
61:デフォルトの名無しさん
09/09/22 15:38:50
>>58
BCC(ECC6.2.0)もsub::hogeを直接コールしてた
最適化が糞なコンパイラですらこれだから大抵のコンパイラは
出来るだけ静的に解決出来る所はするのではないか
62:デフォルトの名無しさん
09/09/22 15:45:10
細かな部分で挙動がクソなだけでBCCの最適化は普通に良いよ
63:デフォルトの名無しさん
09/09/22 15:48:48
gccも直接sub::hogeしてた
64:デフォルトの名無しさん
09/09/22 17:07:54
みんなテストさんくすこ
65:デフォルトの名無しさん
09/09/22 17:26:08
というか直接呼ばないようにコンパイルする意味が分からないってレベルだしな
まぁでも、確実な根拠があると一応ちょっと安心かな
66:デフォルトの名無しさん
09/09/22 17:35:53
>>58
VCでこうだと、テーブルジャンプになってた。
sub* s = new sub();
s->hoge();
67:デフォルトの名無しさん
09/09/22 17:38:31
そりゃそうだろw
68:デフォルトの名無しさん
09/09/22 17:41:20
>>67
これ、最適化したらまずいの?
69:デフォルトの名無しさん
09/09/22 17:58:52
それの場合、最適化するコンパイラは無さそうだけどなぁ
sが実際に保持している型をコンパイルタイムで追尾しなきゃならないから、処理が
重くなる割には性能向上が全く期待できない(レアケースすぎるから)
規格上、確実にs->hoge()の時点でsのポイントするインスタンスがsub型と確定可能
かどうか、というのもちょっと確信は持てない(newの辺りが特に)
まぁ実験するのは面白いかも
70:デフォルトの名無しさん
09/09/22 18:13:46
ちょっと見た目では、sub::hoge()以外が呼ばれる余地がないと思うけど、
なんか落とし穴でもあるのかね。
最適化されないってのは。
71:デフォルトの名無しさん
09/09/22 18:28:56
>>70
new が例外起こす場合を考慮すると、s == NULLもあるから
sub::hoge()は呼べないのでは。
つーか new がオーバーライドされてたらもはや何でもあり。
72:デフォルトの名無しさん
09/09/22 18:29:17
ポインタが実際に指している型を静的に追尾するメリットは、>>66のようなコードが
ごく僅かに最適化されるくらいだと思う。
実用的にはメリット皆無に限りなく近い予感。コンパイルも遅くなるだろうし。
73:デフォルトの名無しさん
09/09/22 18:30:09
>>71
new で例外が発生すれば s への代入も、それに続く s->hoge() の呼び出しも行われない
から、それは関係ない。
74:デフォルトの名無しさん
09/09/22 18:34:06
需要が無いor真面目に書けば最適化不要、って場合は最適化を期待しない方がいい
75:デフォルトの名無しさん
09/09/22 19:29:57
s->hoge();の時点でアップキャストもダウンキャストもなく、
正しくsubのインスタンスを指してることをどうやって保障するかじゃない?
人間には簡単に分かる事もコンパイラだと100万行のコードでも同じ動作しなきゃならんと思うとかなり面倒な気がする
76:デフォルトの名無しさん
09/09/22 19:48:59
vc8だとs.hogeはインライン展開、s->hogeは仮想呼び出し
intel c++だとs.hogeもs->hogeもインライン展開された。
77:デフォルトの名無しさん
09/09/22 20:19:27
流れと無関係にsubという識別子が気になるPerl経験者であった
78:デフォルトの名無しさん
09/09/22 23:23:40
Intelコンパイラさんマジパネー
79:デフォルトの名無しさん
09/09/24 23:58:38
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ロープレのイベントなんかで、使う分だけ
メモリを確保したいのですが、こんな感じでいいでしょうか。
メモリは正しく確保できているか、
通常の配列より容量を削減できているかあたりです。
80:デフォルトの名無しさん
09/09/25 00:14:25
>>79
これならほとんどの場合において配列だけの方がメモリ効率はいいよ
開発効率をあげたいなら STL を使うといいよ
目的が、作ることより勉強優先っていうなら苦しむといいよ
81:デフォルトの名無しさん
09/09/25 00:40:41
void hogehoge(double x0, double x1, double dx, const fugafuga& fuga)
{
for(double x = x0; x < x1; x += dx) fuga(x);
}
これを
template <class Iterator>
void hogehoge(Iterator begin, Iterator end, const fugafuga& fuga)
{
for( ; begin != end; ++begin) fuga(*begin);
}
という形にしたいんですけど新しいIterator作る以外になにか手はありますか?
82:デフォルトの名無しさん
09/09/25 01:09:43
>>80
ありがとうございます。
メモリは、3つのイベントを作るとすると、
配列だと作った数に関係なく 8 * 32 バイト、
ポインタだと 4 * 32 + 8 * 3 で少なくできると思ったのですが。
(4はポインタのサイズ、8は構造体のサイズ、
32はイベントを作れる最高の数)
また、構造体のサイズは、実際のゲームではもう少し大きいです。
その効率の悪さについてググってみたのですが、
連続な領域でない事が関係しているんですかね。
stlはc++の機能みたいですね。
ヒントになる事もありそうなので勉強してみます。
83:デフォルトの名無しさん
09/09/25 02:42:11
>>81
配列や標準コンテナに入れて呼び出すとかでいいの?
84:デフォルトの名無しさん
09/09/25 15:00:42
URLリンク(msdn.microsoft.com)
にあるSendInput関数という関数を使いたい場合は、
SDKというものをインストールしないとダメなのでしょうか?
85:デフォルトの名無しさん
09/09/25 16:08:07
環境による
86:デフォルトの名無しさん
09/09/25 16:47:39
staticメンバ関数から
同じクラスの中にある他のメンバ変数(静的か非静的かは問わず)を
操作することはできないのですが
どうしても操作したい場合には
どういった方法をとることができるのでしょうか?
87:デフォルトの名無しさん
09/09/25 16:53:15
引数で渡せばおk
88:デフォルトの名無しさん
09/09/25 17:17:10
staticメンバ関数じゃなくすればOK
staticメンバ関数は特定のインスタンスに対する操作ではないので、
インスタンスごとに存在するメンバ変数にアクセスできないのは当然です。
どのインスタンスのメンバ変数にアクセスしたいのかを指定するには、
(1) 通常のメンバ関数にする → this で指定されるインスタンスにアクセスする
(2) 引数でインスタンスを渡す → 引数で指定されたインスタンスにアクセスする
(3) 別の変数(グローバル変数やstaticメンバ変数)でインスタンスを指定する
のどれかの方法で行います。
89:デフォルトの名無しさん
09/09/25 17:54:25
aaa型のabcという構造体を1.txtに書き出しました。
1.txtの内容をabcに代入するにはどうやればいいんでしょうか?
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp ;
fp = fopen("1.txt", "w");
struct aaa{int a;int c;};
aaa abc;
abc.a=500;
abc.c=555555;
fwrite( &abc, sizeof(aaa), 1, fp ) ;
return 0; }
90:デフォルトの名無しさん
09/09/25 17:56:05
fread()
91:デフォルトの名無しさん
09/09/25 17:58:04
>>81
その例なら、イテレーターとしてint*が渡せるね
92:デフォルトの名無しさん
09/09/25 18:03:07
>>89
出来ればfwrite()、fread()を使う時は"wb"や"rb"で開いた方がいいよ
ランダムアクセスする時にcooked modeだとズレが邪魔をするOSがある
93:デフォルトの名無しさん
09/09/25 19:37:49
>>90>>92
ありがとうございました。がんばってみます
94:79
09/09/25 21:44:42
すいません、別スレで質問したいと思います。
ありがとうございました。
95:デフォルトの名無しさん
09/09/25 21:56:16
>>89
じゃないんだけどバイナリエディタで読むと
23 7A 08 00
で、
00 08 7A 23
の順で読み込めばいいんでしょうかー?
96:デフォルトの名無しさん
09/09/25 22:10:12
リトルエンディアンだとそう。
abc.cの部分についてだよね
97:デフォルトの名無しさん
09/09/25 22:11:14
今のLvだとそこは深く考えなくていいと思うよ。
単純にfreadとfwrite使えばいい。
98:デフォルトの名無しさん
09/09/25 22:14:06
>>96>>97
そうです、ありが㌧
99:デフォルトの名無しさん
09/09/25 22:55:41
fprintf(fp,"%lf %lf %lf %lf %lf %lf %lf %lf",a,b,c,d,e,f,g);
や
cout << a <<" "<< b << setw(1) << c <<" "<< d <<setw(1)
<< e <<" "<< f << " " g << endl;
な感じのタイプ数が多いのを
cout << a << b << c << d << e << f << g << endl;
こんな具合に書きたいんですが、何かいい方法ありませんか。
100:デフォルトの名無しさん
09/09/25 22:58:31
>>99
オペレータをオーバーライド
101:デフォルトの名無しさん
09/09/25 23:00:49
ほとんどオブジェクト指向理解してないので、書いてくれるとうれしいでつ
102:デフォルトの名無しさん
09/09/25 23:01:45
>>100 それはオーバーロード。
>>101 オブジェクト指向とか関係ないから。
103:デフォルトの名無しさん
09/09/25 23:08:34
んじゃ、オーバーロード理解してないんで、書いてくれるとうれしいなぁ...
104:デフォルトの名無しさん
09/09/25 23:12:02
>>103 ググレカス
105:デフォルトの名無しさん
09/09/25 23:41:43
>>3
血をはいてるぷーさんにしか見えん
106:デフォルトの名無しさん
09/09/26 00:33:22
>>92
どこかで聞いたような単語を、意味も知らずに偉そうに使って
恥ずかしくないですか?
107:デフォルトの名無しさん
09/09/26 00:54:51
Class* a; と Class *a; の違いがわかりません。
両者は使い分けないといけないものなのですか?
それとも一方にそろえるべきものなのですか?
108:デフォルトの名無しさん
09/09/26 01:23:04
どこにホワイトスペースを挟もうと違いはない。
109:デフォルトの名無しさん
09/09/26 02:14:06
>>107
Class* a, b; と書いたら
Class *a, *b; という意味にはならず
Class *a, b; という意味になるので注意
それだけ気をつけていればどちらで書いてもOK
110:デフォルトの名無しさん
09/09/26 02:38:08
>>92
cooked modeという言葉を初めて知ることができてよかった。
けどバイナリに対する言葉はアスキーもしくはテキストと言ったりしない?
111:デフォルトの名無しさん
09/09/26 02:59:23
>>110
まあどっちでもいいんだけどな
バイナリモードに対応するのはraw mode
MS/DOS、Windowsのみに存在する区別らしい
Linux、UNIXには区別は存在しない
112:デフォルトの名無しさん
09/09/26 03:07:29
fopen()のtとbは、raw とかcookedとか言わないだろ。
113:デフォルトの名無しさん
09/09/26 03:11:40
頭の中でわかっていればいいんだよ
他人に伝える時はテキストとバイナリと言うべきだけどな
114:デフォルトの名無しさん
09/09/26 03:18:45
まぁMS-DOSが懐かしくはあった
115:デフォルトの名無しさん
09/09/26 03:22:25
素人がインストロールとか言ってたら、ネタにして笑ってるくせに。
116:デフォルトの名無しさん
09/09/26 03:37:26
cooked mode という用語は、
一般的には端末入出力、特に入力時に
編集した結果を受け取るのではなく
Enterやカーソルキーなどの、生の情報を受け取るために使う。
ファイルの\r\n変換に使うことなど、まず無い。
なぜならば、そもそもファイルのベタなデータを
「行」という単位で扱おうとしていること自体
「生のままで扱っていない」から。
\r\n変換のことを cooked mode なんて呼ぶと
陰で笑われるから、気をつけたほうが良いよ。
117:デフォルトの名無しさん
09/09/26 03:48:29
望むところだ
118:デフォルトの名無しさん
09/09/26 03:53:36
>>115
その例が同質のものだと思ってるなら、お前の頭もネタにして笑われるレベルだな。
119:デフォルトの名無しさん
09/09/26 03:57:31
知ったかして恥ずかしい用語の使い方してるってだけのくせして、なにとりつくろってんだ。
120:デフォルトの名無しさん
09/09/26 11:00:53
Linux環境でP2Pボイスチャットを作りたいのですが、C++のオーディオに関する知識がまったくないので、
どのライブラリを使えばいいのかわかりません
オーディオストリーミングに適したライブラリがあれば教えてください
121:デフォルトの名無しさん
09/09/26 11:55:57
>>120
背伸びするのはいいんだけど、背伸びしすぎじゃねーの
オーディオだけじゃなくて、ストリーミングもP2Pの知識もないんだろ?
122:デフォルトの名無しさん
09/09/26 15:14:35
関数についてですが、void aaa();と宣言したあと、
main関数の中でもう一度void aaa();sと書くのは、もう一度プロトタイプ宣言をしていると言うことでしょうか?
またこのように、サイトなどからコピーする時に、よく型をつけたままコピーしてしまい不具合が起きてしまいます。
これを防ぐ方法はないでしょうか?
void aaa();
int main() {
void aaa();///←ココ
return 0; }
void aaa(){return;}
123:デフォルトの名無しさん
09/09/26 15:19:00
>>122
関数内の void aaa() は外にある宣言を繰り返していることになる。
ちなみに引数リストが空の宣言は「プロトタイプ宣言」とは言わない。
2つ目の質問は、「型をつけたままコピー」と「不具合」が何のことかわからん。
124:デフォルトの名無しさん
09/09/26 15:20:16
>>122
型の不一致が無ければ問題ないよ
125:デフォルトの名無しさん
09/09/26 15:49:31
>>123>>124
ありがとうございましたす
後半はあんまりキニシナイでください
126:デフォルトの名無しさん
09/09/26 18:51:56
>>108, 109 ありなとう
ひところから急に Class* な表記が流行りだしたような気がしてたから
ちょっと気になってたんですが、自分の好きなClass *表記で気にしない
ようにします。
127:デフォルトの名無しさん
09/09/26 21:12:03
C/C++の形態論的にはClass *a;という書き方のほうが整合性が取れているように
思う。意味論的にはClass* a;のほうが相応しいと思う。文法的にはClass*a;
でも構わないけどw まあ、好みで。自分はClass *a;。
128:デフォルトの名無しさん
09/09/26 21:29:02
template <class T> struct add_pointer{ typedef T* type; };
add_pointer<some_class>::type psc;
これが正解だからこれからはこれを使うように
129:デフォルトの名無しさん
09/09/26 21:31:51
俺はClass* a;だな
「Classのポインタ」という変数aって感じがいい
>>109みたいな問題があるけど、1行で複数の変数を宣言しなければいいんだし
130:デフォルトの名無しさん
09/09/26 21:38:42
Class *p;とClass* p;はどっちでもいいけど、
Class &r;はなんかいやだなあ。
131:デフォルトの名無しさん
09/09/26 21:40:06
>>129
どっちかっていうと、Classへのポインタ
132:デフォルトの名無しさん
09/09/26 21:41:51
Class * ptr;派が一人もいないことに絶望した
133:デフォルトの名無しさん
09/09/26 22:10:29
それってなんか掛け算っぽくね?
完全に独断と偏見だけどさ。
134:デフォルトの名無しさん
09/09/26 22:18:45
依存名だと掛け算優先だね
135:デフォルトの名無しさん
09/09/26 22:56:30
>>123
> ちなみに引数リストが空の宣言は「プロトタイプ宣言」とは言わない。
そなの?
136:デフォルトの名無しさん
09/09/26 23:16:40
>>135
C の場合、引数リスト無しの関数宣言 f() は f(...) と同じで、呼び出し時に引数の型は
チェックされない。一方プロトタイプ宣言といえば以下のもの。
ISO C 6.2.1 p2
> (A function prototype is a declaration of a function that declares the types of its parameters)
(関数プロトタイプとは関数の宣言で、その引数の型を宣言するもの)
C++ の場合、引数リスト無しの関数宣言 f() は f(void) と同じで引数を取らないことを
宣言するが、 C++ には引数の型を宣言しない関数宣言というものが無いので、そもそも
関数プロトタイプというように呼び分ける必要が無く、すべて単に関数の宣言と呼べばいい。
137:デフォルトの名無しさん
09/09/26 23:21:50
34へぇ
138:デフォルトの名無しさん
09/09/26 23:23:51
65へぇ
139:デフォルトの名無しさん
09/09/27 01:50:04
unicodeを扱おうとワイド文字列型(wchar_t)に入れようとしましたが、うまくいきません
どこが間違っているのでしょうか・・?
int main() {
wchar_t aaa[]="テスト";
return 0;
}
140:デフォルトの名無しさん
09/09/27 01:52:44
>>139
× "テスト"
○ L"テスト"
141:デフォルトの名無しさん
09/09/27 02:00:34
int main() {
wchar_t aaa[] = L"テスト♥";
wcout << aaa << " : " << aaa << endl;
return 0;
}
142:デフォルトの名無しさん
09/09/27 04:32:31
ありがとうございます
143:デフォルトの名無しさん
09/09/27 08:26:21
>>121
ストリーミングもP2Pも理論的には解っていますが、作った事はありません
P2Pボイスチャットを作るのは大変だとわかっていますが、大学の課題なので
何とか完成させたいのです
よろしくおねがいします
144:デフォルトの名無しさん
09/09/27 10:26:25
よしくです
int Row = 10;
int Col = 20;
std::vector<std::vector<int> > Array(Row, std::vector<int>(Col));
このように書くことで、2次元int 型のvector コンテナが定義できますが
他の型、(list やmap、独自クラス)でも2次元のコンテナを作りたいのですが
templae を用いて、汎用的にしたいのですが、どのように書いたらいいでしょうか。
よろしくお願いします。
145:デフォルトの名無しさん
09/09/27 11:08:42
>>144
template template パラメータを使うことが考えられる。
現行の C++ では template template パラメータの引数の数を固定しないといけないから、
使う側で専用の template メタ関数を用意しないといけないかもしれない。
146:デフォルトの名無しさん
09/09/27 11:10:41
#include <vector>
#include <list>
template <
template <class, class> class Cont,
class T,
template <class> class A = std::allocator
>
struct Table
{
typedef Cont<Cont<T, A<T> >, A<Cont<T, A<T> > > > Type;
};
int main(void)
{
Table<std::vector, int>::Type vec2d;
Table<std::list, int>::Type lst2d;
/* ・・・ */
return 0;
}
templateはよくわからんがこんな感じ?
147:デフォルトの名無しさん
09/09/27 12:07:05
>>144です
>>146Thxです
使い方としてはこんな感じでしょうか?
vec2d[10][10];
vec2d[0][0] = 100;
int i = vec2d[0][0];
std::cout << i << std::endl;
でもこれだと、Out of range で落ちてしまいますが?
セマンティクス的に間違ってるんだろうか?
148:デフォルトの名無しさん
09/09/27 12:09:05
>>147
デフォルトコンストラクタが走っただけじゃ空なんだから、当然だろ。
149:デフォルトの名無しさん
09/09/27 14:19:41
>>144だが
More Effective C++ に載ってたので終了。
150:デフォルトの名無しさん
09/09/27 16:23:47
kwsk
151:デフォルトの名無しさん
09/09/27 16:55:30
Proxy Classだろjk
でもlistで二次元配列作ると疎行列以外の用途では
やたらと速度が遅くなっていかんな
152:デフォルトの名無しさん
09/09/27 17:08:14
二次元配列なんて配列かvectorぐらいでしか使わんような気がするんだが本当に凡化する必要はあるのか
153:デフォルトの名無しさん
09/09/27 17:34:46
数値ならvalarray使ったほうがいいし
キーとレコードならmap使ったほうがいいし
生の二次元配列を使うことは少ないな。
154:デフォルトの名無しさん
09/09/27 18:13:04
>>144です
最近template 中毒に冒されいて、どうして汎用化できるだろうかと、気になってしょうがないw
155:デフォルトの名無しさん
09/09/27 18:16:23
MESTLにもコンテナの汎化は基本的に悪手と書いてあったな
どうしてもやるならアダプタかませてインターフェースを調整しないといかん
156:デフォルトの名無しさん
09/09/27 18:22:54
VS2008C++使っています
別のアプリケーション(メモ帳)にsendkeyで入力したいのですが、どうすればいいでしょう?
何とか↓まで調べたのですがこの先が良く分かりません。知ってる方いましたらお願いします。
#include<iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int main() {
wcout.imbue(std::locale(""));
HWND qqq = FindWindow(
L"[Edit]", // クラス名//1つ目不明点
L"1.txt - メモ帳" // ウィンドウ名
);
SendInput(
1, // 入力イベントの数
LPINPUT pInputs, // 挿入する入力イベントの配列//2つ目不明点
int cbSize // 構造体のサイズ//3つ目不明点
);
return 0;
}
157:デフォルトの名無しさん
09/09/27 18:28:10
win環境で、exe側からdll側に関数インターフェースを提供する場合、
exe側で関数をexportして、dll側でGetModuleHandleするのが唯一の方法でしょうか?
158:デフォルトの名無しさん
09/09/27 18:32:31
>>156
VC++ なら普通SendMessageやPostMessage が無難だと思うぞ、ぐぐれば事例が沢山あるし
159:デフォルトの名無しさん
09/09/27 18:33:38
>>157
試してないけど
Dll側にSetFunc()を作ってExe側から関数ポインタあげたら?
160:デフォルトの名無しさん
09/09/27 18:37:36
>>158
ありがとうございます。やってみます
161:デフォルトの名無しさん
09/09/28 17:03:06
インクルードするとエラーが出ます。これはどういうことでしょうか・・?
#include <iostream>
#include <string>
#include <fstream>
#include <windef.h>
#include <windows.h>
using namespace std;
int main(){return 0;}
1>------ ビルド開始: プロジェクト: no, 構成: Debug Win32 ------
1>コンパイルしています...
1>a.cpp
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(5545) : error C2146: 構文エラー : ';' が、識別子 'ContextRecord' の前に必要です。
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(5545) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(5545)
162:デフォルトの名無しさん
09/09/28 17:03:48
: error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11263) : error C2065: 'PCONTEXT' : 定義されていない識別子です。
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : error C2146: 構文エラー : ')' が、識別子 'ContextRecord' の前に必要です。
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : warning C4229: 旧形式が使用されています : データの修飾子は無視されます。
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : error C2182: 'RtlCaptureContext' : 'void' 型が不適切に使用されています。
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : error C2491: 'RtlCaptureContext' : dllimport データ の定義は許されません。
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : error C2059: 構文エラー : ')'
1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(12935) : error C3861: '__readfsdword': 識別子が見つかりませんでした
1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(1020) : error C2146: 構文エラー : ';' が、識別子 'LPCONTEXT' の前に必要です。
163:デフォルトの名無しさん
09/09/28 17:06:20
1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(1020) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(1020) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(4015) : error C2061: 構文エラー : 識別子 'LPCONTEXT'
1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(4023) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(4023) : error C2143: 構文エラー : ',' が '*' の前にありません。
1>ビルドログは "file://c:\Documents and Settings\user1\デスクトップ\sdk\Debug\BuildLog.htm" に保存されました。
1>no - エラー 15、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
以上です。分かる方、お願いします。
164:デフォルトの名無しさん
09/09/28 17:15:02
環境を書き忘れました
VS2008 C++です。よろしくおねがいします
165:デフォルトの名無しさん
09/09/28 17:41:37
ふと思ったのですが
*++p = 'a'; *++p = 'a'; *++p = 'a'; ...
と
*p++ = 'a'; *p++ = 'a'; *p++ = 'a'; ...
はスピードに違いがありますか。
つまりインクリメントとデクリメントで速度が変わったりしますか。
どちらも1を足すというのはかわりませんが、こっちのほうが効率のよいバイナリが生成されるとか
そういうのがあれば教えてください。
166:デフォルトの名無しさん
09/09/28 17:48:52
>>165
環境の提示がないので一般論として考えると、2行目と4行目はインクリメントするタイミングが違うだけ。
6行目はインクリメントとデクリメントの違いだけ。
いずれにしても、有意差が出るほど阿呆なコンパイラも環境もないと思うがね。
167:デフォルトの名無しさん
09/09/28 17:50:22
>>165
その例では機能が同等では無くね?
168:デフォルトの名無しさん
09/09/28 19:26:44
まあ、一般的な(前置|後置)(インクリメント|デクリメント)の速度の違いだけに
着目してるんじゃないかな。
どうも、前置|後置とインクリメント|デクリメントを混同している節が
見受けられるが……。
169:デフォルトの名無しさん
09/09/28 19:48:00
>>161
#include "stdafx.h"
あと氏ね
170:デフォルトの名無しさん
09/09/28 20:57:31
まるちスレッドの割り込みって最短でどこまで割り込まれるんですかね?
void func()
{
line1;
line2;
line3;
}
int main(void)
{
line4;
func();
line5;
return 0;
}
上の例で言ったらline4とfunc()の間、func()とline5の間まで割り込まれる?
それともline1、line2、line3の間でも割り込まれる?
1行が終わる間に割り込まれることはある?
a = b = c = d;としたらどこかで割り込まれる可能性はある?
171:デフォルトの名無しさん
09/09/28 20:58:35
>>170
いつでもありえます
172:デフォルトの名無しさん
09/09/28 21:09:18
> a = b = c = d;としたらどこかで割り込まれる可能性はある?
a = 100; みたいに代入一個でも、アセンブラだと2命令以上になることがあるんで、代入中に割り込まれることもある。
173:spirit
09/09/28 21:18:32
>>170 行とか演算子とか無関係に割り込まれる。
すなわちb=a+3;の実行中にaを読んでbに書き込む間でも割り込まれる。
さらにa++;の実行中にも割り込まれる。
174:デフォルトの名無しさん
09/09/28 21:20:43
さらにマルチプロセッサだと1命令の実行中でも割り込まれる。
175:デフォルトの名無しさん
09/09/28 21:29:10
>>169
ありがとうございました。すいませんでした。
176:デフォルトの名無しさん
09/09/28 21:31:02
割り込まれまくりなんですね・・・
そうなるとmutexを取得する関数の途中で割り込まれると
バグの元になりそうな気がするんですけど大丈夫なんでしょうかね?
177:デフォルトの名無しさん
09/09/28 21:33:11
>mutexを取得する関数
システムコールなので不具合は起きない
178:デフォルトの名無しさん
09/09/28 22:16:05
mutexを含むマルチスレッド同期ライブラリは、「このように呼び出すとここから
ここまでは割り込まれないよ」とかそういう細かい仕様がいちいち決まってるので、
それを調べて使うもの。
179:デフォルトの名無しさん
09/09/28 22:56:13
画像の任意回転、画像を表示したあとその上に場所指定して画像を合成etc・・・
をCで作る課題が出てるのですが、助けになるような参考書・サイト等ありませんでしょうか
お願いします
180:デフォルトの名無しさん
09/09/28 22:59:41
ググレカス^^
181:デフォルトの名無しさん
09/09/28 23:47:07
>>180
このスレの意味がなくなる
182:デフォルトの名無しさん
09/09/29 00:33:11
DXライブラリでおk
183:デフォルトの名無しさん
09/09/29 01:49:49
DXライブラリが手っ取り早いな
184:デフォルトの名無しさん
09/09/29 01:56:22
DXライブラリ使えばいいと思う
185:デフォルトの名無しさん
09/09/29 02:01:26
DXライブラリがいいね
186:デフォルトの名無しさん
09/09/29 05:44:20
>>166
ありがとうございます。違いはないとのことで安心しました。
>>168
>どうも、前置|後置とインクリメント|デクリメントを混同している節が
>見受けられるが……。
その通りでしたorz 無知をさらして申し訳ない
187:デフォルトの名無しさん
09/09/29 10:25:22
>>186
プリミティブ型ならいいけど、クラスに対する前置後置はだいぶ効率に差ができるから注意しよう
188:デフォルトの名無しさん
09/09/29 10:54:27
×だいぶ効率に差ができるから
○効率に差ができる場合もあるから
189:デフォルトの名無しさん
09/09/29 11:59:47
別人だがkwsk
190:デフォルトの名無しさん
09/09/29 12:18:04
詳しくも何も、後置は原理的に重くなりやすいのが一目瞭然じゃないか?
クラスじゃないなら、見た目の好みとかで後置にしても最適化で前置に置換されることが
期待できるけど、統一感を求めるなら、必要が無い限りは前置で統一した方がいいだろうね。
クラスの時は勝手に最適化で前置に変えたりできないから。
191:デフォルトの名無しさん
09/09/29 12:19:41
別にクラスじゃなくて構造体でも演算子オーバーロードしていれば同じことだけどね。
192:デフォルトの名無しさん
09/09/29 12:28:00
クラスと構造体は本質的には同じものだよ
193:デフォルトの名無しさん
09/09/29 12:29:03
クラスと構造体はほぼ同じだからいちいち説明する必要も無いと思うが
194:デフォルトの名無しさん
09/09/29 12:29:48
かぶったし
195:デフォルトの名無しさん
09/09/29 12:31:03
共用体とか持ち出してくればまだ芸があったかも。
でも余計うざいだけか。
196:デフォルトの名無しさん
09/09/29 12:36:34
>>189
むかしむかし、後置だとインクリメントする前の状態をどこかに保存しておかないといけないのであったとさ
197:デフォルトの名無しさん
09/09/29 15:34:40
で?
198:デフォルトの名無しさん
09/09/29 16:41:01
>>196
えっ? 今は違うの?
199:デフォルトの名無しさん
09/09/29 17:34:08
今は技術が発展しているのでそんな事はありません
科学万能の時代が到来したのです
200:デフォルトの名無しさん
09/09/29 17:46:33
>>198
可哀想な人…
201:デフォルトの名無しさん
09/09/29 18:11:48
it_a = it_b++
とかやったらちょっと面倒なことになる。
202:デフォルトの名無しさん
09/09/29 18:50:59
>>199
今はどうなってんのさ。
>>201
どう面倒なことになるのさ。
203:デフォルトの名無しさん
09/09/29 19:27:56
自分で調べろw
204:デフォルトの名無しさん
09/09/29 19:34:50
ググったけど、出てこない。
205:デフォルトの名無しさん
09/09/29 20:44:44
ググレカス。
URLリンク(ja.wikipedia.org)
206:デフォルトの名無しさん
09/09/29 21:29:15
>>196の言いたいことが分かったかも。
後置演算子のオーバーロード方法が無いとcallerが保存しなきゃならなかった、ってことが
言いたいんじゃないのかな。
ところが、普通に考えたらcallerが保存しなくてもcalleeでは保存するコードを書くことに
なるから、端から見ると>>196が何言ってんだか分からない人状態に。
一方>>196は、intを引数にすれば後置になるの知ってるの俺だけかよプゲラッチョ、とか
一人でいい気分になっていた、とか。
207:デフォルトの名無しさん
09/09/29 21:32:38
単にreturnの後に処理を入れられないという
言語制約上の問題でしかないね
208:デフォルトの名無しさん
09/09/29 23:03:02
>>206
何が言いたいのか分からん。
最適化されない限り、前置の方がコストかかるのは当然で。
>>196のだめなところはツッコミがあるように、むかしむかし、というのを付けてしまったとこ
209:208
09/09/29 23:03:59
あああ。前置じゃなくて後置ね。
210:198 202
09/09/30 00:31:56
なんだ、やはり、「むかしむかし」が余計か。豪快に釣られたぜw
前置/後置のオーバーロード時の注意点は知っていたが、規格が変わったのかと焦ったぜ。
211:デフォルトの名無しさん
09/09/30 02:13:24
誰か円形のHPゲージの描画の方法を教えてくれないか・・・?
細い棒の画像を何回かループさせて徐々に角度をつけて
描画しようと思ってるんだがいまいちうまくいかん。
212:デフォルトの名無しさん
09/09/30 02:33:40
pie関数でいけるんでないの。
213:デフォルトの名無しさん
09/09/30 02:40:12
pie関数って何ですか?
214:デフォルトの名無しさん
09/09/30 03:47:24
塗りつぶし円弧を描画する関数
215:デフォルトの名無しさん
09/09/30 03:59:02
それがわからないから聞いているのですが
216:デフォルトの名無しさん
09/09/30 04:06:59
え?塗りつぶし円弧が分からないのか?おうぎ形のことだよ。
それで円形のHPゲージの描画ができるとは思えないといってる?
もうちょっと具体的に書いてくれないか
217:デフォルトの名無しさん
09/09/30 04:08:44
いまいちうまくいかん程度ならもうちょっとがんばればできるよ
その方向でがんばれ
218:デフォルトの名無しさん
09/09/30 04:28:25
その塗りつぶしの円弧の描画のソースを
C++暦半年の俺がわかるように教えるんだ!
219:デフォルトの名無しさん
09/09/30 04:46:25
Intelコンパイラでコンパイルする際に、#pragma ivdepを使っているのですが、
他のコンパイラでコンパイルした際に、不明なプラグマと警告が出てしまいます。
OpenMPだと、
#ifdef _OPENMP
#pragma omp parallel for
#endif
の様に書いてやれば、対応していないコンパイラで警告を出さないようにできますが、
上記のような場合どのようにしたらよいのでしょうか?
220:デフォルトの名無しさん
09/09/30 04:56:52
警告抑制
221:デフォルトの名無しさん
09/09/30 05:42:50
URLリンク(www.google.co.jp)
222:デフォルトの名無しさん
09/09/30 05:44:14
?
223:デフォルトの名無しさん
09/09/30 06:11:21
>>218
環境
>>219
intelコンパイラであるかどうかをifdefで判断すればよいということ。
224:(マルチポスト)
09/09/30 06:15:36
的外れは質問かもしれませんが
C++で作られたローカルのプログラムのWinsockからPHPのサーバのプログラムと通信することはできますか?
225:デフォルトの名無しさん
09/09/30 06:43:29
>>224
PHPのサーバと言うのは何のこと?
226:デフォルトの名無しさん
09/09/30 06:45:40
PHPで書こうと思ってるサーバープログラムです
227:デフォルトの名無しさん
09/09/30 07:17:46
なんで出来ないと思ったん?
228:デフォルトの名無しさん
09/09/30 08:05:52
>>215
WindowsAPIとかGDIとかでググレ
229:デフォルトの名無しさん
09/09/30 08:31:26
>>215
ぶっちゃけるとアニメーションモデル読み込んで再生して終り
中身はHP0~100%(t=0~1)までのアニメーションでデザイナに作っておいてもらって
プログラマはHPに応じてアニメーションを進めるだけ
230:デフォルトの名無しさん
09/09/30 08:37:55
>>226
PHPでサーバープログラム?
Webサーバに置くスクリプトじゃなくて?
231:デフォルトの名無しさん
09/09/30 10:07:18
ここでいいか分からないんですが質問させてください
ちょっと特殊なWindowsプログラミングについてです
いわゆるKERNEL32→LERNEL32の方法で
msvcrt.dllの関数をフックしたいのですが
作成したDLL(仮にXXVCRT.DLLとします)を対象のアプリケーションで
使用するとクラッシュしてしまいます
簡易なテストアプリを作成してXXVCRT.DLLをLoadLibraryして
GetProcAddressでsprintfやmalloc/freeを使う限りは問題ありません
落ちている場所はおそらくRtlEnterCriticalSectionの内部のようで
対象のアプリはマルチスレッド使用なのでそのあたりかとは思うのですが…
XXVCRT.DLLは基本的に
URLリンク(ruffnex.oc.to)
の方法で作成しています
開発環境はもちろんVC++6.0で標準ライブラリは無視にしてます
なお、対象のアプリはおそらくMinGWでビルドされています
URLリンク(www.codeproject.com)
ではmsvcrtは特殊であるようなことが書いてありますが
msvcrtのフックはできないものでしょうか?
ヒントやURLを提示していただけるだけでも構いません
より適切なスレがあれば誘導して頂けるのもありがたいです
なにか情報をお持ちの方、お教え願えないでしょうか
232:デフォルトの名無しさん
09/09/30 14:25:41
質問です。
boost::spirit です。
rule<> expr = uint_p | real_p;
parse_info<> pi = parse("10.0", expr);
これで、pi.full == true とならないのですが、どうしてでしょうか。
Win7x64 VC++9 boost1.40.0
233:デフォルトの名無しさん
09/09/30 15:10:18
>>231
改造とかクラックとかそういうスレないの?
234:デフォルトの名無しさん
09/09/30 18:09:05
>>232
real_pとint_pを入れ換えて味噌
235:232
09/09/30 18:42:37
>>234
ありがとうございます。
もともと uint を先に持ってきたのは、大きな整数を入力すると、double の精度を
超えた値が丸められてしまうのを防ぎたかったんです。
コードを書き直しました。
bool is_real_value;
double real_value;
unsigned __int64 uint_value;
void IntAction(unsigned __int64 v) { is_real_value = false; uint_value = v; }
void RealAction(double v) { is_real_value = true; real_value = v; }
int main()
{
rule<> expr = (uint_parser<unsigned __int64>()[&IntAction] | real_p[&RealAction]);
parse_info<> pi;
pi = parse("1.0", expr);
ASSERT(pi.full); ASSERT(is_real_value); ASSERT(real_value == 1.0);
pi = parse("12345678901234567890", expr);
ASSERT(pi.full); ASSERT(!is_real_value); ASSERT(uint_value == 12345678901234567890);
pi = parse("123", expr);
ASSERT(pi.full); ASSERT(!is_real_value); ASSERT(uint_value == 123);
}
このコードのままだと、"1.0" の解釈で失敗し、uint_p と real_p を逆にすると、すべて
real として処理されてしまい、ASSERTで止まりまくります。何がおかしいんでしょうか。
236:デフォルトの名無しさん
09/09/30 19:29:42
URLリンク(draconux.free.fr)
このソースコードをmakeしたのですが、
ld -s -x -M -Ttext 0 -e startup_32 boot/head.o init/main.o \
kernel/kernel.o mm/mm.o fs/fs.o \
lib/lib.a \
-o tools/system > System.map
kernel/kernel.o: In function `scrup':
console.c:(.text+0x1ed6): undefined reference to `columns'
console.c:(.text+0x1fad): undefined reference to `columns'
kernel/kernel.o: In function `scrdown':
console.c:(.text+0x2023): undefined reference to `columns'
make: *** [tools/system] Error 1
というエラーが出てコンパイル出来ません。
このエラーを解決したいのですが、どのようにすればいいでしょうか?
237:234
09/09/30 19:39:19
>>235
最後まで到達できないのは、rule<> exper=uint_p|real_p;のuint_pでパースが10で成功し、exprが成立するため。そこでパースが終わってしまう。
防ぐには以下の方法がある。
strict_real_pを使うと小数点が無い実数にはマッチしなくなる。
longset_d[P]...を使うと最大長マッチが採用される。
eps_p(P)を使って区切りまでパースしたかを確認できる。
238:232
09/09/30 19:51:54
>>237
strict_real_p | uint_p で出来ました。
大変助かりました。
239:デフォルトの名無しさん
09/09/30 20:00:38
>>236ですが、
開発環境は、Ubuntu,gcc4.1です。
240:デフォルトの名無しさん
09/09/30 20:19:42
>>239
いや、だから columns について調べるべきでしょう。
241:デフォルトの名無しさん
09/09/30 20:26:26
>>240
調べたのですが、解らなかったのでこちらに来ました。前のスレのほうで環境依存スレに行ったほうがいいと言われたというのも一つです。
console.c内にて
#define COLUMNS 80
static unsigned long lines=LINES,columns=COLUMNS;
として定義及び宣言があり、どうしてcolumns変数が出てくるのかが全くわからないのです。
242:デフォルトの名無しさん
09/09/30 21:17:02
TCHARからwchar_t *に変換(キャスト)するにはどうしたらよいですか?
243:デフォルトの名無しさん
09/09/30 21:25:31
なぜそういうことする必要があるか知らんが…
TCHAR ch;
// ...
wchar_t *p = (wchar_t *)ch;
244:デフォルトの名無しさん
09/09/30 21:28:31
>>243
あ、そのままでよかったんですね^^;
センキュー
245:デフォルトの名無しさん
09/09/30 21:36:05
>>244
だめだよ。
TCHAR* ch;
// ...
wchar_t *p = (wchar_t *)ch;
なら、いい。
あと、最近のVCは_UNICODEがデフォになってるけど、
古いやつだったら、_MBCSがデフォだから、もしそうだったら、
単純にはキャストできない。
246:デフォルトの名無しさん
09/09/30 22:31:17
static unsigned long lines=LINES;
static unsigned long columns=COLUMNS;
247:デフォルトの名無しさん
09/09/30 23:37:31
デスクトップの画像はどういう風に取得すればいいんでしょうか?
事務仕事をほぼ全自動でできるようなソフトを作ってみたいと思っているのですが、
とっかかりがつかめません
bitmap形式などは何となくわかったのですが、肝心の画像自体の取得方法が分かりません
APIを使うような感じはするのですが、見つかりませんでした
分かる方、教えてください。お願いします
248:デフォルトの名無しさん
09/09/30 23:40:13
>>247
uwsc ってソフトがあるよ
249:デフォルトの名無しさん
09/09/30 23:41:52
>>247
GetDC(HWND hWnd);
で、0を渡せば、画面のデバイスコンテキストが取れたような記憶が。
250:デフォルトの名無しさん
09/09/30 23:45:09
>>248>>249
ありがとうございます
既にあったのですね、トホホ
なんだか悔しいので、とりあえず作るだけ作ってみることにします
251:デフォルトの名無しさん
09/10/01 09:37:37
別に止めはしないが、とても「事務仕事をほぼ全自動でできるようなソフト」を作ろうとする人間の台詞じゃないな。
252:デフォルトの名無しさん
09/10/01 09:41:07
そもそも、「デスクトップの画像」と言う当初の質問が自動化とどう関係しているのだろうか
253:デフォルトの名無しさん
09/10/01 10:05:49
スクリーンショットを使う事務作業なんていくらでもあると思うけど
254:232
09/10/01 12:57:19
boost::spirit でまた躓いてしまいました。
parse_info<> pi;
pi = parse("12.", real_p); // 12. ドットに注意
ASSERT(pi.full);
ASSERT(pi.length == 3); // 止まる。実際は 2 が入っている。
pi = parse("12.", longest_d[real_p | int_p]);
ASSERT(pi.full); // 止まる
デバッガで追うと、確かにドットの後に数値が無ければ、length はインクリメントされてないんですが、
scanner の first (scan.first) はドット文字の次を指したまま return しています。
length と 実際に進めた幅とが一致しない状態というのは許されるんでしょうか?また、上の二つの
parse で、下は失敗するのはおかしいと思うのですが、勘違いでしょうか?
Win7x64 VC++9 boost1.40.0
255:デフォルトの名無しさん
09/10/01 14:53:49
>>246
申訳ないですが、その書き方ではエラーを解決出来なかったので
グローバル変数として宣言しましたところ、一応はコンパイルが出来ました。
256:デフォルトの名無しさん
09/10/01 19:44:19
環境はMac OS X 10.5 & Xcode 3.1 (gcc 4.0)です
PreProcessor Macros でマクロを設定してコンパイルはできたのですが
実行すると#ifdef~#endifでかこった部分が実行されていません
どうすればよいのでしょうか?
257:デフォルトの名無しさん
09/10/01 19:51:09
>>256
#ifdefの行をくわしく
258:デフォルトの名無しさん
09/10/01 23:39:04
>>256
ifdefで指定してるものがdefされていなかったんでしょう
259:デフォルトの名無しさん
09/10/02 00:21:58
unary_functionやbinary_functionってなんのためにどうやって使うんでしょうか?
260:デフォルトの名無しさん
09/10/02 00:36:59
VS2008SP1なのですが、取りあえずboostを試してみようと思い、
#include <boost/asio.hpp>
をソースに書いてみただけでコンパイル時間が1秒→15秒になってしまったのですが、
こういうものなのでしょうか?
261:デフォルトの名無しさん
09/10/02 02:23:05
>>260
ありえん話ではないです。
というかメモリ少ないとかじゃないの?
262:デフォルトの名無しさん
09/10/02 02:26:31
または、ソースごとに毎回includeされててpchも使ってないとか。
もちろん、メモリ不足がまず疑われるが。
VS使うならpchは覚えた方がいいな。使ってないなら、だけど。
でかいプロジェクトでBoostバリバリ使ってたりすると、コンパイル時間が普通に
1/20以下くらいになっても不思議は無い。
263:スレ違い、でしょうか……
09/10/02 03:53:56
巧く言えないんですが、昔、VC6.0とDirectX7を齧って終わっただけのプログラミングを、今更始めようと思いました。
今の状況は
・持ってるのは、Visual Studio 2005 Standard Edition
・作りたいのは、Windowsのゲーム
・使いたい言語は、C/C++
・使いたいライブラリは、DirectX 8.x、もしくは、DirectX 9.x
こんな具合で
・Visual Studio 2005 に関する初心者向けの情報
・DirectX 8.x or 9.x に関する初心者向けの情報
この二つに関する情報が欲しいと考えています。
本であれば本で、webであればwebで、どんなものがいいのか、教えて頂ければ幸いです。
どうか、よろしくお願いします。
264:デフォルトの名無しさん
09/10/02 04:35:08
>>259 ググレカス
265:デフォルトの名無しさん
09/10/02 04:41:20
>>263
MSDN
266:デフォルトの名無しさん
09/10/02 07:05:42
>>263
VS2008ExpressEditionに移行しちゃってもいいんじゃね、タダだし
267:デフォルトの名無しさん
09/10/02 08:53:42
>>254 .で終わると確かにパースの終了位置が変になるね。
是非boostスレを賑わしに来てください。
スレリンク(tech板)
268:デフォルトの名無しさん
09/10/02 16:37:32
>>261-262
メモリの空きはまだまだあるのですが、
includeしてるソースを少し弄ってコンパイルすると、また10秒とかマタされます。
pchを使うと確かに早くなりますが、pchを使えない環境だと毎回こんなに待たされているんですかね?
これはヘッダーへ実装も書いてしまうことの、弊害?と考えても間違いないでしょうか?
269:デフォルトの名無しさん
09/10/02 17:01:42
そのままではコンパイルが遅いからpchが発明されたとは考えられないかね?
270:デフォルトの名無しさん
09/10/02 17:28:59
メタプログラムのライブラリだからそうなるのは仕方ないな
271:デフォルトの名無しさん
09/10/02 19:08:17
VC++で簡単なwebクライアントを書いたんだけど、うまく動かない。
誰か教えて
URLリンク(kissho.xii.jp)
これを
MyUtil->GetHttpContent( &content_data, &content_size, "yutori7.2ch.net", "/news4vip/dat/1254469638.dat", 1024, 5 );
で呼ぶと、116行目の
select_result = select( 0, &tmp_fd_set, NULL, NULL, &timeout_tv ); // タイムアウト付き待機
でタイムアウトする。
試しに
MyUtil->GetHttpContent( &content_data, &content_size, "jane.s28.xrea.com", "/bbs/dat/1249509078.dat", 1024, 5 );
で呼ぶと、即座にコンテントが返る。
272:271
09/10/02 19:09:08
vipのスレをリクエストした時の送出ヘッダをtelnetで
# telnet yutori7.2ch.net 80
GET /news4vip/dat/1254469638.dat HTTP/1.0
Host: yutori7.2ch.net
User-Agent: Monazilla/1.00
Connection: close
として送出しても、当然即座にコンテントが返る。
なんとなくvipのケースではリクエストが完了してない気がするけど、どこがまずいのかよく分からない・・・('A`)
273:デフォルトの名無しさん
09/10/02 19:10:13
普通にコンパイルに1時間以上かかる状況では何秒増減しようと大して変わらん
274:デフォルトの名無しさん
09/10/02 19:25:09
>>268 boostのヘッダーをインクルードしただけではそんなにまたされない。
ヘッダーに実装を書くとテンプレートのインスタンス化がされる場合がある、そのヘッダーをインクルード
しただけでコンパイル時間がのびる。無用なインスタンス化がされないようにヘッダーに実装は書かないほうが良いよ。
テンプレートをtypedefしただけでもコンパイル時間は延びる。
275:デフォルトの名無しさん
09/10/02 19:42:30
自分でWeb鯖たてて実験するのが楽なんでない?
276:232
09/10/02 20:14:08
>>267
やっぱ変ですよね?
ありがとうございました。
277:デフォルトの名無しさん
09/10/02 20:53:23
>254のは初出だと思うけど、これ以外にもSpiritは結構バグあるみたいよ。Treeとか。
V2に期待ってことかね。
278:デフォルトの名無しさん
09/10/02 21:03:28
>>269-270
やはりこういうものなのですね
>>274
asioの場合は空のcppへinclude書いただけで10秒近くになってしまいました。
っと今また計ってみたら8秒だた・・・
それでも私のような、書き直してはビルドの初心者にはきついですね。
大人しくpchを使っていこうと思います。
ありがとうございました。
279:デフォルトの名無しさん
09/10/02 23:20:55
うわ、asio重たいな。こんなのもあるんだな。
boostは無条件にpchに放り込んでたから気づかなかった。
280:デフォルトの名無しさん
09/10/03 00:09:21
C/C++に直接は関係ないですが質問させてください。
1の補数、2の補数という言葉がありますが、
なぜこのような名前になっているのか教えてください。
(意味は知っています)
1、2 という数字に意味があるのでしょうか?
281:デフォルトの名無しさん
09/10/03 00:34:29
>>280
補数の意味が分かってないじゃん
282:デフォルトの名無しさん
09/10/03 03:12:32
まったくだ。
2の補数と単に言った場合、それが2種類あることも分かっていないんだろう
283:デフォルトの名無しさん
09/10/03 08:17:37
3進数における2の補数のことは考えなくてもいいと思うけどな。
284:デフォルトの名無しさん
09/10/03 09:46:35
>>280
自己解決しました。
1の補数
各桁ごとに1の補数をとる
2の補数
2^nの補数をとる
1と2の意味が全く異なる上、
2じゃなくて2^nのことだし。
酷い用語が万延したものだ。
285:デフォルトの名無しさん
09/10/03 09:51:39
文字列についてなんですが
文字列の最後の文字を削除する場合ってどうすればいいんですか?
それっぽい関数が見当たらなかったんですが、皆さんどうやって処理するんでしょうか
286:デフォルトの名無しさん
09/10/03 09:56:04
void cut(char *str){
str[strlen(str)-1] = '\0';
}
287:デフォルトの名無しさん
09/10/03 09:56:48
あら、縮まってなかった。
288:デフォルトの名無しさん
09/10/03 09:58:49
>>286
ありがとうございます。
文字列の方は、最初から[10]と決めているんですが、この場合動的に管理しないと無理ですか?
289:デフォルトの名無しさん
09/10/03 11:50:42
>>288
ポインタそのものは変化しないので静的配列でもOK
290:271
09/10/03 12:18:05
自己解決しました・・・(´・ω・`)
291:デフォルトの名無しさん
09/10/03 12:52:09
自家発電しました(´・ω・`)
292:デフォルトの名無しさん
09/10/03 13:11:49
自殺しました(´・ω・`)
293:デフォルトの名無しさん
09/10/03 14:29:41
自乗しました
294:デフォルトの名無しさん
09/10/03 15:10:29
自損しました(´・ω・`)
295:デフォルトの名無しさん
09/10/03 16:31:37
struct hoge {
inline int operator [] (int i) {
return a[i];
}
int a[10];
}
↑のinlineって生の配列アクセスまで最適化されますか?
296:デフォルトの名無しさん
09/10/03 17:02:32
コンパイラ次第だが期待していい。
297:デフォルトの名無しさん
09/10/03 17:28:55
環境VC++ 2008 Expressです。
配列
*points1 = メモリ確保した。
*points2 = メモリ確保した。
for ( i = 0; i < numPairPoints ; i ++) {
points1 から始まる配列にxとyを代入する。
points2 から始まる配列にxとyを代入する。
}
コード自体はとても簡単な処理なのですが、
デバッグしていると、i がある程度(デバック実行の度常に同じiの値)増えた後に、
何故かpoints2(のみ)の内容が書き換えられ、メモリアクセスエラーが起こしています。
こういうことが起こる場合にはどこでなんとかすべきなんでしょう?
points1の処理は通ってpoints2が途中でだめなのでコード外の要因だと思うのですが・・・
よろしくお願いします。
298:デフォルトの名無しさん
09/10/03 17:34:10
>>297
points1 の型は何?
299:デフォルトの名無しさん
09/10/03 17:37:46
opencvなので簡略化しました。
書いてるコードはこんなんです。
CvMat* points1;
CvMat* points2;
points1 = cvCreateMat(1, numPairPoints, CV_32FC2);
points2 = cvCreateMat(1, numPairPoints, CV_32FC2);
for ( i = 0; i < numPairPoints ; i ++) {
CvSURFPoint* r1 = (CvSURFPoint*)cvGetSeqElem( objectKeypoints, ptpairs[i*2] );
CvSURFPoint* r2 = (CvSURFPoint*)cvGetSeqElem( imageKeypoints, ptpairs[i*2+1] );
//略
points1->data.db[i*2] = r1x;
points1->data.db[i*2+1] = r1y;
points2->data.db[i*2+1] = r2y;
points2->data.db[i*2] = r2x;
}
300:デフォルトの名無しさん
09/10/03 18:03:49
>>284
おー昔のコンピュータの数値は整数ではなく
[0..1) の固定小数点数を表していた
と言えば後は分かるだろ
301:デフォルトの名無しさん
09/10/03 19:26:00
>>300
[0, 1) のことだったら
2の補数は1の補数と呼ばれなくてはおかしい。
[0, 2) の固定小数点数だとしても、
1の補数の方は各桁の1の補数であることは変わらない。
いずれにしろおかしい。
302:デフォルトの名無しさん
09/10/03 20:15:38
C言語勉強し始めたド素人ですが質問です
エディタにVisual c++2008使ってるんですが
ファイルを作成する場合、まずはプロジェクトの作成→ソースファイルの作成らしいですが
1つのプロジェクトフォルダに別々のソースファイルを保存することはできないんですか?
303:デフォルトの名無しさん
09/10/03 20:21:36
>>299
opencvと言うのは知らんが、
単純に確保している領域をオーバーしてるんじゃないの?
304:デフォルトの名無しさん
09/10/03 20:30:35
>>302
メニューのプロジェクトから、新規項目の追加とか既存項目の追加とか。
305:デフォルトの名無しさん
09/10/03 20:37:47
>>304
新規項目で別のソースファイルを作れるんですが
ただ、コンパイルするときビルドエラーとかになるんですよね
306:デフォルトの名無しさん
09/10/03 20:43:21
>>302 >別々のソースファイルを
main()を2つ書いてるとか?
もしそうだったら、プロジェクトの追加をするんだ。
307:デフォルトの名無しさん
09/10/03 20:44:49
>>305
エラーを貼ってみて。
308:デフォルトの名無しさん
09/10/03 20:55:40
プロジェクト上から見えてるmain文が一つだったらいくつソースファイルがあってもおk
309:デフォルトの名無しさん
09/10/03 21:35:36
>>299
何の関数か知らんけど、cvCreateMatの第1引数と第2引数を入れ替えてみそ
310:デフォルトの名無しさん
09/10/03 22:17:49
>>299
OpenCV の使い方に関する話になりそうなんで
【Intel】OpenCV総合スレ【画像処理】2
スレリンク(tech板)
こっちで聞いてみたら?
ぱっとみ cvCreateMat の 第3引数はそれでよいっぽい
第1引数 第2引数 の関係と その後の操作の次元があっているのかわからん
(NxM なのか MxN なのか
311:デフォルトの名無しさん
09/10/03 22:42:45
構造体というものは、配列の範疇に入るんでしょうか?
メモリだけ見れば似たような感じなのですが
312:デフォルトの名無しさん
09/10/03 22:45:10
"構造体"の"配列"もあるからどうかな...
313:デフォルトの名無しさん
09/10/03 22:48:54
普通は範疇には入れないよな。
文脈によるけど。
314:デフォルトの名無しさん
09/10/03 22:50:42
どうせ全部ビット列だと割り切れば同じ扱いをしても違和感ないか。
面白い視点だな。
315:デフォルトの名無しさん
09/10/03 22:50:53
構造体はメンバ間でパディングかかるけど
配列は隙間無で詰めないか?
316:311
09/10/03 22:55:02
どこで見たのかは忘れたのですが、構造体を配列と書いてるところがあったので気になって質問させていただきました
もしかしたらサイト管理者の間違いかもしれないので、あまり気にしない様にします。ありがとうございました。
317:デフォルトの名無しさん
09/10/03 22:57:44
パディングパディング言うけどさ
その空いた領域にほかのデータが書き込まれる可能性ってあるの?
318:デフォルトの名無しさん
09/10/03 23:00:33
ない
319:デフォルトの名無しさん
09/10/03 23:23:04
ないあるよ
320:デフォルトの名無しさん
09/10/03 23:44:19
パディングって何だと思ってるの? >317
気にしなければならないのは1構造体のサイズ=メンバの合計のサイズにしたければパディング無しにしなければならないって話なんだよ
321:デフォルトの名無しさん
09/10/03 23:44:37
「ほかのデータ」の意味がわからんない
322:デフォルトの名無しさん
09/10/04 00:05:02
うろ覚えだけど構造体は4byteの倍数に合わせるようにうめてるとか聞いたような聞いてないような
323:デフォルトの名無しさん
09/10/04 00:15:43
アラインメントね
あと4バイトとは限らない
324:デフォルトの名無しさん
09/10/04 00:21:25
別のスレで質問したんですが人いなさそうなのでこっちで質問させてください。
visual studio 2008で
それぞれ別のディレクトリに保存した同一ファイル名のファイルを
プロジェクトに追加してビルドすると
未解決の外部シンボルというエラーがでます。
どうしたら同一ファイル名のファイルをビルドできますか?
325:デフォルトの名無しさん
09/10/04 00:24:18
ファイル名を変える
326:デフォルトの名無しさん
09/10/04 00:26:08
>>325
買った参考書に入っていたプロジェクトでは
同じファイル名でビルドできたので
出来ればその設定方法を知りたいんですが
327:デフォルトの名無しさん
09/10/04 00:28:53
プロジェクトをわけ、1ソリューションにまとめてみては?
328:デフォルトの名無しさん
09/10/04 00:29:16
>>326
こっちいくといいよ
Visual Studio 2008 Part 18
スレリンク(tech板)
329:デフォルトの名無しさん
09/10/04 00:32:49
他の原因でもそのエラーは出るからよくわからんけど
ファイル名が同じだからコンパイル後の出力ファイルが上書きされたって事?
だったらファイルのプロパティで->出力ファイル->オブジェクトファイル名を設定すればどうにかなりそうだけど
330:デフォルトの名無しさん
09/10/04 00:33:53
そもそもクラス名がかぶってるんじゃねの?
331:デフォルトの名無しさん
09/10/04 00:36:45
>>324
そのファイルへのパスちゃんと通ってるかィ?
332:デフォルトの名無しさん
09/10/04 00:38:33
>>329
ファイル名を指定したら出来ましたありがとうございます。
>>330
クラス名は被ってますがnamespaceで区別してます
>>331
通ってます
333:デフォルトの名無しさん
09/10/04 06:25:57
VC2008でoggライブラリ使ってて遭遇したんですが、
CのライブラリをC++で使ってるときに
if(true返す処理) {
throw
}
Cライブラリの関数呼び出し
というような状態で、例外が投げられませんでした。
C関数とthrowをそれぞれ別な関数に分割したら
思ったとおりに動いたのですが、もしかしてC関数と
例外って一緒に使っちゃダメなんでしょうか?
334:デフォルトの名無しさん
09/10/04 09:57:20
例外が投げられないってどういう状態?
C言語部分を通過するthrowは駄目だった気がする。
例えばC言語の関数に渡したコールバックで例外投げた場合とか。
void c_func(void (*callback)()) { callback(); }
void cpp_callback() { throw ○; }
void cpp_func() { c_func(cpp_callback); }
335:デフォルトの名無しさん
09/10/04 10:15:01
>>333
ライブラリ呼び出しで、そのような制限は聴いたこと無いな。sinとか普通に使ってるし。
その問題が起きる最小のコードを提示したほうが回答が得られやすいよ
336:デフォルトの名無しさん
09/10/04 10:26:21
>>334
もうちょっと具体的に書くと、
if(!dir.CheckPath(fileName_)) { //ファイルパスが有効ならtrueを返す関数
throw "無効なパス";
}
//oggライブライリのファイル開く関数
if( ov_fopen(const_cast<char*>(fileName_), Dst_) ) return false;
return true;
ファルパスが無効なら例外投げるはずですが、投げられずに
ov_fopenに行ってしまい、関数内でアクセス違反起こしてエラーになります。
パスチェックとov_fopenを別々な関数に分けて書くと、思ったとおりの動作をする
ので、処理自体には問題は無いと思います。
337:デフォルトの名無しさん
09/10/04 10:37:35
>>336
ov_fopenをelse側に書くとどうなるの?
338:デフォルトの名無しさん
09/10/04 10:59:02
例外仕様を避けるほうがいいのは何で?
・例外仕様を使わないとクライアントがメソッドの投げうる例外を調べるときにドキュメントを読むかソースを追跡するぐらいしかできない
・例外仕様で縛らないと実装の変更の際に投げる例外が増減する可能性もあるのでクライアントが実装まで気にしなければならない
と考えると例外使用を使わないのはよくないような気がするんですが・・・
templateと相性が悪いのは分かりますが、非テンプレート限定なら問題ないはずです
339:336
09/10/04 11:18:50
>>337
試す前にリコンパイルしてたら症状が出なくなりました。
すっきりしないですが・・・
340:デフォルトの名無しさん
09/10/04 12:44:44
>>338
少なくとも、例外仕様を批判する立場からすると後者は逆。
実装の変更の際に投げる例外が増減する
→例外仕様も変更する→それを呼び出す元も修正しないといけない
or →例外仕様を変更しない→例外仕様が実態と乖離したものになる
あと、C++の例外仕様は実行時にコストが増えるだけでコンパイル時には何もしてくれないのもマイナス。
(さらに、実行時違反していることが分かっても、基本は即座に落とされるだけで何もできない)
341:デフォルトの名無しさん
09/10/04 13:05:52
例外仕様は後付けの仕様なので、いろいろと仕方ない。と言うより、元々必要ない気も。
342:デフォルトの名無しさん
09/10/04 13:10:30
強制終了の為だけに例外を使う分には問題ない?
343:デフォルトの名無しさん
09/10/04 13:23:39
Java以外にチェック例外を採用した言語はない気がする。
344:デフォルトの名無しさん
09/10/04 13:34:42
C++の例外仕様って、コンパイル時じゃなくて、実行時にエラーになるんだろ?
あんまりうれしくないよな。
345:デフォルトの名無しさん
09/10/04 14:45:38
>>338 例外仕様は手間をかけてもメリットがなかった。
ただ、throw()はメリットがあると思う。
346:デフォルトの名無しさん
09/10/04 15:00:35
επιστημηです。
--- "[cppll:1531] Re: property (言語拡張について)" / Shin'ya MORINO / 2002/02/21 14:12:27 +0900 ---
>> DDJ 1997.02/03 オブジェクト指向的日常 # '日常本'のオマケにPDFアリ
>今、手元に無いんですが、もしかして、やってました?
やってましたー
# 長年C++と付き合ってると、大抵のことはやってるなーって我ながら感心します。
# 僕ってすごい? ^^; (どっかのWeb-pageで'神のような人'と書かれていた...)
-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...
347:デフォルトの名無しさん
09/10/04 17:12:21
何です、これ?
348:デフォルトの名無しさん
09/10/04 17:41:00
C++BuilderとVisualC++は
プロパティ使えるんだよな
349:デフォルトの名無しさん
09/10/04 18:24:00
テンプレート関数の引数にポインタを渡して、
テンプレート関数の内部ではポインタの内容が書き換わっているのですが、
関数から戻ってくるとポインタの内容が元に戻ってしまいます。
何故でしょうか?
350:デフォルトの名無しさん
09/10/04 18:39:31
>>348
C++の仕様には含まれてなくて、各処理系の言語拡張だよね?
だから使わないほうがいいのかな?
351:デフォルトの名無しさん
09/10/04 18:49:34
>>349
テンプレ関数の宣言と、呼び出してる部分と、引数に渡している値の宣言部分と、
テンプレ関数内のその引数を操作している部分を書いてください。
352:デフォルトの名無しさん
09/10/04 18:49:37
>349
一番可能性が高いのはおまいの勘違い。
最小限のコードでも載せないとまともな回答は望めないかと。
353:デフォルトの名無しさん
09/10/04 18:50:54
>>349
ポインタを参照で渡せば?
354:デフォルトの名無しさん
09/10/04 19:30:06
>>352の言うとおりだろう。
どこかでコピコンが働いてんだよ。
355:デフォルトの名無しさん
09/10/04 19:35:46
コピコン可愛いお
356:349
09/10/04 19:50:39
>>353の仰るとおり、ポインタを参照で渡したらポインタの内容が
保持されました。
コード部分なんですが、リスト構造のポインタだったので、
操作している部分が長く、見にくいかもしれませんが
書いたほうがよろしいでしょうか?
皆さんレスありがとうございます。
357:デフォルトの名無しさん
09/10/04 20:20:28
教えてください
VS2008で作ったCのプログラム(ただのハローワールド)を
別のマシンで実行させるにはどういうモジュールが必要なんでしょうか
.exeファイルをもっていって実行させてもエラーで動作しませんでした
358:デフォルトの名無しさん
09/10/04 20:27:52
>>357
wine
359:デフォルトの名無しさん
09/10/04 20:29:20
>>357
CRTをStaticにLinkするんだ
360:デフォルトの名無しさん
09/10/04 20:34:15
>>357
.NET Frameworkがいるんじゃね?
361:デフォルトの名無しさん
09/10/04 21:14:07
別のマシンが何なのかも書いてないのに、お前ら適当なw
362:デフォルトの名無しさん
09/10/04 21:14:58
>>349はこのレベルの解説から読んだ方がいい気がする
URLリンク(brain.cc.kogakuin.ac.jp)
363:デフォルトの名無しさん
09/10/04 21:18:55
>>362
だったらまずお前が読めよ
364:デフォルトの名無しさん
09/10/04 21:20:37
お前は何を言ってるんだ
365:デフォルトの名無しさん
09/10/04 21:21:29
自分でも何を言ってるのかわからん
366:デフォルトの名無しさん
09/10/04 21:32:50
>>358-361
すいません。別のマシンってwindowsXPのデフォルトインストール状態のマシンです
なんかライブラリがいるって聞いて、何かをインストールしなきゃいけないのかな?と思い質問しました。
.net frameworkかなと思ったのですがCなのに?という疑問がありました。
ちょっと試してみます
367:デフォルトの名無しさん
09/10/04 21:36:50
>>366
.net frameworkじゃなくてCランタイム
368:デフォルトの名無しさん
09/10/04 21:44:54
364 :デフォルトの名無しさん:2009/10/04(日) 21:20:37
お前は何を言ってるんだ
wwwwwwwwwwwwwwwwwwwwwwwwwwwww
369:デフォルトの名無しさん
09/10/04 21:48:08
>>366
32bit/64bit 問題だったりしてw
370:デフォルトの名無しさん
09/10/04 21:55:35
デバグビルドしてるんだろ
371:デフォルトの名無しさん
09/10/04 22:08:09
>>367
なるほど。。正確にはCランタイムが必要で
.net framework入れるとCランタイムが入ってくるということですね
入れる対象マシンは私のじゃないのでモジュールだけ入れたいのですが
>>359さんの方法が可能なのですかね?ちょっと調べてみます
>>369
その問題がよくわかっていませんがどちらも32bit環境です
372:デフォルトの名無しさん
09/10/04 22:10:44
>>371
これは独り言だけど、コンパイルしたときの条件とか設定とかをちゃんと書くといいかもよ。
373:デフォルトの名無しさん
09/10/04 22:38:18
Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
URLリンク(www.microsoft.com)
...
374:デフォルトの名無しさん
09/10/04 22:42:59
こっちのほうが新しい。
Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ ATL のセキュリティ更新プログラム
URLリンク(www.microsoft.com)
375:デフォルトの名無しさん
09/10/04 23:18:31
質問です。VC9EEで開発しています。
以下のような関数を書いたんです。動機は自作コンテナのオブジェクトプール用のイニシャライザです。
以前の環境をリセットして再利用できるように初期化します。
で、てきとーなテストではうまくいきました。つまり、クラスや構造体のメンバ変数を0にできました。
さて、このコードはセーフなのかアウトなのか知りたいです。メモリリークなどはしてないみたいです。
そのほかにも、もっと簡単な代替手段があればご教授ください。お願いします。
template<class T>
bool ZeroInitializer(T& in){
void* Mem = calloc(1,sizeof(T));
if(Mem == NULL) return false;
T* Temp = new(Mem) T;//<new>をインクルードしないと使えない。
in = *Temp;
delete Temp;
// free(Mem);
return true;
}
376:デフォルトの名無しさん
09/10/04 23:38:25
>>375 です。
今日はもう寝るので明日また見に来ますです。
よろしくお願いします。
377:デフォルトの名無しさん
09/10/04 23:43:37
>>375
何か無用に難しいことやってるね。
memsetで万事解決。
378:デフォルトの名無しさん
09/10/04 23:48:23
>>375
in = T() で十分だろ。
それは別としても、そのコードはアウト。
calloc() で確保したメモリは free() で解放しないとだめ。
あと、 new(Mem) T で例外が発生するとリークする。
そもそも calloc() 使って 0 初期化とか言ってる時点で T に
だいぶきつい制約があるんだろうけどな。
379:デフォルトの名無しさん
09/10/04 23:49:09
>>377 C++ で memset() はねーよ。
380:デフォルトの名無しさん
09/10/04 23:50:25
>>375
メモリリークしてるかどうかはどうやって判断したの?
381:デフォルトの名無しさん
09/10/04 23:51:08
>>379
ゼロクリアする必要があるみたいじゃん。
382:デフォルトの名無しさん
09/10/04 23:57:15
>>377,381
URLリンク(www.kijineko.co.jp)
URLリンク(www.kijineko.co.jp)
383:デフォルトの名無しさん
09/10/04 23:58:19
fill_nとかでいいじゃん。
384:デフォルトの名無しさん
09/10/05 00:00:25
>>382
いや、それは分かるけど、375はゼロクリアが必要だって言ってるんで。
関数名がZeroInitializerだし。
クラスのオブジェクトを初期化したいだけなのなら、話は変わってくるけど。
385:デフォルトの名無しさん
09/10/05 00:02:40
つまり calloc() の後にコンストラクタを走らせてるのが意味不明ってことで。
あとは 375 本人に語らせるしかない。
386:375
09/10/05 00:07:26
>>377
コンストラクタを呼ぶ前ならいいけど、VTableまで0にしちゃったらもんだいないかな?
387:デフォルトの名無しさん
09/10/05 00:09:21
>>386
寝たんじゃないのか。
とりあえず、なぜゼロクリアしたいのか、話を訊こうか。
388:375
09/10/05 00:11:09
途中で投稿してしまった。
>>380
VCの<crtdbg.h>の関数でやりました。
>>381 & >>384
ごめんなさい。とりあえず、現在の状態をリセットできればZEROじゃなくてもいいです。
布団入る前に見にきてよかった。
389:デフォルトの名無しさん
09/10/05 00:12:26
じゃ、378で終了だな。
390:デフォルトの名無しさん
09/10/05 00:14:53
>>388
メモリプールみたいなものを作るならEfficient C++でもみて勉強すれば?
391:375
09/10/05 00:23:10
時間があるので、細々と。
何で、こんなことしようかと思ったかというと、N分木のツリーコンテナを作ったのが始まりです。
このコンテナはテンプレートになっていて、いかなるTをも食います。
無難な初期化法を模索している時に、VCのstd::vectorの中身がかならず0で初期かされていることを思い出しました。
で、これをうまく取り込もうと思ったのでそういうコードを書きました。
>>389
>>378では問題がでないなら、それで終了です。
ちょっと大丈夫か不安だったんですが、まぁ、責任はユーザクラスに投げてしまうのもいいかなぁ。。。
>>390
まず本を買わないと!ですね。
とりあえず方向性が見えたのでそれで何とかしようと思います。
変な質問でしたが誠実に答えていただいてありがとうございました。
ぐっすり寝れますよ。;)
392:デフォルトの名無しさん
09/10/05 00:51:58
std::vectorの場合は、T()、つまり値初期化されるので、intやPODな構造体だと結果的に0初期化になる。
だから、とりあえずは>>375のコードのnewのところをnew(Mem) T();とすればいい。Tの後の括弧が重要。
(コピーコンストラクタなど)コンストラクタに引数を渡す場合もここで渡すこと。
そして、この要素を削除するときにはTemp->~T();でデストラクタを呼んでからfree(Temp);する。
こうすれば、コンストラクタ・デストラクタを持つクラスでもきちんと動くはず。
本格的にやるなら、std::vectorみたいにテンプレート引数でアロケータを取るようにする。
malloc→allocate
new(void*)→construct
~T→destroy
free→deallocate
アロケータのメンバはこう対応する。
393:デフォルトの名無しさん
09/10/05 01:02:20
きめぇコードだなw
テンプレートで書いたら保守なんてできたもんじゃないな
394:デフォルトの名無しさん
09/10/05 01:21:45
>>392
T に制約を設けないならコンストラクタからの例外にも気をつけないと。
395:デフォルトの名無しさん
09/10/05 14:01:33
>>392
詳細ありがとうです。T()でも問題なさそうなのでそれで行きます。
元々は自分の認識の甘さが原因ですね。もっと精進したいと思います。
ありがとうございました。
396:デフォルトの名無しさん
09/10/05 14:15:44
> Tの後の括弧が重要。
括弧はなくてもいいと思うが。あってもいいけど。
397:デフォルトの名無しさん
09/10/05 18:24:36
vectorのイテレータiから要素へのポインタpを得る方法がわからず、
詳しい知人に聞いたら、
p = &*i;
いうやり方を教えてくれました。なるほど確かに動いているのですが、
一見無意味な変換をしているようで気持ち悪いです。
こういうやり方って一般的なんですかね。
398:デフォルトの名無しさん
09/10/05 18:41:42
>>397
一般的だと思う。
「自分の環境のvectorのイテレータはポインタで実装されているから」といって、
イテレータをそのままポインタとして使う方が気持ち悪い。
399:デフォルトの名無しさん
09/10/05 18:43:02
>>397
vectorのイテレータはランダムアクセスイテレータなので、機能的にはほとんどポインタと変わらない。
(*it)ってやれば、要素を返してくるので、それのアドレスを返せばポインタへの変換はできる。
でも、俺もキモイと思う。一般的かは別として。。。
400:デフォルトの名無しさん
09/10/05 19:33:23
>>397
一般的というか、普通にそれが正解だし、中身を理解してくれば不自然さも感じなく
なってくるかもしれないし、なってこないかもしれない
401:デフォルトの名無しさん
09/10/05 19:55:32
VC++2008では、こういうマクロが機能します。
C++の標準としては、引数付きマクロに型引数を指定してもいいんでしょうか。
#define foreach_vector(T, v, i) \
for (std::vector<T>::iterator i = v.begin(); i != v.end(); ++i)
std::vector<int> vec;
...
foreach_vector(int, vec, i)
{
...
}
402:デフォルトの名無しさん
09/10/05 20:00:52
型引数といってもプリプロセッサにとっては単なる文字列に過ぎんから
何を指定してもようござんす。
403:デフォルトの名無しさん
09/10/05 20:17:26
>>401
最終的なC++の文章として整合性の取れた置換がされれば、コンパイラさんは疑ったりしない。
404:デフォルトの名無しさん
09/10/05 22:12:13
>>396
コンストラクタを持つクラスなら確かにどっちでも同じだけど、そうでない組込型やPODだと違うの。
new intだと、int i;のiのように初期化されなけど、new int()は0初期化される。
まあ、たしかにstd::vectorはT()をコピーコンストラクトして0にするので、
これは使っていないはずだけど。
405:デフォルトの名無しさん
09/10/05 22:27:53
mpg又はmp4、wmv, aviといった動画のファイルフォーマットを詳しく書いたHPありませんか?
1024バイトはヘッダーとか、ここからデータが入ってるとか、そういったことが知りたいです。
動画再生ソフトをC、C++でガリガリプログラムしてみたいと思ってます。よろしくお願いします。
406:デフォルトの名無しさん
09/10/05 22:32:19
>>404
へぇ
407:デフォルトの名無しさん
09/10/05 22:35:01
コンテナの最終要素からの後置インクリメントの対処って、やっぱ最終要素の場合インクリメントしないしかないのかな?
408:デフォルトの名無しさん
09/10/05 22:37:48
境界線系のエラーは結構凶悪だから、何もしないか、レンジエラーの例外投げるかするといいと思う。
409:デフォルトの名無しさん
09/10/05 23:38:40
>>405
フォーマットがわかったくらいじゃ再生できなくて
結局規格書が必要になるから最初から規格書手に入れたほうがよい
つーか何人もの熟練のプログラマが関わってても
バグが出るのが動画の世界なのに
そんなことも自分で解決できないレベルじゃ間違いなく挫折する
いや、むしろ俺が挫折した
悪いことは言わないからDirectShowにでも頼ったほうが早い