トップページ⇒tech
1001コメント330KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/05/14(水) 01:00:02
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.53【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1208989385/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0128デフォルトの名無しさん2008/05/19(月) 19:34:53
>>127
「erase 戻り値」でgoogle
0129デフォルトの名無しさん2008/05/19(月) 19:44:30
>>127
すまん勘違いした。
listでのinsertは全てのイテレータを無効にしない。
eraseは対象イテレータのみ無効になる。

つまり、大丈夫。
0130デフォルトの名無しさん2008/05/19(月) 20:13:43
>>129�dクス
0131デフォルトの名無しさん2008/05/19(月) 20:31:31
1クラスにつき1ヘッダ(全定義)+1ソース(全実体)
↑のやり方でやっていたのですが、どうも拙いと気付きました
巧いファイル構成を身に付けたいのですが、中々しっくり来る資料が…orz
コレ読んどけよって書籍やソースなどあればご指導願いします
0132デフォルトの名無しさん2008/05/19(月) 20:47:43

   A  L  L  h  p  p
01331312008/05/19(月) 22:32:00
すみませんでした。出直してきます
0134デフォルトの名無しさん2008/05/19(月) 23:42:52
質問です。VC++2008を使用しています。
以下のリソースファイルをプロジェクトに加えてコンパイルすると
Visual Studioが強制終了してしまいます。なぜでしょうか?

//--- menu.rc---
#include <windows.h>
#define MENU_NEW 2000
#define MENU_OPEN 2001

SAMPLE03 MENU DISCARDABLE
{
POPUP L"ファイル"
{
MENUITEM L"新規作成",MENU_NEW
MENUITEM L"読み込み",MENU_OPEN
}
}
0135デフォルトの名無しさん2008/05/19(月) 23:56:00
Lokiライブラリに小規模アロケートに特化したアロケータがあったと思うんですけど、Lokiのライブラリよりもメジャーなもので
同じニーズに応えたライブラリはありませんか?
0136デフォルトの名無しさん2008/05/20(火) 02:59:19
>>131
そのやりかたで何が拙いと思ったのか気になる。
0137デフォルトの名無しさん2008/05/20(火) 03:00:19
>>135
Loki のやつは知らないけど、たぶん segregated strage だろうってことで boost::pool でいいかな?
0138デフォルトの名無しさん2008/05/20(火) 11:45:17
とりあえずSTARTUPINFOにパイプを入れて子プロセスと繋ぐ事はできましたのですが、
すでに開いてるコマンドプロンプトの標準入出力を別のパイプに繋ぐことってできますか?
0139デフォルトの名無しさん2008/05/20(火) 12:20:20
>>122
でもそうやって乱数を取得しないほうがいいんだよ。
0140デフォルトの名無しさん2008/05/20(火) 18:17:41
C/C++ で、右シフト、左シフトを行う ">>" , "<<" はあるのですが、アセンブリで言うところの
ROL (ローテート) に相当する演算子は C/C++ では用意されてないのでしょうか?
0141デフォルトの名無しさん2008/05/20(火) 18:34:52
ありません。
0142デフォルトの名無しさん2008/05/20(火) 18:38:00
>>141
そうですか。どうもありがとうございました。
0143デフォルトの名無しさん2008/05/20(火) 18:45:38
_rotl
0144デフォルトの名無しさん2008/05/20(火) 19:28:50
>>143
なるほど、そんな関数があるんですね。教えてくださってどうもありがとうございました。
0145デフォルトの名無しさん2008/05/20(火) 19:37:27
童貞力に相当する演算子もないな。
0146デフォルトの名無しさん2008/05/20(火) 20:18:13
ひょっとして、 _rotl なんかの代わりに
int a; a=0x0000000f;
_asm{
MOV EBX,a
ROL EBX,2
MOV a,EBX
}
なんて書くのもアリだったりする?それとも、こういう実装の仕方は普通はしない?
0147デフォルトの名無しさん2008/05/20(火) 20:25:49
しないわ
ビット演算組み合わせるとか
0148デフォルトの名無しさん2008/05/20(火) 20:28:30
>>147
なるほど、分りました。お答えくださってどうもありがとうございました。
0149デフォルトの名無しさん2008/05/20(火) 20:39:02
gccなら
w = w<<s | w>>(32-s)
みたいにするとrotlにしてくれる場合がある。

確実にしたければ以下のようなインライン関数を作って呼び出せばOK

static inline uint32_t rotl(uint32_t src, uint8_t n) {
__asm__("roll %2,%1"
: "=r"(src)
: "0"(src), "cI"(n));
return src;
}

gccはインラインアセンブラも最適化の対象になるので、
単純に>>146みたいにするとおかしなことになるかも?
0150デフォルトの名無しさん2008/05/20(火) 21:10:48
確実にrolにならないといけないような場合はともかく、
それ以外の場合で環境依存を強めるのは止めようぜ・・・。
0151デフォルトの名無しさん2008/05/20(火) 22:54:25
質問です。
環境 VC6.0 / Windows2000
において、以下のコードで
i=m_NoList.begin()実行後に、
アクセスバイオレーションエラーが発生します。
デバッグでは、begin→STLのソース NEXT (_HEAD)・・・という箇所で
不正アドレスを参照しているように見えますが、原因が特定できません。
腑に落ちないのは、
if(m_NoList.size()>0)で要素があるにもかかわらず、
beginを実行するとエラーが発生するという点です。
使い方が間違っているのかもしれませんが、
ご見識のある方がいらしましたら、アドバイスお願いします m(__)m

Mutex.get(); ←ミューテックスでロックする
std::list<ListNo>::iterator i;
if(m_NoList.size()>0)
{
for ( i=m_NoList.begin(); i!=m_NoList.end();i++ ){ ←beginでエラー発生
if ( (*i) == No ) {
Mutex.release(); ←ミューテックスを開放する
return true;
}
}
Mutex.release(); ←ミューテックスを開放する
}
0152デフォルトの名無しさん2008/05/20(火) 23:00:40
Mutexとやらを外しても同じエラーなの?
ListNoの型は何?
0153デフォルトの名無しさん2008/05/21(水) 00:37:12
質問です。以下のプログラムの最終的な出力が7になるのがどうしても理解できません。
最初の*&x=,x=が2,2になるのはわかるんですが、2度目の*&x=が5になるのがわからなくて・・・
もし*&x=5なら最後の出力は10になる気がするのですが。

#include <stdio.h>

int x=1;

void f(int *p){
*p+=x;
}
int main(void){
int y;
f(&x);
printf("*&x=%d,x=%d\n",*&x,x);
{
int x=5;
printf("*&x=%d,x=%d\n",*&x,x);
f(&x);
y=x;
}
x=y;
printf("%d\n",x);
return 0;
}
0154デフォルトの名無しさん2008/05/21(水) 00:43:08
グローバル変数よりローカル変数の方が優先されるんだよ
でも二回目に表示されるxはスコープをy=xを終えた後
スコープを抜けて無効になるから結果が7になる
0155デフォルトの名無しさん2008/05/21(水) 00:44:02
日本語が…
>二回目に表示されるxはy=xを終えた後
の間違いでした
0156デフォルトの名無しさん2008/05/21(水) 00:44:51
>>153
*&xはいつもxと同じ、わざわざxと並べる意味はない。
外のxと中のxを別の変数だと思えば、理解しやすいと思う。

int グローバルなx=1;

void f(int *p) {
*p+=グローバルなx;
}
int main(void) {
  int y;
  f(&グローバルなx);
  printf("*&x=%d,x=%d\n",*&グローバルなx,グローバルなx);
  {
    int ローカルなx=5;
    printf("*&x=%d,x=%d\n",*&ローカルなx,ローカルなx);
    f(&ローカルなx);
    y=ローカルなx;
  }
  グローバルなx=y;
  printf("%d\n",グローバルなx);
  return 0;
}
0157デフォルトの名無しさん2008/05/21(水) 01:00:17
C++の継承について質問させてください。

class AAA
class BBB : public AAA
class CCC : public BBB
という継承しているクラスがあった時に、

AAA *pA;
BBB *pB;
CCC C, *pC;

pA = &C;
pB = &C;
pC = &C;

と書く事ができるのですが、
pA = &C;
pB = &C;
は、何でコンパイラに怒られないんでしょうか?
継承というのは、継承したクラスとしての扱いもできる、というような
イメージでいいんでしょうか?
0158デフォルトの名無しさん2008/05/21(水) 01:03:32
同じクラスから派生した物だったら大体似たようなもの筈だから
全部同じポインタ変数で扱えて便利なことも多い
01591532008/05/21(水) 01:07:19
>>154-156
解答ありがとうございました。
よく考えてみれば、int x=5;は代入ではなく変数の宣言でしたね…
ということは、最初のf(&x)でグローバルxにグローバルx+グローバルx(1+1=2)が代入されて、
次のf(&x)ではローカルxにローカルx+グローバルx(5+2=7)が代入され、
最後にローカルx→y→グローバルx(出力)という考え方でよいのでしょうか。
0160デフォルトの名無しさん2008/05/21(水) 01:11:22
そうそう
01611572008/05/21(水) 01:25:15
>>158さん
レスありがとうございます。

> 同じクラスから派生した物だったら大体似たようなもの筈だから
とありますが、構造体の場合は、
中身が全く一緒だとしてもコンパイルでエラーが出ますよね?

struct AA
struct BB

AA *p, A;
BB B;

p = &A;
p = &B; ←キャスト違い

p = (AA*)(&B)
上のようにキャストを変更してあげればコンパイルは通りますが、
継承したクラスの場合は、勝手にこのような処理をしてくれているのでしょうか?
何でクラスの継承の場合は問題なくコンパイルが通るのかが気になってしまって…。
0162デフォルトの名無しさん2008/05/21(水) 01:28:48
そうしてくれるようにしないと継承というシステムの本領が発揮できないから
つまりそうなるようにわざわざ作った
0163デフォルトの名無しさん2008/05/21(水) 01:29:09
派生クラスってのは基底クラスのオブジェクトでもあるってのが言語上の仕様だからな
0164デフォルトの名無しさん2008/05/21(水) 01:31:49
別々のモノを中身が全く一緒だと知ってるのは人間だけだもんなー
0165デフォルトの名無しさん2008/05/21(水) 01:36:44
Cの構造体的な発想では
基底クラス←派生クラス
っていうポインタの代入はダウンキャストだもんな。
そこがいまだにしっくり来ない。
01661572008/05/21(水) 01:46:32
皆様ありがとうございます。
継承したクラスとしての扱いもできるのは
とりあえずそういう仕様だという事なのですね。
おかげさまで勉強になりました。
ありがとうございました!
0167デフォルトの名無しさん2008/05/21(水) 02:16:00
#include <stdio.h>

int main(void){
int a[]={0,0,0,0};
int k=1;
a[k]=1;
a[a[k]]=2;
printf("%d\n",a[a[k]]);
return 0;
}

で、出力が2ではなく0になるのですがどうしてでしょうか。
ご教授のほどよろしくお願いします。
0168デフォルトの名無しさん2008/05/21(水) 02:30:40
#include <stdio.h>

int main(void){
int a[]={0,0,0,0};
int k=1;
a[k]=1;
a[a[k]]=2;        ←ここで a[a[k]]→a[a[1]]→a[1]=2になってる
printf("%d\n",a[a[k]]); ←つまりここでは a[a[k]]→a[a[1]]→a[2]なので0のまま
return 0;
}
0169デフォルトの名無しさん2008/05/21(水) 02:30:45
>>167
#include <stdio.h>

int main(void){
int a[]={0,0,0,0};
int k=1;
a[k]=1; // a[k] == a[1]
a[a[k]]=2; // a[a[k]] == a[a[1]] == a[1]
printf("%d\n",a[a[k]]); // a[a[k]] == a[a[1]] == a[2]
return 0;
}
0170デフォルトの名無しさん2008/05/21(水) 02:31:51
ついでにご教授じゃなくてご教示な
0171デフォルトの名無しさん2008/05/21(水) 02:35:31
そんな漢字の細かい事どうでもいいんじゃい ボケ
教えて感がでてればええんじゃい
0172デフォルトの名無しさん2008/05/21(水) 03:08:07
正しい日本語を使おうぜ。
170が丁寧に教えてくれただけでもありがたいと思わないと。
0173デフォルトの名無しさん2008/05/21(水) 04:12:27
>>171
漢字が違うのではなく、言葉が違うのです。
自分の間違いをできる限り「小さくてどうでもいいこと」と思いたい雑魚特有の気持ちはわかりますが、
たった2文字でも十分過ぎるほど馬鹿さが滲み出てしまう、割と致命的なことですので、
二度と間違えないよう気をつけることをおすすめします。
0174デフォルトの名無しさん2008/05/21(水) 07:11:01
>>136
大規模にするにつれてヘッダの量に煩わしさを感じたのですが
普通は纏めないほうが修正が容易で良いと評価されるのでしょうか?
0175デフォルトの名無しさん2008/05/21(水) 07:28:12
ヘッダのヘッダをつくる
0176デフォルトの名無しさん2008/05/21(水) 07:36:18
.hと.cpp/.c一対で動くようにしておいた方が
デバッグが楽だと思うんだけど
0177デフォルトの名無しさん2008/05/21(水) 12:16:16
>>174
ヘッダを纏めるなんてとんでもない。無駄に依存関係が膨らむだけだろ。
0178デフォルトの名無しさん2008/05/21(水) 12:31:16
>>161
たまたま同じ構成だっただけで目的が同じとは限らないからな。3次元の座標の構造体が、3原色を表す構造体にコピーできたら困る品。
0179デフォルトの名無しさん2008/05/22(木) 23:07:17
A.hpp
class A {};

UseA.hpp
#inlcude "A.hpp"
class UseA { A m_obj; };

main.cpp
#include "UseA.h"

とするとmain.cppでA.hppまでインクルードされてしまい、回避するにはUseA.hppにて
class A;
UseA { A* m_p; }
とするくらいしか思いつかないのですが、もっと単純な方法ってありますか?

具体的には、main.cppからはclass Aのインスタンスが作成できないようにしたい、ということです。
0180デフォルトの名無しさん2008/05/22(木) 23:21:22
日本語で書き直してください。
0181デフォルトの名無しさん2008/05/22(木) 23:26:39
>>179
無理です。名前空間で工夫してください。
namespace detail { class A{...}; } とか。
0182デフォルトの名無しさん2008/05/22(木) 23:32:14
わかりました、ありがとうございます!
0183デフォルトの名無しさん2008/05/22(木) 23:38:31
>>179
class UseA;
class A { friend UseA; ... };
0184デフォルトの名無しさん2008/05/23(金) 00:31:03
サーバに送るデータをUTF-8に統一しようと思ったんですが、
sizeof(wchar_t) == 2ならUTF-16、
sizeof(wchar_t) == 4ならUCS4
って考えて実用上は問題ないでしょうか
(Linux||Mac)&gcc、Win&(VC++||bcc)あたりで動けばいいかなと思ってるんですが
ICU使うほどの処理でもないような気がするんです
0185デフォルトの名無しさん2008/05/23(金) 00:38:39
wcrtombとか使えば、wchar_tの実装気にしなくていいと思うが
0186デフォルトの名無しさん2008/05/23(金) 00:58:08
ベクトルについての質問です。
初心者ながら調べまわったのですがここにたどり着きました。
お願いします。
ベクトルの要素削除eraseは引数にイテレータを入れますが
要素参照のatのように添字を使用して要素を削除することはできないのでしょうか?
0187デフォルトの名無しさん2008/05/23(金) 00:59:45
ベクターです
0188デフォルトの名無しさん2008/05/23(金) 01:03:42
>>186
erase()ではできませんが、advance()辺りでIteratorを作ればできなくはありません。
0189デフォルトの名無しさん2008/05/23(金) 01:09:11
x.erase(x.begin() + 1);
こういうノリでいける気がするけどどうなんだか
0190デフォルトの名無しさん2008/05/23(金) 01:36:58
>>184
Windowsのwchar_tはUTF-16で問題ないと思う。
Linuxのglibcのwchar_tはUCS4で問題ないと思う。
Mac OS X では wchar_tはサポートされていない。
それ以外のUNIXではwchar_tの中身はUnicodeではないことが多い。
0191デフォルトの名無しさん2008/05/23(金) 02:48:50
>>189
いけるね。
v[3]とv.begin()+3は結局同じ要素をさしているけど
後者はイテレータとして扱われる。
Accelerated C++でもそういう例が出てくる。
0192デフォルトの名無しさん2008/05/23(金) 03:35:08
質問です
型の詳細がわからないオブジェクト同士の比較(メンバ変数の比較)
をするのにいい関数ってありますか?
0193デフォルトの名無しさん2008/05/23(金) 04:58:15
「型の詳細がわからないオブジェクト」とは、具体的にどういう状態なのか。
「比較」というのは、どういう比較をしたいのか。この場合の「いい」とは何を指すのか。
現状も願望も曖昧に書かれているから、答えようが無い。
0194デフォルトの名無しさん2008/05/23(金) 08:43:57
>>189
細かいことを言うと、あとでvectorをやっぱりlistにしたい
何てことになったときに書き直さなきゃならなくなる。
なのでadvanceで書いておいたほうが良いかも知れない。
0195デフォルトの名無しさん2008/05/23(金) 08:52:24
advance() は変数用意しないと使えないのがウザイ。
そこで boost::next() ですよ。
0196デフォルトの名無しさん2008/05/23(金) 12:13:17
ベクトルの質問をした者です。
advance()とイテレータの加算で解決できました。
ありがとうございました。

>>195
boostというライブラリさえ知りませんでした
おかげで知識の幅が広がりました
0197デフォルトの名無しさん2008/05/23(金) 12:30:19
良かったね。その調子で終わらないboostの勉強をしよう。
0198デフォルトの名無しさん2008/05/23(金) 17:35:06
char型の配列って、初期化の際に

char ch [4] = { 0x10, 0x11, 0x12, 0x00}
みたいに値を代入できますが、

char ch [4];
char ch = { 0x10, 0x11, 0x12, 0x00};
みたいに、一旦宣言だけしておいて代入、みたいなことはできませんよね。

では、クラスのchar型のデータメンバをコンストラクタで初期化する時に
char ch [4] = { 0x10, 0x11, 0x12, 0x00}
みたいに格納したいときはどうすればよいでしょうか??
strcpy()は使えないですよね??
0199デフォルトの名無しさん2008/05/23(金) 17:36:21
char ch [4];
char ch = { 0x10, 0x11, 0x12, 0x00};

2行目、先頭のcharが余計でした。
0200デフォルトの名無しさん2008/05/23(金) 17:39:30
>>198
ch[0] = 0x10;
ch[1] = 0x11;
ch[2] = 0x12;
ch[3] = 0x00;
0201デフォルトの名無しさん2008/05/23(金) 17:41:23
ありがとうございます。
やっぱりコンストラクタでやる場合はそれしかない感じでしょうか。
あとはstaticメンバにしてグローバル領域で初期化ぐらいでしょうか・・
0202デフォルトの名無しさん2008/05/23(金) 17:42:10
static const char InitVal[4];なメンバを作っておいて、コンストラクタ内で複製すればいいんじゃないかな
0203デフォルトの名無しさん2008/05/23(金) 17:59:21
代入できるところならstrcpyもできるよ。コンストラクタ内でも。
0204デフォルトの名無しさん2008/05/23(金) 18:03:29
using namespace boost::assign;

vector<int> v, v2;
v = list_of(1)(2)(3);
// v = {
v2 = list_of(0).range(v).range(v.begin(),v.end())(4);
// v2 = [0,1,2,3,1,2,3,4]
0205デフォルトの名無しさん2008/05/23(金) 18:04:56
ミスッた
boostにこんなのもある。
生配列に使えたか分からんけど

using namespace boost::assign;

vector<int> v, v2;
v = list_of(1)(2)(3);
// v = {1,2,3}
v2 = list_of(0).range(v).range(v.begin(),v.end())(4);
// v2 = [0,1,2,3,1,2,3,4]
0206デフォルトの名無しさん2008/05/23(金) 18:08:43
それくらいなら軽ーく自分でもかけるんじゃないか?
boostが使えなくてもoperator()()で糖衣構文が作れるから忘れないでいて欲しい。
0207デフォルトの名無しさん2008/05/23(金) 18:43:50
char input[255] , output[255];


scanf("%s",input);

scanfで読み込んだファイル名をhoge.txtとして
outfileにhogehoge_hoge.txtと代入するにはどうしたらいいですか?

0208デフォルトの名無しさん2008/05/23(金) 18:50:26
fopenを使えばいいよ
0209デフォルトの名無しさん2008/05/23(金) 19:08:36
使い方がわからないです
0210デフォルトの名無しさん2008/05/23(金) 19:11:23
ぐぐぐぐぐぐぐぐぐぐぐぐぐぐぐれかす
0211デフォルトの名無しさん2008/05/23(金) 19:12:58
グーグルになぜかアク禁くらってるんっす
0212デフォルトの名無しさん2008/05/23(金) 19:14:09
ならやふれ。げいつれ。ぐーれ。いんふぉしーくれ。
0213デフォルトの名無しさん2008/05/23(金) 19:54:53
>>202
>>203
ありがとうございます。コンストラクタ内でコピーでなんとかなりました。
0214デフォルトの名無しさん2008/05/23(金) 19:59:20
stringstream ss;
ss << "abcdefghijklmn";
ss.str().replace(2,1,1,'x');
fout << ss.str();

みたいなことをしたいのですが、文字列が"abcdefghijklmn"のまま出力されます。
こういうことはできないのでしょうか??
0215マイク ◆yrBrqfF1Ew 2008/05/23(金) 21:34:20
>>214

stringstream ss;
ss << "abcdefghijklmn";
string str(ss.str());
str.replace(2,1,1,'x');
fout << str;

std::stringstream::str()は呼ばれるたび一時オブジェクトを生成して返すから文字が変更されない、気がした。
詳しくはC++の仕様書なりライブラリドキュメントを参照すべし。
0216マイク ◆yrBrqfF1Ew 2008/05/23(金) 21:41:51
あれ?
const string &str(ss.str().replace(2,1,1,'x'));
の方が無駄なインスタンス作らないかも。
0217デフォルトの名無しさん2008/05/23(金) 22:46:48
Cで趣味でゲーム作ってたりするのですが、
プログラミング大会とかゲームコンテストってあるのですか?

できれば高校在学中にどうにかして成果をあげたいので・・・

ゲームの作り込みとかもあるんだろうけど、
意見ある方や知ってる方などいたら教えてくださいな
0218デフォルトの名無しさん2008/05/23(金) 22:54:44
>>216
マイク、replaceの戻り値はstring&だから、それヤバイよ。
0219デフォルトの名無しさん2008/05/23(金) 22:55:59
>>217
HSPコンテスト
0220デフォルトの名無しさん2008/05/23(金) 22:58:57
>>219
HSPコンテストは出しましたw
1次予選は受かったものの賞はもらえませんでしたが・・・

HSPでゲームやツールを作ったくらいでは成果にならない、
ということも耳にします。
0221デフォルトの名無しさん2008/05/23(金) 22:59:53
ハル研究所 プログラミングコンテスト2008
0222デフォルトの名無しさん2008/05/23(金) 23:01:21
と、いうかCでつくってもそれは同じことだよ
0223デフォルトの名無しさん2008/05/23(金) 23:02:18
プログラムと、ゲーム作りは別だろう。たとえば軽量で速いプログラムが作れても
面白いゲームが作れるかは別。
0224デフォルトの名無しさん2008/05/23(金) 23:04:30
プログラムが出来なくても、ドラクエの堀井裕二とかいるし、絵や音楽が上手ければ
ゲームの一部の開発は出来る。ゲームが作りたいの?
0225デフォルトの名無しさん2008/05/23(金) 23:09:09
よく >>224 という話を見るが堀井雄二は昔は自分で作っていました
論旨はわかるけど、別の人を例に出したほうが良いでしょう
0226デフォルトの名無しさん2008/05/23(金) 23:12:03
俺はHSPコンテストで賞もらったなぁ。
丁度ばら撒くように賞を出してた頃だったからあれはあれで結構ショックだった。
でもあんなもの何の役にもたたんよ。同人だからな。どうせ219はネタのつもりで書いたんだろう。
0227デフォルトの名無しさん2008/05/23(金) 23:12:19
まて、質問者は 「ゲームやツール」 と言ってるのに
何でゲーム限定になってるんだ?w
■ このスレッドは過去ログ倉庫に格納されています