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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.40【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1184717430/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
2987:2007/08/06(月) 23:28:56
int errsv = errno;
int i,j,k,t;
int No1,No2;
int Rs[3500][20],Hn[3500]={0};
double u,x,y;
double Odds[3500][20],Poll[3500][20],Poll_S[3500][20],Poll_T[3500][20];
FILE *fpr,*fpw;
printf("%d\n",errsv);
でもとくにないです。
BCCDeveloperの問題の気がしてきました。
レスどうもでした。
3デフォルトの名無しさん:2007/08/06(月) 23:29:47
>>1乙!

何をしたら動かなくなったのかが知りたいな。
できればfopenとかの戻り値をチェックして欲しい。
ってか、ローカル変数でかいYO!って落ちじゃないよな?
4デフォルトの名無しさん:2007/08/06(月) 23:45:20
>>987
Rs,Hn,Odds,Poll,Poll_S,Poll_T
を、まずmallocで確保しようぜ?

それでダメだったらまた来いよ。
5デフォルトの名無しさん:2007/08/06(月) 23:54:22
6デフォルトの名無しさん:2007/08/07(火) 00:00:50
>>前スレ986
> 従って、ヌルポインタはprintf()の引数として処理できない。
できるよ。

printf("%p\n", (void*)0);
7デフォルトの名無しさん:2007/08/07(火) 00:38:42
printf("%p\n", NULL);
8デフォルトの名無しさん:2007/08/07(火) 00:46:05
>>7 それ、らめぇ
9デフォルトの名無しさん:2007/08/07(火) 00:51:41
NULL で思い出したんだけども C++ って NULL よりも 0 を使う方がいいの?
10デフォルトの名無しさん:2007/08/07(火) 01:04:50
>>9
どちらとも言えない。 NULL 使うんなら対応するヘッダのインクルードを忘れずに。
あとは↓を見て自分なりの答えをどうぞ。
http://www.kouno.jp/home/c_faq/c5.html
11デフォルトの名無しさん:2007/08/07(火) 02:21:49
>>9
C++ では NULL は 0 と定義されているとは限らない。処理系定義。
だから、NULL と書いておけば、処理系によっては

int n = NULL;

と書いた時にエラーか警告を出してくれるかもしれない。
12デフォルトの名無しさん:2007/08/07(火) 02:29:11
>>9
好みの問題だから、どっちでもいいよ。
13デフォルトの名無しさん:2007/08/07(火) 02:49:37
>>11
エラーは出せない。
14デフォルトの名無しさん:2007/08/07(火) 03:29:10
>>11
C でも同じだろ。
15デフォルトの名無しさん:2007/08/07(火) 03:38:15
>>14
C は 0 か ((void*)0) だっしょ。
C++ は完全に処理系定義だったはず。
C99 で変わってたら知らんが。
16デフォルトの名無しさん:2007/08/07(火) 03:52:07
あんまり仕様の隙間を縫うような考え方はしない方がいいよ
17デフォルトの名無しさん:2007/08/07(火) 05:10:27
まーたNULLの話題かw
18デフォルトの名無しさん:2007/08/07(火) 07:21:45
ポインタのみに適合するNULLをテンプレートで実装してみたけどどうよ、
って話を何年か前に見た記憶があるんだけど、どこで見たんだか思い出せない
19デフォルトの名無しさん:2007/08/07(火) 07:42:53
ポインタのみに適合するNULLをテンプレートで実装してみたけどどうよ、
って話を何日か前に見た記憶があるんだけど、どこで見たんだか思い出せる
20デフォルトの名無しさん:2007/08/07(火) 07:53:17
>>15
とりあえず、 C99 では処理系定義。
21デフォルトの名無しさん:2007/08/07(火) 10:57:05
教えていただきたいことがあるのですが
BCC32にて、ユニットテストを行うコンソールアプリを製作してるのですが
下記のように関数[AssertEqueal]が呼ばれてた場合、
[AssertEqueal]内でソースファイル内での行数を取得することは可能なのでしょうか?
可能ならばその方法を教えていただきたいのですが

void main()
{
AssertEqueal( a , b );
}
22デフォルトの名無しさん:2007/08/07(火) 11:10:59
__LINE__を使うとか
23デフォルトの名無しさん:2007/08/07(火) 11:12:26
つ __LINE__
AssertEquealはマクロ関数で実装して。
24デフォルトの名無しさん:2007/08/07(火) 12:13:37
>>22,23
ありがとうございます、無事実装できましたー
25デフォルトの名無しさん:2007/08/07(火) 16:12:31
この調子だと __FILE__ も使ってなかったりしないよな。
26デフォルトの名無しさん:2007/08/07(火) 16:25:03
なんすかそれ
27デフォルトの名無しさん:2007/08/07(火) 16:32:41
__FILE__ と __LINE__ はセットだろー
ついでに文字列化演算子 # もな
28デフォルトの名無しさん:2007/08/07(火) 16:44:14
そんなんあるんですか
29デフォルトの名無しさん:2007/08/07(火) 16:56:31
つか、この分だと普通にassert()を知らないんじゃないか
30デフォルトの名無しさん:2007/08/07(火) 17:17:36
assert知ってるけど使ってない
便利なもん?
31デフォルトの名無しさん:2007/08/07(火) 17:29:21
それは知ってるって言わない
32デフォルトの名無しさん:2007/08/07(火) 17:36:19
assert知らないけど使ってる
何するもん?
33デフォルトの名無しさん:2007/08/07(火) 17:46:47
ちょっと自信ないから調べてきた

つまりは
assert( 条件 )
って風に書いて、この条件がfalseになったらそこで止めてくれるってことでよろしい?
でもリリースにするとどうなるの?勝手に何かに置き換わってくれる?
34デフォルトの名無しさん:2007/08/07(火) 17:56:24
そんなん#ifdef _DEBUGとかでくるめばよかろう
35デフォルトの名無しさん:2007/08/07(火) 18:01:18
assert は NDEBUG が #define されてるかどうかで中身が変わる。

NDEBUG が #define されていると assert は何もしない。
NDEBUG が #define されてなければ、条件が false だったら abort する。
36デフォルトの名無しさん:2007/08/07(火) 18:02:07
横からサンクス
37デフォルトの名無しさん:2007/08/07(火) 18:04:15
>>35
どうもありがとう
38デフォルトの名無しさん:2007/08/07(火) 18:18:53
みんな、マニュアル読もうな
39デフォルトの名無しさん:2007/08/07(火) 18:26:28
お前が一番読め
40デフォルトの名無しさん:2007/08/07(火) 18:34:51
abort()ってUnixとかだとコアダンプを吐いて終了するのが普通だけど
Win+IDEとかで開発してるとデバッガが起動してくれたほうが何かと便利なので、
abort()ってあんま便利じゃない希ガス
my_abort() { char **nullpo = 0; *nullpo = "ガッ"; }
みたいなの作って、強引にSEGV起こしてデバッガ起動させたほうが便利かも

例外も、スローされた場所が分からないという意味では、微妙に役に立たない
面があるよね、C++だと
41デフォルトの名無しさん:2007/08/07(火) 18:44:34
>40
マクロで__FILE__と__LINE__を引数に取る例外クラスを作ればいいかと思う。
前に適当に作ったんだけど実際に使ったことがないので使い勝手はなんともいえん

JavaのprintStackTraceみたいのがあればいいけどね
42デフォルトの名無しさん:2007/08/07(火) 18:58:12
>>40
Visual Studioだと、assertも引っかかったときや
例外が投げられた時点でデバッガに移れるぞ。
スタックの状態はassertやthrow式の時点のものが見れる。
43デフォルトの名無しさん:2007/08/07(火) 19:26:30
>>41
スタックトレース見れるとそうでないとでは随分違うよね。
>>42
ああ、そうだっけか。なら、同じかな。
SEGVだとデバッガがインストールされていない場合でもDr.ワトソン経由で
コアダンプが吐かれるのがいいかなとも思うけど。
44デフォルトの名無しさん:2007/08/07(火) 19:34:57
>>41
struct pos_info {
const char* file;
int line;
pos_info(const char* file, int line) : file(file), line(line) { }
};

#define POS_INFO pos_info(__FILE__, __LINE__)

こいつを引数にとるとか。
45デフォルトの名無しさん:2007/08/07(火) 19:51:12
gccだとバックトレース取れるみたいだな
ttp://0xcc.net/blog/archives/000067.html

移植性も糞もないがw
46デフォルトの名無しさん:2007/08/07(火) 20:52:56
すれ違いかもしれませんが、行数の多いものをコンパイルすると一定以上の上部行数が
表示されないんですが、表示させる設定はあるのでしょうか?
47デフォルトの名無しさん:2007/08/07(火) 20:54:46
意味がわからないが、moreをパイプとか
48デフォルトの名無しさん:2007/08/07(火) 20:55:33
一定以上の上部行数って何のよ。エラーメッセージ?
環境は?
49デフォルトの名無しさん:2007/08/07(火) 21:07:53
環境はwindowsXPでCPadとLSI C-86を使っています。
各ソートの詳細な動きを見たいんですが、エラーではないと思いますが
下のソースを実行すると0123485679から上が表示されないんです。
説明が下手ですいません。
50デフォルトの名無しさん:2007/08/07(火) 21:09:31
printf("%d",rand())
51デフォルトの名無しさん:2007/08/07(火) 21:09:33
このぺーじのを参考にしています。
ttp://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html
52デフォルトの名無しさん:2007/08/07(火) 21:10:48
そのぺーじは参考にしてはいけません。
53デフォルトの名無しさん:2007/08/07(火) 21:13:10
つーか今時LSI C-86か
VS2005 Expressとかがタダで使える時代に
54デフォルトの名無しさん:2007/08/07(火) 21:24:55
原始人なんですいません
55デフォルトの名無しさん:2007/08/07(火) 21:55:51
そこのソース酷いなww
何言ってるのか分からんが、ShowDataのところを以下に書き換えたらどうだ

void ShowData(int x[ ], int n)
{
int i;

for (i = 0; i < n ; i++)
printf("%d ", x[i]);
putchar('\n');
}
56デフォルトの名無しさん:2007/08/07(火) 22:21:51
携帯から失礼します。
C言語の話なのですが同じ型の
二つの構造体をビット演算子で
比較することは不可能なのでしょうか。

職場でさっきやってみたら
コンパイルエラー。。。
57デフォルトの名無しさん:2007/08/07(火) 22:27:15
別にwindowsでもバックトレースは取れるべ
http://www.codeguru.com/cpp/w-p/system/threading/article.php/c10317/
58デフォルトの名無しさん:2007/08/07(火) 22:28:19
ビット演算子で比較って何よ。
ビット演算子は比較するためのものではありません
59デフォルトの名無しさん:2007/08/07(火) 22:34:16
なんだか、intならビット演算で比較ができるとでもいいたそうな56だなー
#そりゃ、算術演算も究極的にはビット演算だけどさ
60デフォルトの名無しさん:2007/08/07(火) 22:39:59
アセンブリ言語的には TEST 命令があるから
ビット演算で比較というのもナシではないけどね。
61デフォルトの名無しさん:2007/08/07(火) 22:46:35
>>46
LSI C-86は使ったことも無くESPしてみるけど、DOSコンパイルなの?
表示行が多くて、始めに出力した内容がDOS窓を上にスクロールしてもみえません。とか?
6256:2007/08/07(火) 23:29:26
家についた>>56です。
少しスレを荒れさせてしまったようで申し訳ありません。

struct point {
int a;
int b;



int z;
};

思想としては上記のような型の2つの変数があった場合
メンバa同士で論理積(AND)演算を行う
メンバb同士を論理積(AND)演算を行う



メンバz同士を論理積(AND)演算を行う

という処理が冗長な感じがして
全く同じ構造体の型=全く同じビットパターンでは無いか?
ならば丸ごと論理積(AND)演算は実行できないだろうか?

と思った次第でございます。
63デフォルトの名無しさん:2007/08/07(火) 23:32:35
地道に1個ずつやるしかない。
64デフォルトの名無しさん:2007/08/07(火) 23:35:31
>>62
もしint aとかが1ビットしか使っていなければビットフィールドを使う手もある。
とはいっても、量によっては結局何行か必要になるわけだが・・・
65デフォルトの名無しさん:2007/08/07(火) 23:36:39
void memand(void *a, const void *b, size_t n)
{
char *pa = a;
const char *pb = b;
size_t i;
for (i = 0; i < n; i++) {
*pa++ &= *pb++;
}
}
みたいなのを作って使うとか。
66デフォルトの名無しさん:2007/08/07(火) 23:52:05
それでいいならmemcmpでいいだろ。
でも構造体にはパディングが入る可能性があるので
規格上は動作が保証されない。
やっぱメンバごとに比較するのがよいと思われ。
67デフォルトの名無しさん:2007/08/07(火) 23:54:46
論理積? &&の方?、
left.a && left.aと
left.b && left.bと
...
それぞれの関係がわからない・・・
a-zまでをさらにまた&&で結合させるの?
6856:2007/08/08(水) 00:15:37
56です。
>>67さん
論理積と書いてしまって混乱させてしまったようですが
ビットAND演算子(&)を想定しています。

構造体Aのメンバa-zは
フラグ(0x01 or 0x00)として意味を持ち

それに大して構造体Bで用意したメンバa-z(0x01 or 0x00)
を各メンバ同士ビットAND演算子(&)で演算を行って
フラグを残したり、落としたりという処理をしたかったりしてました。
69デフォルトの名無しさん:2007/08/08(水) 00:19:07
一つの変数に複数のフラグを持たせるか、そういう関数作るが一番いいと思う。
7056:2007/08/08(水) 00:20:19
56です。

思えば同じ型の構造体でも丸ごと代入は許されていない
ことを考えれば丸ごとビット演算もちょっと無理な話であることは
少々考えればわかることでした。。。

アドバイスくださった皆様どうもありがとうございました /平伏
71デフォルトの名無しさん:2007/08/08(水) 00:23:55
bitset.hのような話?
72デフォルトの名無しさん:2007/08/08(水) 00:31:10
>>70
>思えば同じ型の構造体でも丸ごと代入は許されていない
普通にできるけど。
--
struct {int a; int b;} a = {1, 2}, b;
b = a;
73デフォルトの名無しさん:2007/08/08(水) 00:31:35
>>70
構造体丸ごとの代入は許されてるよん。
代入しか許されてないけど。
7456:2007/08/08(水) 00:44:30
構造体丸ごとの代入
→ググッたら普通に出てきた。。。
無知で申し訳ないです
75デフォルトの名無しさん:2007/08/08(水) 05:24:03
while (str != null) {
hoge
)
みたいな関数についてなんですが、
なんでstr != nullで動くんですか?
文字列の終わりはnullじゃなくて、¥0じゃないんですか?
nullは無効なメモリアドレスで、
¥0とは違う意味じゃないんですか?
76デフォルトの名無しさん:2007/08/08(水) 05:37:27
違う意味だね。
だから、文字列の終わりを判定するコードじゃないんだろう。
77デフォルトの名無しさん:2007/08/08(水) 05:45:48
>>75
strは文字配列へのポインタで、
まさにstrが無効なメモリアドレスでない間ループを回すコードじゃないのか?
strの型を確認してみるんだ。
78デフォルトの名無しさん:2007/08/08(水) 07:07:03
もし
#define null '\0'
であれば、件のコードは
while (*str != null) {...}
のはずなので、ほぼ間違いなく「正しいコード」だろう。
ただ、nullではなくNULLだろうな。
79デフォルトの名無しさん:2007/08/08(水) 08:34:24
>>76
>>77
>>78
わかりました!
80デフォルトの名無しさん:2007/08/08(水) 09:04:05
在宅アルバイトならチャットレディがオススメ。
はっきり言ってこんなに楽で自由で高収入のアルバイトは
ありません。私も経験者ですので自信があります。
下記のサイトに詳しく説明してあります。
http://www2.atpages.jp/nicl1216/
81デフォルトの名無しさん:2007/08/08(水) 09:28:53
36歳独身男性でも応募できますか?
82デフォルトの名無しさん:2007/08/08(水) 10:33:24
86歳♀ですが応募できますか?
83デフォルトの名無しさん:2007/08/08(水) 10:48:59
21歳独身男性結婚する気なしでも応募できますか?
84デフォルトの名無しさん:2007/08/08(水) 13:25:12
>>81
見た目と声がレディなら、アソコはどうなっていても構いません。

>>82
86歳はルックスの面で少し厳しいと思いますが、
熟女の魅力と魅力的な声があれば大丈夫かと思います。

>>83
年は関係ありませんし、結婚願望はない方が好ましいですね。
ただし、見た目と声は(´∀`*)でないとダメです。
85デフォルトの名無しさん:2007/08/08(水) 13:25:38
3チャイです。キリンさんが好きです、でもゾウさんの方がもぉっと好きで〜す♪
86DEFORTの名無し:2007/08/08(水) 20:27:50
ちょっと質問したいんだがどこかのサイトに無料のCのコンパイラないかな
知っている人がいたら教えて♪
87DEFORTの名無し:2007/08/08(水) 20:30:16
これはスレちがい?
88デフォルトの名無しさん:2007/08/08(水) 20:32:36
MinGWとかVisualC++2005ExpressEditionとか
89デフォルトの名無しさん:2007/08/08(水) 20:49:29
gcc
90デフォルトの名無しさん:2007/08/08(水) 20:51:20
OSくらい書こうや
WindowsXP?
91デフォルトの名無しさん:2007/08/08(水) 21:05:57
>>86-87
あほすぎで笑うとこですよね?
92デフォルトの名無しさん:2007/08/08(水) 21:14:13
DEFORT じゃなくて DEFAULT だよな
93デフォルトの名無しさん:2007/08/08(水) 21:17:27
W
94デフォルトの名無しさん:2007/08/08(水) 23:24:39
いくつかのC言語の初心者向けの書籍をいくつか読んで気になった事があるのですが、
%d や %s などの呼び方が書籍によって「変換指定子」や「変換仕様」と違い、
どんな条件で変わっているのか調べても判らず困っています。
これはどちらか間違っているのでしょうか?
95デフォルトの名無しさん:2007/08/08(水) 23:29:51
「変換指定子」は d とか s とか変換方式を表す文字のみを指す。
「変換仕様」や「変換指定」は % で始まり「変換指定子」で終わる全体を表す。
96デフォルトの名無しさん:2007/08/08(水) 23:34:13
>>94
あなたが間違っています。
97デフォルトの名無しさん:2007/08/08(水) 23:35:23
OS:RHEL4
言語:C
やりたいこと:
#include <openssl/sha.h>
unsigned char *SHA1(const unsigned char *d, unsigned long n, unsigned char *md);

こいつを使いたい。

これって、.soに定義されてないの?/usr/lib/libssl.aにしかない?

EVP_xxxを使うべきなのか。。。
9894:2007/08/08(水) 23:41:28
>>95
ありがとうございます、助かります。
99デフォルトの名無しさん:2007/08/08(水) 23:48:46
100デフォルトの名無しさん:2007/08/08(水) 23:54:48
>>99
情報アリガト。
でも、これってRFCで示されたSHA1の実装例ですよね?
RHEL4の標準ライブラリで実現できないかなーと思っているのです。
opensslコマンドや、sha1sumコマンドで実現できるのは分かっているのですが、
自プロセス内で、標準(?)関数を使ってSHA1のハッシュ値を得たいのです。

ワガママですみません。
10197:2007/08/08(水) 23:57:40
追記。
libssl.aをリンクすれば良いのですが、
libgnutils-openssl.soとかあるので、共有ライブラリで何とかならんのかなーと。
102デフォルトの名無しさん:2007/08/09(木) 00:03:41
わざわざ面倒なことしてライブラリ使わんでも、それコピって使えばいいと思うが・・・
こだわる理由がわからん。
103デフォルトの名無しさん:2007/08/09(木) 00:04:36
ソースがでかくなるのやじゃないですか?
104デフォルトの名無しさん:2007/08/09(木) 00:06:30
105デフォルトの名無しさん:2007/08/09(木) 00:08:29
>>104
C++っすね。。。

ちなみに、偉大なるgoogle先生によると
http://www.google.co.jp/codesearch?q=package%3Asha1&hl=ja

この辺が出てくるのですが。。
106デフォルトの名無しさん:2007/08/09(木) 00:10:05
>>103
1個のファイルに全プログラムを書いてるとか?
107デフォルトの名無しさん:2007/08/09(木) 00:18:55
>>106
いえいえ。
もし既に標準ライブラリとしてRHEL4で提供しているのであれば、それを使った方が良いと思ってるのです。
javaでもメッセージダイジェストのクラスjava.security.MessageDigestがありますし。
できれば標準で提供されているものに乗っかりたいかなと。

Cとjavaではそもそも思想が違うと言われたらそうかも知れませんが。。。
108デフォルトの名無しさん:2007/08/09(木) 00:23:16
変態!変態!変態!!
109デフォルトの名無しさん:2007/08/09(木) 00:30:48
>>108
そう?
110デフォルトの名無しさん:2007/08/09(木) 00:33:06
すみません、どなたか教えて頂けないでしょうか。
C言語で、以下のものを作成したのですが、

int *name[] = {
"satou",
"takahashi",
"suzuki",
};

この時に*name[]に入った配列の数を知るにはどうしたら良いでしょうか。
(上記の場合、自分では「それぞれの文字列の先頭のポインタが3つ入っている」という認識です)
111デフォルトの名無しさん:2007/08/09(木) 00:33:42
sizeof name / sizeof name[0]
112デフォルトの名無しさん:2007/08/09(木) 00:37:03
>>111
配列の数を知る事が出来ました。
ありがとうございます。
113デフォルトの名無しさん:2007/08/09(木) 00:38:10
えっと、なぜint *?
char * name[] = { "hoge", "hogehoge", "hogehogehoge" };
sizeof ( name ) / sizeof ( char * )で3が得られる。
114デフォルトの名無しさん:2007/08/09(木) 00:38:47
int *の配列なのが気になるが・・・
char *じゃ無くて?

[mona@fedora7 tmp]$ cat test.c
#include <stdio.h>
int main(int argc, char **argv){
int *name[] = {
"satou",
"takahashi",
"suzuki",
};

printf("%d\n", sizeof(name) / sizeof(int *));

return 0;
}

[mona@fedora7 tmp]$ gcc test.c
[mona@fedora7 tmp]$ ./a.out
3
115デフォルトの名無しさん:2007/08/09(木) 00:39:46
みんな、簡単な問題だと思って、レスが早いよ!!
116デフォルトの名無しさん:2007/08/09(木) 00:41:55
別スレに来たのかとおもた
117110です:2007/08/09(木) 00:47:09
自分の認識ではname[]へは、
[satouへのポインタ]
[takahashiへのポインタ]
[suzukiへのポインタ]

でしたので、数が増えた場合の事を考えて、
int型で宣言した方が良いと思い、
int型で宣言しました。

この辺りが曖昧でして。申し訳ありません。
118デフォルトの名無しさん:2007/08/09(木) 00:50:06
皆様突っ込みどうぞ
119デフォルトの名無しさん:2007/08/09(木) 00:52:05
>>117
数がいくら増えようが、char *もint *も必要とするメモリは変わりない。
ってか、name[]に256を超えるポインタを格納することを考えてintにしたのか?
だとしたら激しく勘違いしているぞ。
120100です:2007/08/09(木) 00:54:21
すみません、ソース見てみたらchar型で宣言してました。
int型に変更してコンパイルしてみたところ
大量のwarningが出ました。
(エラー内容:warning initialization incompatible pointer type)

お騒がせして申し訳ありません。
121デフォルトの名無しさん:2007/08/09(木) 00:56:05
>>117
ポインタが指し示す値の型がintならint*を使うしcharならchar*を使う
指し示した先の型が表せる値の範囲は違ってもポインタ自体のサイズはint*でもchar*でも同じ
122110です。:2007/08/09(木) 00:58:30
↑すみません>>120 = >>110です。
char型の配列を、
name[] ={...}内に入っている分を確保するという事で良いでしょうか。
123デフォルトの名無しさん:2007/08/09(木) 00:59:34
"satoru"
は、文字列リテラルと呼ばれるものです。環境にもよりますが、
書き込み不可のメモリ領域に確保されます。
で、これはchar型の配列、末尾が'\0'として表現されています。
なので、
char *name[] = {"satoru", "takahashi"."suzuki"};
の意味は、
1.書き込み不可領域に確保されている"satoru"、"takahashi"、"suzuki"の3つの文字列リテラルがある。
2.要素数3、でchar型へのポインタの配列(name)がスタック(?)に確保され、各ポインタは、
  1.の"satoru"、"takahashi"、"suzuki"それぞれの先頭の一文字のアドレスを指すように初期化される

です。

117はCにおける文字列の表現方法について基本が分かっていません。がんばってちょ。
基本を理解するのは意外と難しいです。
124デフォルトの名無しさん:2007/08/09(木) 01:01:07
違う。char *を{...}の中にある要素数だけ配列として確保する。
だから、下の二つはnameで確保するメモリは同じ。
char * name[] = { "a", "b" };
char * name[] = { "aaaaaaaaaa", "bbbbbbbbbb" };
125110です:2007/08/09(木) 01:15:45
皆様へ

丁寧なご説明ありがとうございます。
ずっとこの部分でエラーを吐いていて、
うまく動かず悩んでいたのですが、やっと動きました。
どうしてエラーが出ていたのかも理解できました(と思います…)。

ありがとうございました。
12646:2007/08/09(木) 04:02:22
>>61書き込みを遅くなりまして申し訳ありませんでした。
>>始めに出力した内容がDOS窓を上にスクロールしてもみえません。とか?
そのとおりです。何か対処法がありましたらぜひ教えてくださいよろしくお願いします。
127デフォルトの名無しさん:2007/08/09(木) 04:06:27
どんだけ〜
128デフォルトの名無しさん:2007/08/09(木) 07:55:37
>>126
所謂DOS窓を縦に引き伸ばしてみては如何でしょうか。
或いは、リダイレクトでファイルに落としてエディタで見るとか、
パイプラインでmoreに繋いで見るとか。

って、どう見ても言語ネタじゃないね。
129デフォルトの名無しさん:2007/08/09(木) 11:02:45
>>97
うちのUbuntu系のLinuxには /usr/lib/libssl.so があるんだぜ。
130デフォルトの名無しさん:2007/08/09(木) 11:34:48
>>126
ワロタwwプログラミング以前の問題だなw
131デフォルトの名無しさん:2007/08/09(木) 13:18:07
左上のアイコン右クリック>規定値>レイアウト>画面バッファのサイズ>高さ を増やすとか
132デフォルトの名無しさん:2007/08/09(木) 13:22:16
>>126
出力をテキストファイルにリダイレクトするとか

bcc32 -Etest.txt test.cpp > result.txt
133デフォルトの名無しさん:2007/08/09(木) 16:49:44
ファイル入出力で質問です。
ファイル保存のダイアログを出して、適当なところに保存して
また別にfopen("test.txt", "w");
で保存すると、保存ダイアログが出てたフォルダに保存されてしまうのですが
これを、実行ファイルと同じフォルダに保存するようにしたいんですけど
どうすればいいでしょうか?
134デフォルトの名無しさん:2007/08/09(木) 17:13:51
カレントディレクトリを実行ファイルのあるディレクトリにすればいいんじゃないの?
135デフォルトの名無しさん:2007/08/09(木) 17:20:44
>>133
つまりユーザはダイアログで保存ディレクトリも含めて保存先を指定したのに
それを*無視*して実行ファイルと同じディレクトリに*無理やり*保存したい
ってこと?

ユーザ権限について調べてみるといいと思うよ
Unixは言うに及ばず、WindowsであってもVistaでは厳しくなったようだから
136135:2007/08/09(木) 17:24:09
ああ、
> また別にfopen("test.txt", "w");
> で保存すると、
と書いてあるから、ユーザに指定させたのとは無関係に、プログラムが
勝手にこしらえるファイルの話か?
だったら、自分で実行ファイルのディレクトリを取得して、
フルパスで指定汁。カレントがどこだか分からないのだから。

とは言え、パーミッションには注意。Unixならもともとそういう設計は論外な。
137デフォルトの名無しさん:2007/08/09(木) 17:27:59
>>134
>>135
アドバイスありがとうございます。
ダイアログで保存するものと、fopenで保存するものは別のものなんです。
ただダイアログを出さないで保存したいなと思いまして。

ただ単に、fopenのみのプログラムだと実行ファイルのところに保存できたのですが
ダイアログ→fopen の順序で実行したらダイアログで保存したフォルダに一緒に保存されてしまったんです。

カレントディレクトリを実行ファイルのあるディレクトリにすればいいとは思ったんですけど
やり方がわかりませんでした。
138デフォルトの名無しさん:2007/08/09(木) 17:29:46
GetModuleFileName()でexeのファイル名を取れ
139デフォルトの名無しさん:2007/08/09(木) 17:31:32
>>133
OFN_NOCHANGEDIR
140デフォルトの名無しさん:2007/08/09(木) 17:32:31
int main(int argc, char *argv[])
ってやると、argv[0]に実行ファイル名が入るよ
141デフォルトの名無しさん:2007/08/09(木) 17:37:02
>>140
この場合、そのことに何の意味が?
まさか、argv[0]に必ずフルパスが入っているなんて能天気なことを想像してたりしませんよね?
142デフォルトの名無しさん:2007/08/09(木) 17:44:13
>>141
フルパスが入るようにコマンドラインを入力するんだよ
大丈夫か?
143デフォルトの名無しさん:2007/08/09(木) 17:45:26
>>142
アプリの都合でアプリの存在するディレクトリにこしらえるファイルのために
何でユーザがアプリの起動方法を指図されなければならないのだろうか
144133:2007/08/09(木) 17:48:56
みなさんありがとうございます。

>>139さん
のやり方で解決いたしました。
他にも色々な案を出してもらったので一つ一つ試していきたいと思います。

ありがとうございました!
145デフォルトの名無しさん:2007/08/09(木) 17:49:28
argvやカレントディレクトリに仮定を置くのは糞デザイン
146デフォルトの名無しさん:2007/08/09(木) 17:50:46
>>144
それじゃ、カレントがexeのディレクトリと同じじゃないと
意味無いよ。確実にexeが存在するのと同じ場所にファイルを作りたいなら
フルパス指定するしかない。
147デフォルトの名無しさん:2007/08/09(木) 17:58:50
GetModuleFileName()でフルパスを得て
_splitpath()で分解して
sprintf()で結合とかどう?
148デフォルトの名無しさん:2007/08/09(木) 18:09:56
ダメ
149デフォルトの名無しさん:2007/08/09(木) 18:23:43
exeと同じフォルダに書き込もうとか思っていると、
VistaのUACではまるかも。

そこに至るまでの道のりは長いだろうけどね。
150デフォルトの名無しさん:2007/08/09(木) 18:29:17
何をさも自分が苦労したからって
151デフォルトの名無しさん:2007/08/09(木) 18:38:38
>>150
北極行くのに南極経由するような人なんだから触れてやるな
152デフォルトの名無しさん:2007/08/09(木) 18:56:11
>>150
「さも」の使い方がおかしい
153133:2007/08/09(木) 19:02:17
すいません。だめでしたね。
>>147
の様な処理で分解してstrcatで結合して
それっぽい動きになりました。
154デフォルトの名無しさん:2007/08/09(木) 19:50:02
ファイルダイアログで選択して別ファイルに保存、、、
C#のスレでまったく同じ質問があったな、しかも同じ日
どっかの課題かなにかなのだろうか
155デフォルトの名無しさん:2007/08/09(木) 19:51:14
ただのマルチだろ
156デフォルトの名無しさん:2007/08/09(木) 20:16:59
いや、だって言語違うぜ?
157デフォルトの名無しさん:2007/08/09(木) 20:17:54
右も左も分からないんだろう
158デフォルトの名無しさん:2007/08/09(木) 20:21:21
うーん、向うはC#のソース出してたし
解決の仕方も解決した時刻も違うから
同じ人とは思えないなあ
質問者に種あかししてほしいとこだが
159デフォルトの名無しさん:2007/08/09(木) 20:36:30
ファイルダイアログなんてよくある質問じゃん。
160デフォルトの名無しさん:2007/08/09(木) 20:40:44
全部同じ奴だろ
161デフォルトの名無しさん:2007/08/09(木) 23:17:50
包茎を短時間で修正するプログラムの
開発って難しいですか?
162デフォルトの名無しさん:2007/08/09(木) 23:21:06
包茎と短時間と修正の定義次第
163デフォルトの名無しさん:2007/08/10(金) 01:35:49
いつから配列の定義の要素数に変数が使えるようになったん?
99年から?
void func(int n){
 int array[n];
 :
}
とか。。。
164デフォルトの名無しさん:2007/08/10(金) 01:36:20
C99 から
165デフォルトの名無しさん:2007/08/10(金) 01:37:50
やぱり。即レスども。
個人的にはその仕様はうれしい。
166デフォルトの名無しさん:2007/08/10(金) 01:44:37
167デフォルトの名無しさん:2007/08/10(金) 01:49:43
longjmpするとリークする可能性があるから、気をつけたまへ
168デフォルトの名無しさん:2007/08/10(金) 08:39:01
C99とC/C++は互換性無いから別スレに分けた方がいいと思う。
169デフォルトの名無しさん:2007/08/10(金) 08:51:48
可変引数マクロは非C99処理系にも是非輸入して欲しい
170デフォルトの名無しさん:2007/08/10(金) 09:01:38
素直にC99使えば
171デフォルトの名無しさん:2007/08/10(金) 09:01:53
>>168
C と C++ 用にそれぞれ専用スレがあるだろ。問題があれば誘導すればいい。
172デフォルトの名無しさん:2007/08/10(金) 09:18:08
stringstreamに、ファイル(ifstream)の中身を書くよい方法はありますか?
とりあえず自分が考えた方法だと、
std::ifstream ifs(...);
std::stringstream ss;
while (!ifs.eof())
{
  char buf[1024];
  ifs.read(buf, 1024);
  ss.write(buf, ifs.gcount());
}
こんな感じです。こんなことをする理由は、
ifstreamからstd::getlineをして1行ずつ処理するプログラムなのですが、
stringstreamに全部入れた後、std::getlineをした方が、倍以上高速になることを発見したからです。
それとも、もっと効率の良い方法はありますか?
173デフォルトの名無しさん:2007/08/10(金) 09:25:09
>>172 ss << ifs.rdbuf();
174デフォルトの名無しさん:2007/08/10(金) 10:44:50

ifstream ifs("dir_name");
if ( ifs.fail() ) { return 0; }
if ( ifs.isDirectory() ) { }

みたいに標準ライブラリだけで
ディレクトリか否かを判定することってでけますか?

あと、ディレクトリ内にある全ファイルの名前取得みたいなことは
標準ライブラリだけででけますか?
175デフォルトの名無しさん:2007/08/10(金) 10:50:52
>>172
pubsetbuf()でバッファでかく取っとくと、一般には速くなると期待されるんだが、
gccの少なくとも古いバージョンでは、open済みのstreambufに
pubsetbuf()を実行しても、何食わぬ顔をして元のバッファを使うようだ。

mmap()したポインタをstrstreamにそのまま突っ込むのが多分一番速いが、
移植性に欠ける上にstrstreamがdeprecatedなのがネックだな。
stringstreamのstrメンバを使うとせっかくmmap()したものを
わざわざコピーしてしまうし、
stringstreamのpubsetbuf()も有効とは限らないようだ。
(少なくともVC++では平然とシカトされる)

>>173
それ記述が簡単でいいんだが、少なくとも
VC++のostream実装とかだと、大して速く無さそうなんだよな。
sgetc()/snextc()と、sputc()使って1文字ずつコピーしてるし
微妙に無駄の多いコードになってるんで、
下手すりゃ手書き1文字コピー回したしたほうがまだ速いかもしれん。
176デフォルトの名無しさん:2007/08/10(金) 10:52:02
>>174
どっちもだめ
ディレクトリのないファイルシステムもあるんで、CやC++の標準は
ディレクトリがらみを一切扱っていないはず
177デフォルトの名無しさん:2007/08/10(金) 10:57:35
>>168
C99はCであって、
互換性がないのはCとC++
>>176
そこでboostですよ。
179デフォルトの名無しさん:2007/08/10(金) 11:12:01
>>178
無論そんなことは知っているが、>>174は「標準ライブラリだけ」と
2度も強調しているんだし、非標準の方法があることぐらいは知ってて
聞いてるんだろ
180175:2007/08/10(金) 11:23:23
ごめんあほなこと書いた
> stringstreamのpubsetbuf()も有効とは限らない
そもそもpubsetbuf()を入力を食わせるのに使えるはずがないな
181デフォルトの名無しさん:2007/08/10(金) 11:26:26
>>179
>178の名前欄。

つーか、>176はなんで「扱っていないはず」なんて曖昧なままにしておくのだろう。
調べれば直ぐに答が出ることなのに。
182デフォルトの名無しさん:2007/08/10(金) 11:28:03
>>181
すまん、扱っていないことは知っている
理由のほうが推測だ
183デフォルトの名無しさん:2007/08/10(金) 11:35:59
>>182
なるほど、それは失敬。そしてその推測は妥当だろう。
実際、CP/Mやtronにはディレクトリがない。
184デフォルトの名無しさん:2007/08/10(金) 11:42:45
まぁ一方ではsignal()なんかが標準だし
わけわからんところもあるよな
185デフォルトの名無しさん:2007/08/10(金) 11:50:07
大丈夫、signal()は内容が規定されていないから存在しない環境では何もしなければいいから。
186174:2007/08/10(金) 11:53:44
>>176
レスありがとです。
標準ライブラリにディレクトリ絡みがまったくないのでおかしいなぁ
とは思ってたんですが、そんな理由があったとは。。
ソースを他環境に持ってたとき、すぐコンパイルできないとイヤだなと思って
できるだけ標準でやる方法を探してたんですが、
>>178さんの仰るとおり、こりゃおとなしくboost使っといたほうがいいですね。
187デフォルトの名無しさん:2007/08/10(金) 12:06:28
なんだboost厨の自演か
188デフォルトの名無しさん:2007/08/10(金) 12:09:27
やっぱりブーストがいちばんですね^^
189デフォルトの名無しさん:2007/08/10(金) 12:31:53
char *p = "hogehoge";
の時
*(p++)
がさす値はoですか?
190デフォルトの名無しさん:2007/08/10(金) 12:34:48
いいえ

*(p++) の値は 'h' になります
191デフォルトの名無しさん:2007/08/10(金) 12:37:41
いいえ

*(p++) の値は 'g' にもなります
192デフォルトの名無しさん:2007/08/10(金) 12:37:42
はい、トムはペンです
193デフォルトの名無しさん:2007/08/10(金) 12:38:25
出力してみりゃ分かることだろうに。
2ch に書き込むより早く分かる。
194デフォルトの名無しさん:2007/08/10(金) 12:44:01
*(++p) オヌヌメ
195デフォルトの名無しさん:2007/08/10(金) 12:52:10
*next(p)
^^;;
196デフォルトの名無しさん:2007/08/10(金) 12:53:03
>>189
p が指す値と
式 *(p++) の値を混同してないか?
197デフォルトの名無しさん:2007/08/10(金) 12:53:46
有り難うございます。
ちなみに
*pには何が代入されているんですか?
198デフォルトの名無しさん:2007/08/10(金) 13:01:58
*pには何も代入されていないと思いますが。
199デフォルトの名無しさん:2007/08/10(金) 13:02:37
夏・・・
200デフォルトの名無しさん:2007/08/10(金) 13:09:34
最近は季節に関係なく年中馬鹿が湧く、と考えていたけど、
やっぱり長期休暇は頻度もスケールも一回り違うかな。
201デフォルトの名無しさん:2007/08/10(金) 13:36:08
出力してみりゃわかることをうだうだと質問してからに・・・
202デフォルトの名無しさん:2007/08/10(金) 15:01:04
ちょっとしつもんします
ギャルゲーとかで「フラグをたてる」ていうんですが
フラグというのはビットなんですか?
203デフォルトの名無しさん:2007/08/10(金) 15:03:07
ビットなフラグはビットフラグ
ビットじゃないフラグも当然ある
204デフォルトの名無しさん:2007/08/10(金) 15:07:07
「立てる」っていう表現をするようなフラグなら、
「立てる」か「倒す」かだからビットだろうなぁという気はする。
205デフォルトの名無しさん:2007/08/10(金) 15:10:54
死亡フラグは立てるのに倒れてしまう件
206デフォルトの名無しさん:2007/08/10(金) 15:22:38
私生活では全くフラグが立たない件について
207デフォルトの名無しさん:2007/08/10(金) 15:26:46
>>204
boolは大抵intかcharで実装されている罠。
208デフォルトの名無しさん:2007/08/10(金) 15:27:55
>>206
立ち過ぎてて困るから
1ビット分けてあげるぞ
209デフォルトの名無しさん:2007/08/10(金) 19:04:06
cygwinまたはlinuxの環境下でコンパイラに追加依存ファイルの検索パスを与えようとしています
仮に追加依存ファイルのパスを~/xxx/includeとすれば
.bash_profileではexport CDPATH="$CDPATH":"~/xxx/include/"のようにして環境変数を設定し
シェル上でcd includeと打てばカレントパスが意図通りに変化するところまでは設定しています

ここから、このパス下にあるtest.hppを#include <test.hpp>のように指定しているファイル
~/main.cppを
コンパイルする目的で~/下でg++ main -I includeと打ったのですが
コンパイラからはtest.hppが見付からないというエラーが返ってきます

正しくはどのように指定するべきなのでしょうか?
210デフォルトの名無しさん:2007/08/10(金) 19:13:01
CDPATH はその名前の通り cd コマンドにしか効かないんじゃない?
-I~/xxx/include
ってやれば?
211デフォルトの名無しさん:2007/08/10(金) 19:15:55
CDPATHはcdに関係するだけでコンパイラには関係ないんじゃないか?
何がしたいのか良く分からないけど、普通に-I~/xxx/include/とか書くとか

ていうか、そもそも-Iの後ろにスペースあるのはOKだっけ?
212デフォルトの名無しさん:2007/08/10(金) 19:39:34
なるほどフルパスで指定しないと駄目なんですね、あと' 'が入ってても駄目と
それら二点に気を付けて打てば通りました
助言ありがとうございました
213デフォルトの名無しさん:2007/08/10(金) 19:45:54
>>212
相対パスでもいけるけど、「ソースがある場所からの」相対パスであることに注意
214213:2007/08/10(金) 19:47:00
あ、-Iオプションで指定する場合はそうじゃないか?
すまん、俺自身あやふやになってきた。忘れてくれ
215デフォルトの名無しさん:2007/08/10(金) 19:53:16
-Iオプションは相対パスでもいけるハズ。
たぶんコンパイラ実行時の作業ディレクトリかなんかからの相対パスになると思うけど・・・。
いつもmakefileコピペ改変でやっちまうから、俺も記憶があやふやだ・・・
216デフォルトの名無しさん:2007/08/10(金) 20:29:01
相対パスでOK。
Makefileに-Ipathと書いておいて、ln -s どっかの/pathとかよくやる。
217デフォルトの名無しさん:2007/08/10(金) 22:46:58
クラスの実際の型に応じた処理を簡単に書く方法はありますか?

例えば、基本クラス Hoge を継承するクラス Foo と Bar があるとして、
void func(const Hoge &hoge)
{
  // hoge が Foo の時の処理
  // hoge が Bar の時の処理
}
というのを簡潔に書きたいのですが。普通にdynamic_castを使って(ダウンキャストの例外呼ばれたくないのでポインタで)
{
  if ((const Foo *p = dynamic_cast<const Foo *>(&hoge)) != NULL)
    ...;
  else if ((const Bar *p = dynamic_cast<const Bar *>(&hoge)) != NULL)
    ...;
}
とやる方法と、try...catchの変な使い方で
{
  try {
    throw hoge;
  } catch (const Foo &foo) {
    ...;
  } catch (const Bar &bar) {
    ...;
  }
}
っていうのも思いついたんですが、こんな書き方はしないですよね。実際はどういう書き方が普通でしょうか。
instanceofとかisとかC++にはないようなので。
218デフォルトの名無しさん:2007/08/10(金) 22:50:17
そのクラスに virtual 関数を作ればいいんじゃないの?
instanceof は dynamic_cast
いちおう typeid もあるけど
219デフォルトの名無しさん:2007/08/10(金) 22:52:33
>>217
funcをHogeの仮想関数にする(必要に応じて純粋仮想関数にする)。
そして、FooとBarがそれぞれオーバーライドする。

instanceofとかisとかがある言語でも、
そんな書き方よりこういう仮想関数でやる方法が普通だぞ。
220デフォルトの名無しさん:2007/08/10(金) 23:00:22
>>217
void func(const Foo& foo);
void func(const Bar& bar);
...
221デフォルトの名無しさん:2007/08/11(土) 00:26:58
Lisp じゃないから。
222デフォルトの名無しさん:2007/08/11(土) 10:54:08
>>217
基底クラスが派生クラスの面倒までみるべきではないよ
223デフォルトの名無しさん:2007/08/11(土) 13:04:07
>>222
funcはHogeのメンバ関数じゃ無い、とかそんな状況な気もする
224デフォルトの名無しさん:2007/08/11(土) 13:54:38
func から Hoge の仮想関数呼べばいいだけだよ
225デフォルトの名無しさん:2007/08/11(土) 16:49:10
あぁ、いや。
単に基底クラスに面倒見さそうとしてるわけじゃないんじゃない?というだけの話で。
226デフォルトの名無しさん:2007/08/11(土) 18:31:47
その、try...catchの変な使い方、だが、結局投げてるのはHoge型だから
本当のクラスでは捕まえられない。

#include <stdio.h>
struct B{virtual ~B(){}};
struct D1:B{};
struct D2:B{};

int main(){
B *b = new D1;
try{ throw *b; }
catch( D1 &){ puts("D1"); }
catch( D2 &){ puts("D2"); }
catch( B & ){ puts("B"); }
}
227デフォルトの名無しさん:2007/08/11(土) 20:52:01
ダブルディスパッチ使えばいいじゃん。
228デフォルトの名無しさん:2007/08/12(日) 06:43:01
それなにぬねの
229デフォルトの名無しさん:2007/08/12(日) 07:11:10
#include <stdio.h>

struct B { virtual ~B(){} virtual void Throw() { throw this; } };
struct D1 : public B { virtual void Throw() { throw *this; } };
struct D2 : public B { virtual void Throw() { throw *this; } };

int main(){
B *b = new D1;
try{ b->Throw(); }
catch( D1 &){ puts("D1"); }
catch( D2 &){ puts("D2"); }
catch( B & ){ puts("B"); }
}
230デフォルトの名無しさん:2007/08/12(日) 08:44:07
#include <stdio.h>

struct B { virtual ~B(){} virtual void Func() { puts("B"); } };
struct D1 : public B { virtual void Func() { puts("D1"); } };
struct D2 : public B { virtual void Func() { puts("D2"); } };

ダントツでこれが一番いいんだけどなぁ
231デフォルトの名無しさん:2007/08/12(日) 08:45:40
そりゃそうだ。
232デフォルトの名無しさん:2007/08/13(月) 09:30:33
基本に戻るような質問

VC8Express (cl v14.00.50727.762 for 80x86)で、

void main(void){main();}

を、

cl /MD stackov.cpp

でコンパイルして実行しても、黙って落ちるだけで、_invoke_watsonされない
そういう例外って、なにかしらダイアログ出して落ちるものとばかり思っていたのに

昔からこんなでしたっけ、これってこういうもん?
233デフォルトの名無しさん:2007/08/13(月) 10:19:39
スタックオーバーフローで落ちるだけじゃないの?
234デフォルトの名無しさん:2007/08/13(月) 11:51:22
うん。まさに、スタックオーバーフローで落ち…
…たときに、アプリケーションエラーって出ないのが

デバッガから起動すれば、ちゃんと
Stack overflow - code c00000fd (first chance)
って捕捉されるんだけど…。
235デフォルトの名無しさん:2007/08/13(月) 12:08:26
コンソールアプリだからじゃないのかな。
236デフォルトの名無しさん:2007/08/13(月) 12:10:47
int ch = ' '
if (!isspace(ch) && !iscntrl(ch))
break;
という文なのですが、
何故かbreakされてしまいます。
chがスペースでないときかつchが制御文字でないとき
にbreakされるはずなのですが、条件式間違っているでしょうか?
237デフォルトの名無しさん:2007/08/13(月) 12:14:01
gcc gdbではSIGSEGVでstack over flowにならんのだけど
検出する方法は別にあるんだろうな、あるんだろうね
238デフォルトの名無しさん:2007/08/13(月) 12:26:17
>>236
動かない断片を提示されてもなんとも言えませんが。
症状を再現できる最低限のロジックを提示してみてください。
239デフォルトの名無しさん:2007/08/13(月) 12:33:45
iscntrl()はロケールに依存するとされるし、
chか、iscntrl()の挙動が直感に反しているのでは

printf("%x: %d, %d\n",ch,isspace(ch),iscntrl(ch));

をifの前に置いてみては。
240デフォルトの名無しさん:2007/08/13(月) 12:41:07
>>232
気になって試した

どうもスタックのサイズによるみたい
void main(void){
char cc[4096];
main();
}
とすればダイアログはでる。
(アセンブラ見ると、__chkstk の呼び出しが追加されてる)

ただし、VCのオプション的にはスタックサイズが4Kより小さいときでも、
/Gs0 とか付ければいけそうに思えるし、実際アセンブラリストに
__chkstk の名前でてるんだけどダイアログはでない。謎。
241デフォルトの名無しさん:2007/08/13(月) 12:44:01
>>238,239
失礼です。
IDEでソースコードを読んでるんですが、動きが気になったので
static int
skip_space(void)
{
int ch ;

for (;;){
if ((ch = getc(stdin)) < 0)
return -1; /* end-of-file */
if (!isspace(ch) && !iscntrl(ch))
break;
}
return ch;
}

chに'¥t'や' 'を代入して/*if ((ch = getc(stdin)) < 0) return -1; */
として、ステップオーバーしていったのですが、
> if (!isspace(ch) && !iscntrl(ch))
の段階で止まってしまって、ブレイクしたのかなと思って。
242デフォルトの名無しさん:2007/08/13(月) 12:50:44
誰か、エスパー頼む
243デフォルトの名無しさん:2007/08/13(月) 13:42:25
>>241
関数名から推測して

static int skip_space(void)

を呼び出す上位関数に問題があるんじゃないか?例えば

int main(void) {
int ch;
for(;;) {
if(-1 == (ch = skip_space())) break;
putc(ch,stdout);
}
return 0;
}

とか。
244デフォルトの名無しさん:2007/08/13(月) 14:16:01
ははぁ、成る程!
ちなみに (!isspace(ch) && !iscntrl(ch))
な文字コードってどんなのが当てはまりますかね?
245デフォルトの名無しさん:2007/08/13(月) 14:38:10
>>244
空白文字でも制御文字でもない文字。
まぁ、大抵の可読文字が該当する罠。
246デフォルトの名無しさん:2007/08/13(月) 16:49:05
すいませんわかりました。
自分馬鹿だorz
ほんと皆さん電波な質問して申し訳有りません
二徹して疲れたので寝ます
247デフォルトの名無しさん:2007/08/13(月) 18:57:05
eclipse with CDTが生成したmakefile用の依存リストで
src/test.d src/test.o: ../src/test.cpp \
H:/root/usr/src/boost/boost/shared_ptr.hpp \
H:/root/usr/src/boost/boost/config.hpp \


248247:2007/08/13(月) 19:03:44
(ミスして送信しちまったorz 続き)

の最初の行で
multiple target pattern stop
とmakeがエラーになるんですが、
これはどうすれば解決するんでしょうか?

test.dと.oのルールを同じ行で定義しているのが問題かと思ってわけてみたり
test.d(つまり自分自身)のルールを定義しているのが問題かた思ってtest.dを消してみましたが
解決しませんでした
249デフォルトの名無しさん:2007/08/13(月) 19:48:51
インクルードパスにドライブ名が入ってるとだめらしい
C: とか H: とか
代わりに /cygdrive/c/ や /cygdrive/h/ を使うと大丈夫とかいうことらしい
250247:2007/08/13(月) 20:15:55
>>249
そのようにしたらmakeのエラーは消えdebugができるようになりました
しかし今度は
Invalid project path: Include path not found (\cygdrive\\root\usr\src\boost)
のような警告がでてきましが、これなら実害ないので我慢します
助言ありがとうございました
251デフォルトの名無しさん:2007/08/14(火) 06:40:57
char *parse( char *buff )
{
int c;
int at = 0;
while( (c = getchar()) != EOF ) {
if( isdigit( c ) ) {
buff[at++] = c;
} else if( isspace( c ) ) {
if( at == 0 ) {
continue;
} else {
buff[at] = '¥0';
return buff;
}
}
}
int main( void )
{
char buff[256];
int i;
for(i=0;i<256;i++)
buff[i] = 0;
char *s;
while( (s = parse( buff )) != NULL ) {
printf( "read %s¥n", s );
}
}
というプログラムなのですが、
これって¥0とNULLが同じってことですよね。
buffはただのchar型の配列のはずなのになぜ¥0がNULLになるんでしょうか?
char *buff[256]ならNULLで判定出来るのは理解出来るのですが。
252デフォルトの名無しさん:2007/08/14(火) 07:26:45
NULLはヌルポインタ、\0はヌル文字
当然、ヌル終端文字列は後者を末尾に持つ
253デフォルトの名無しさん:2007/08/14(火) 07:27:29
parse内のgetcharがEOFだった時、何を返すんだ?
思いっきりバグ、もしくはコピペミスだろ。
254デフォルトの名無しさん:2007/08/14(火) 07:27:44
どこの\0とどこのNULLだ?
12行目の'\0'と24行目のNULLなら別物だし、
比較も代入もしていないが
255デフォルトの名無しさん:2007/08/14(火) 07:37:24
parseからNULL返って来ないな
256デフォルトの名無しさん:2007/08/14(火) 07:40:16
お前ら朝から優しいな
257デフォルトの名無しさん:2007/08/14(火) 07:41:58
あーそうか、parseが切れてるのか。
{}が対応してないな。
258デフォルトの名無しさん:2007/08/14(火) 07:54:20
朝から結構人がいてワロタw
259デフォルトの名無しさん:2007/08/14(火) 08:15:31
こんな感じで隠れてる

    (⌒─-⌒) EXILE!EXILE!
  〃((´・ω・`)) ミ ○
((´・ω・`))  O((´・ω・`))   
Oヽ(    )〃ノO      
   ∪⌒∪          
""" "" " """ "" " """ "" " ""
260デフォルトの名無しさん:2007/08/14(火) 09:55:22
亀ですが

>>240 ありです、それかもな感じ 何かがひらめいた予感 ちょっと調べてみます
>>235 ちなみに、WinMainでやってみても、なんもいわれんかったのです;
261デフォルトの名無しさん:2007/08/14(火) 12:54:16
>>251
コンパイルできるソースをもってきてください。

それから処理系によって'\0'とNULLは同じじゃない。

#define NULL ((void *)0)
と定義してあったら違う型。
#define NULL 0
と定義してあったら同じ型として扱える。

'\0'は、int型の整数だから後者の処理系なら比較できてしまう。
     ~~~~~
しかし、もともとNULLはヌルポインタ(どこも指していないポインタ)を意味しているので
'\0'(整数)とNULL(ポインタ)の比較をしているソースは窓から放り投げろ。

推測だが、char *parse(char *buff)
の最後の方は、こんなふうになってるんだろう。
buff[at] = '\0';
return buff;
}
}
}
return NULL;
}

それから、buff[256]はスタックオーバーしていて不定な値だ。
*buff[256]なんてどこを指しているかわかりゃしない。NULLじゃない。
このプログラムは、文字数を判定していないから、'\0'を入れて256文字以上になると
スタックオーバーで動作は不定になる。うまく動いてもそれは運がいいだけ。
262251:2007/08/14(火) 13:07:51
どうやってソースを窓から放り投げるんだ・・・?
263デフォルトの名無しさん:2007/08/14(火) 13:12:15
ソースを窓から放り投げるを開始するには、まず窓を開けます。
264デフォルトの名無しさん:2007/08/14(火) 13:12:43
バッファオーバーフローであってスタックオーバーフローとは(ry
265デフォルトの名無しさん:2007/08/14(火) 13:21:55
なぜこれがコンパイルエラーになるのですか?

class A
{
public:
void hoge(int i) { MessageBox(NULL, _T("A"), _T("hoge(int)"), 0);}
virtual void hoge() = 0;
};
class B : public A
{
public:
void hoge() { MessageBox(NULL, _T("B"), _T("hoge()"), 0); }
};
int _tmain(int argc, TCHAR **argv)
{
B b;
b.hoge(1); // コンパイルエラー C2660
}
266デフォルトの名無しさん:2007/08/14(火) 13:24:09
なんでそんなこともわからないのですか?
267デフォルトの名無しさん:2007/08/14(火) 13:29:50
>>266
まぁそう言わんと。

>>265
EffectiveC++を読むことをお勧めしておきます。
268デフォルトの名無しさん:2007/08/14(火) 13:47:53
>>266
初心者だからです。例えば、以下のJavaのソースはコンパイルが通るので、C++でも同様のことが可能かを考えています。
public class Test1 {
public static void main(String[] args) {
B b = new B();
b.hoge(1);
}
}
abstract class A {
public void hoge(int i) {System.out.println("A : hoge(int)");}
public abstract void hoge();
}
class B extends A {
public void hoge() {System.out.println("B : hoge()");}
}
>>267
このあたりですか?
ttp://www002.upp.so-net.ne.jp/ys_oota/effec/chapter6.htm#36kou
265のclass Aのhoge(int)はhogeImplのようにするこで解決できました。ありがとうございます。
269デフォルトの名無しさん:2007/08/14(火) 14:09:57
>>265,268
hoge という名前の関数は B に 1 個あるので、それ以上辿って A まで探しには行かない
で、見つかった hoge() は引数が一致しないのでエラー

C++ と Java が一緒だと思ってるのが間違い
270デフォルトの名無しさん:2007/08/14(火) 14:12:39
>>269
>hoge という名前の関数は B に 1 個あるので、それ以上辿って A まで探しには行かない
なるほど。すっきりしました。ありがとうございます。
271デフォルトの名無しさん:2007/08/14(火) 16:26:39
wavファイルの再生について質問があります。
PlaySoundを使う方法は簡単にできたのですが、wavファイルを実行ファイルに組み込むことはできるのでしょうか?
できるなら、方法や資料を教えて頂けませんか?
宜しくお願いします。
272デフォルトの名無しさん:2007/08/14(火) 16:44:38
とりあえずC/C++とは関係ない
273デフォルトの名無しさん:2007/08/14(火) 16:46:19
実行ファイルの種類による
274デフォルトの名無しさん:2007/08/14(火) 16:47:42
PlaySound リソース でぐぐれば?
275271:2007/08/14(火) 17:15:30
PlaySoundでできるとは思っていませんでした。
本当に助かりました。ありがとうございます。
276デフォルトの名無しさん:2007/08/14(火) 19:59:40
関数テンプレートの特殊化ってできないんですか?
もしできないのなら、いずれ出来るようになる見込はありますか?

template <typename T, typename U> void func(T&) {}
template <typename T> void func<T,int>(T& u) {}

error : partial specialization `Func<T, int>' of function template
277デフォルトの名無しさん:2007/08/14(火) 20:24:53
>>268
そんなサイトあったのか、本買っちゃったよ
278デフォルトの名無しさん:2007/08/14(火) 20:34:59
>>276
テンプレートパラメータの制限は関数とクラスで微妙に違う。
ただ、パラメータを常に指定するなら↓で同じことができるはず。

template <typename T, typename U> class func_object {
 explicit func_object(T&) { ... }
};:
template <typename T> class func<T, int> {
 explicit func_object(T& u) { ... }
};

使い方
func_object<A,B>(x);
func_object<C,int>(y);
279デフォルトの名無しさん:2007/08/14(火) 20:44:54
>>277
そのサイトはヒント程度だぞ。何やら勘違いに近い記述も見られるし、本は読むべき。
280デフォルトの名無しさん:2007/08/14(火) 20:56:11
>>276
関数テンプレートの場合、完全な特殊化はできるが部分特殊化は出来ない。
代わりに関数オーバーロードが使える。
281276:2007/08/14(火) 21:48:52
やっぱ無理なんすか
テンプレート引数を汎用関数のtraitsとして利用したかったのですが…
変数の型を態々書くくらいなら関数オブジェクトとして作る方が良さそうですね
282261:2007/08/14(火) 23:00:51
>>264
え?スタックオーバーフローなんて一言も言ってませんがなにか?
              ~~~~~~
283デフォルトの名無しさん:2007/08/15(水) 03:27:58
>>282
コレは他人が装ってる釣りか?
ちょっと釣られて見ますよ
284デフォルトの名無しさん:2007/08/15(水) 04:00:47
演算子の優先順位についての注意。インクリメント(++)/デクリメント(-- --)演算子と間接参照演算子(*) の優先順位は、間接参照の方が低い。だから、
while(1){
sub( *++p );
}
というコードは頻出するが、単独の文
*++p;
は間接参照の文が無意味である。(ポインタpをインクリメントした後で、ポインタが示す値を参照し、値を捨てる)
って言う文があるのですが、
「単独の文
*++p;
は間接参照の文が無意味である。」
ってどう意味なのでしょうか?
実例を挙げていただけないでしょうか。
285デフォルトの名無しさん:2007/08/15(水) 04:12:51
>>284
間接参照演算子「*」
間接参照はポインタの先を「*」で参照すること。

int main(){
int a=10;
int *p=&a;
*p; /* <- この文意味ないべ? */
return 0;
}
286デフォルトの名無しさん:2007/08/15(水) 05:07:32
ああ、そういう意味だったんですか。
分かりました。
自分、日本語読む力が無いなぁ。
287デフォルトの名無しさん:2007/08/15(水) 05:31:19
>>284
これおかしいな。
ここで例としてあげるべきなのは *p++ であって *++p ではない。
そもそも * と 前置 ++/-- とは優先順位が同じだ。
288デフォルトの名無しさん:2007/08/15(水) 07:12:56
>>284
内容がひどいのでさらしておこう。
http://www.nurs.or.jp/~sug/soft/tora/tora6.htm
289デフォルトの名無しさん:2007/08/15(水) 08:09:10
>sub( *++p );
>というコードは頻出するが
こらこら、副作用があるコードを関数呼び出しで書いちゃ遺憾。
もしこのサイトにあるように頻出するとしたら、よっぽど腐った環境だ。

つーか、このサイト管理者、頭大丈夫か?
http://www.nurs.or.jp/~sug/soft/index.htm
290デフォルトの名無しさん:2007/08/15(水) 08:21:09
別に書いていいだろう。
未定義動作でもあるまいし。

コーディングスタイルの話としても、
宗教戦争になる程度のこうじゃないといけないとは言えない内容だな。
291デフォルトの名無しさん:2007/08/15(水) 08:29:14
>>290
その「sub()がマクロだったら」と考えてみてくれ。
いつ仕様変更でそのようなことになっても大丈夫なように副作用を発生させないのは常識だ。
292デフォルトの名無しさん:2007/08/15(水) 08:35:04
それだったら*++pではない場合にもいえてしまうんじゃないの?
マクロってなんなのかしらないけど
293デフォルトの名無しさん:2007/08/15(水) 08:43:51
なんだ、ただのもの知らずか。たとえばこんなの。
#define sub(x) (x < 0 ? -x : x)
294デフォルトの名無しさん:2007/08/15(水) 08:44:08
>>289
>こらこら、副作用があるコードを関数呼び出しで書いちゃ遺憾。
どいう意味?
295デフォルトの名無しさん:2007/08/15(水) 08:56:22
>>293
なるほど、マクロって絶対値ってことか
296デフォルトの名無しさん:2007/08/15(水) 08:58:23
そうだよ。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
297デフォルトの名無しさん:2007/08/15(水) 09:11:47
>>296
いや、違うでしょ?
298デフォルトの名無しさん:2007/08/15(水) 09:12:45
>>297
そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
299デフォルトの名無しさん:2007/08/15(水) 09:14:25
初心者歓迎とかスレタイにあるのに何やってるの
300デフォルトの名無しさん:2007/08/15(水) 09:21:19
>>299
そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
301デフォルトの名無しさん:2007/08/15(水) 09:27:40
恥ずかしいからってそんな連投しなくてもいいのに
302デフォルトの名無しさん:2007/08/15(水) 09:30:09
あんああんあんああんあん
303デフォルトの名無しさん:2007/08/15(水) 09:30:30
>>301
そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
304292:2007/08/15(水) 09:35:28
>>300,>>303
あなたの相手は僕でしょ?
305デフォルトの名無しさん:2007/08/15(水) 09:36:37
>>304
そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
306292:2007/08/15(水) 09:38:05
マクロも知らなかった初心者に指摘されたのが悔しかったの?
プライドを傷つけてごめんね
307デフォルトの名無しさん:2007/08/15(水) 09:42:16
マクロも知らない初心者の来る所じゃないんだ。
どれだけそいつに時間とレスを割く必要があるか分かるだろう?
そんなレベルの低い奴が来ると釣りかと思う。
308292:2007/08/15(水) 09:45:23
>>307
マクロ知らないとは書き添えたけど質問したわけではありません
あなたの勇み足では?
309デフォルトの名無しさん:2007/08/15(水) 09:49:39
>>306の言ってる指摘ってひょっとするとコレ?
>それだったら*++pではない場合にもいえてしまうんじゃないの?
いくらなんでもマジとは思えん(だから>>293もスルーしたんだろう)。
310デフォルトの名無しさん:2007/08/15(水) 09:50:25
>>308
みんな馬鹿で、お前だけが正しいことを言ってる。
誰もお前の頭の良さについていけなくて、悔しさのあまり暴れてるだけなんだよ。

だからママの所に行っておいで。
311デフォルトの名無しさん:2007/08/15(水) 09:52:13
>>307
>どれだけそいつに時間とレスを割く必要があるか分かるだろう?
って
>そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
の事かwアホじゃね?
312デフォルトの名無しさん:2007/08/15(水) 09:53:52
>>311
日本語でおk
313デフォルトの名無しさん:2007/08/15(水) 09:53:59
>>311アホですね
314292:2007/08/15(水) 09:55:13
>>309
>>293のこれだけのレスをみれば、意図的にスルーしているとはとても…
315デフォルトの名無しさん:2007/08/15(水) 09:55:59
>>314
その辺が低脳。全て293のレスだと思ってやがる。
316デフォルトの名無しさん:2007/08/15(水) 09:57:26
>>315
見苦しい言い訳
317デフォルトの名無しさん:2007/08/15(水) 09:57:57
>>315
あああなたでしたかごめんなさいね
318307:2007/08/15(水) 09:58:34
どうせ俺の事も>>293だと思って勇み足で回答したとでも言いたいんだろう?
マクロも知らない初心者の来る所じゃないんだと思っている奴が、
わざわざマクロも知らない初心者に答えるわけがないだろう。
319292:2007/08/15(水) 09:58:49
>>317は僕です
しっかり名乗ります!
320292:2007/08/15(水) 10:00:03
>>318
マクロくらいわかるよw
フィーリングでね
321デフォルトの名無しさん:2007/08/15(水) 10:00:14
どう見ても292の方が見苦しい言い訳。
バカなんだからバカにされたくらいでレス繰り返さなくてもいいのに
322デフォルトの名無しさん:2007/08/15(水) 10:01:24
>>320
フィーリングで分かるなら空気くらい読めるだろ?
323デフォルトの名無しさん:2007/08/15(水) 10:02:59
>>295はうまい荒らしだったな
324292:2007/08/15(水) 10:03:36
あ、ずっと安価間違ってた
>>291さんでした
325デフォルトの名無しさん:2007/08/15(水) 10:03:55
>>318
初心者に答えるわけがない なんてレスの無駄だから偉そうに宣言しなくてもいいよw
答えないんじゃなくて答えられないんだろ
326309:2007/08/15(水) 10:16:16
結局>>306の言ってる指摘ってのはコレな訳?
>それだったら*++pではない場合にもいえてしまうんじゃないの?
327デフォルトの名無しさん:2007/08/15(水) 10:18:32
>>326
かもしれないけど、なにしろ何がどう「いえてしまう」のか
まるでわからん文章だからなぁ。
328309:2007/08/15(水) 10:19:46
>>326
意味わからんよなー
329309:2007/08/15(水) 10:23:07
>>326
多分、>>289から続く
>副作用があるコードを関数呼び出しで書いちゃ遺憾。
について言ってるんだと思う。
330329=309:2007/08/15(水) 10:25:08
アンカーミス。>>327ね。

後、>>328誰だw
331デフォルトの名無しさん:2007/08/15(水) 10:26:15
マクロに放り込むんだり引数の評価順に左右されるような場合はマズいけど
別にこのケースは何の問題も無いわな

スタイルとして自分がそう心がけているというだけの話なら
ご立派ですねで終わりだが

実にどうでもいい
332292:2007/08/15(水) 10:26:21
適切な日本語ではなかったけど、脳の衰え始めている先輩方には難しかったかな?
むしろ適切であったとしてもまともにこたえる気はなさそうにおもえる
333デフォルトの名無しさん:2007/08/15(水) 10:27:23
2chで煽るのだけが生き甲斐の厨房に
煽り返す厨房か
334309:2007/08/15(水) 10:44:58
>>331
今は問題無いからいいって考えはどうかと思うぞ。後々の仕様変更に耐えられるコードを書く方がいい。
もっとも今回は副作用で問題が出るマクロにするのが一番悪いが。

>>332
>まともにこたえる気はなさそうにおもえる
何でそう思ったか知らんが結局質問は「副作用があるコードを関数呼び出しで書いちゃ遺憾って言ってるけど、それって*++pではない場合にもいえなくない?」って事か?
335デフォルトの名無しさん:2007/08/15(水) 10:49:04
>>331
話題がループするが、sub()がマクロなら問題だからするべきではないという話だろ。
件のサイトではsub()が何か提示されていないのだから、問題がないとは言えない。
336292:2007/08/15(水) 10:54:44
皆さんの話がかみ合ってないかもしれないので整理しましょう

*++pってなんですか?
337デフォルトの名無しさん:2007/08/15(水) 11:00:13
>>335
マクロにsub()なんて名前をつけてるのならそっちのが問題じゃね
マクロは大文字で目立たせるのが基本だし
subはサブルーチンのサブだろう

ま、標準ライブラリの一部の関数はマクロで実装することも許されているけどな
338デフォルトの名無しさん:2007/08/15(水) 11:13:27
>>336
死ね
339デフォルトの名無しさん:2007/08/15(水) 11:32:32
すみません、教えてください。

C++でコンテナからイテレータを取り出すときに、iterator とconst_iterator とを
区別するのはどうやっているんでしょうか?

std::vector<>::iterator begin();

std::vector<>::const_iterator begin() cons;

のように、同じ関数でiterator を返したりconst_iterator を返したりしたいんですが、上手くいかない……
340339:2007/08/15(水) 11:40:56
ごめん、忘れてください。超間抜けなこと聞いた。

暑くて頭がボケてたみたい……
341デフォルトの名無しさん:2007/08/15(水) 11:42:17
while(1) sub( *++p );

で意味をなす単項subってどんなマクロ(関数)なんだろ
342デフォルトの名無しさん:2007/08/15(水) 11:46:15
>>337
<*grep*>:319:crt/src/minmax.h:21:#define max(a,b) (((a) > (b)) ? (a) : (b))
<*grep*>:333:crt/src/stdlib.h:166:#define __max(a,b) (((a) > (b)) ? (a) : (b))
<*grep*>:340:crt/src/stdlib.h:472:#define max(a,b) (((a) > (b)) ? (a) : (b))
<*grep*>:342:crt/src/v2tov3.h:71:#define max(a,b) (((a) > (b)) ? (a) : (b))
<*grep*>:387:include/minmax.h:21:#define max(a,b) (((a) > (b)) ? (a) : (b))
<*grep*>:399:include/stdlib.h:146:#define __max(a,b) (((a) > (b)) ? (a) : (b))
<*grep*>:406:include/stdlib.h:424:#define max(a,b) (((a) > (b)) ? (a) : (b))
<*grep*>:603:PlatformSDK/Include/WinDef.h:177:#define max(a,b) (((a) > (b)) ? (a) : (b))
なるほど、標準ライブラリにないmax()系がこんなにあるとはM$は問題だらけだね。
343デフォルトの名無しさん:2007/08/15(水) 11:48:41
>>341
きっとこんなのだよ。
#define sub(x) putchar(x)
344デフォルトの名無しさん:2007/08/15(水) 12:04:17
>>342
そうだな。実際最悪だろ。
345デフォルトの名無しさん:2007/08/15(水) 12:06:28
マクロは名前空間にもくるめないしなあ
346デフォルトの名無しさん:2007/08/15(水) 12:08:02
>>342
実際、それが問題になることがあって、
min,maxを定義しないようにするための NOMINMAX というマクロが存在する
347デフォルトの名無しさん:2007/08/15(水) 12:08:48
>>342
実際そのマクロの存在の為に、VC6の<algorithm>にはstd::max, std::minがない。
これはC++の移植性において、由々しき問題である。
348デフォルトの名無しさん:2007/08/15(水) 12:10:11
まあVC6はそれ以前に色々ダメすぎだけどな
今となっては
349デフォルトの名無しさん:2007/08/15(水) 12:10:29
>>342
Effective C++でも第1項でいきなり問題視してるじゃん。
350デフォルトの名無しさん:2007/08/15(水) 12:41:16
Effective C++(笑)
351デフォルトの名無しさん:2007/08/15(水) 12:50:00
質問です。
Windows Vista買ったら、Borland C++5.01のダイアログエデイタが正常に動作しません。
Xpマシンもありますがどうすればいいでしょうか?
1.プログラムはXpマシンで作成してコピーする。
2.ダイアログの部分だけXpマシンで作成してコピーする。
3.Vistaで動作する開発環境を買って移植する。
352デフォルトの名無しさん:2007/08/15(水) 12:57:03
マルチ死ね
353デフォルトの名無しさん:2007/08/15(水) 14:18:31
>>349
ttp://kamaitachi.blogdns.net/cgi-bin/izna/manage/img0351.jpg
これか。別にそんなに問題視はしてないように見えるが。
354デフォルトの名無しさん:2007/08/15(水) 14:21:04
問題視しまくりじゃないか。
355デフォルトの名無しさん:2007/08/15(水) 14:47:21
ここで言う「マクロと関数に名前の区別」というような点は問題視してない
356デフォルトの名無しさん:2007/08/15(水) 14:56:09
確かに>337が指摘しているような「大文字ではない」ことについてはなんら言及されていないね。
357デフォルトの名無しさん:2007/08/15(水) 15:01:51
>>349>>342宛なんだから、「ここで言う」はmaxマクロに対応させないと。
358デフォルトの名無しさん:2007/08/15(水) 15:14:41
なるほど。確かにそっちはそうだな。
359デフォルトの名無しさん:2007/08/15(水) 18:25:13
今北産業。

>>284
> 「単独の文
> *++p;
> は間接参照の文が無意味である。」
> ってどう意味なのでしょうか?
> 実例を挙げていただけないでしょうか。

無意味でない例なら出せる。

volatile int* p;

とか宣言されていて、p が実はメモリマップド I/O
で読むだけでも意味がある場合がある。

>>293
> #define sub(x) (x < 0 ? -x : x)

sub(a+b) とかでおかしくなるから >>342 みたいに () 使おう。
360デフォルトの名無しさん:2007/08/15(水) 18:29:58
>>359
p が volatile int* であっても
*++p; と書いて、pがdereferenceされることは保証されてないだろ。
361デフォルトの名無しさん:2007/08/15(水) 19:14:24
>>360
すまん、よくわからんのだが「p が deference されることは保証されない」のは、特に

*++p;

に言える、と言ってる?それとも、

*p;

でも同様だと言ってる?
362デフォルトの名無しさん:2007/08/15(水) 19:24:20
>>360
とりあえず volatile な *p; については

http://c0x.coding-guidelines.com/6.7.3.html

の 1488-1489 辺りで「最適化で削除しちゃいかんよ」ってな事になってるが。
もっといえば

volatile int x;

x;

でも一緒。
363デフォルトの名無しさん:2007/08/15(水) 20:19:08
更にいうと

const volatile int x;

x;

でも処理系は x の読み出しを削除してはいけないし、
x の値を何かに使う場合複数回の読み出しで同じ値だと仮定してもいけない。
この場合の const は「書き込めません」っていう意味だ。
364デフォルトの名無しさん:2007/08/16(木) 07:37:42
char *p;
char *q;
p = "hoge" + 1;
q = "hoge"[1];
この場合pはoになることは正しいですよね。
pにはhのアドレスが代入される訳ですから。
んでqの場合は配列じゃないので、
char x[] = "hoge";
int r = x[1];
なら正しくrにはoが代入されますけれど、
q = "hoge"[1];とかいても警告は出ますし、
無意味な値が代入されるけれどもコンパイルはされてしまいます。
どうしてコンパイルエラーにならないんでしょうか?
365デフォルトの名無しさん:2007/08/16(木) 07:55:01
"hoge" + 1
はポインタだが、
"hoge"[1]
はポインタではない。
366デフォルトの名無しさん:2007/08/16(木) 08:01:25
それは分かるんですけれども、
なんでコンパイル出来るのか?
が疑問なんです。
367デフォルトの名無しさん:2007/08/16(木) 08:04:43
>>364
char* p = 定数;

ならわかる?
368デフォルトの名無しさん:2007/08/16(木) 08:13:50
>>366
>pにはhのアドレスが代入される訳ですから。
間違い。
369デフォルトの名無しさん:2007/08/16(木) 08:20:38
>>364
C言語だと、整数からポインタへの代入は警告止まりになる。
C++ だとエラーになる。
370デフォルトの名無しさん:2007/08/16(木) 08:38:00
>>367,369
char* p = 定数;
いや、もちろんポインタに数値をキャストしなくても
代入出来ることは知ってます。
q = "hoge"[1];
ってコンパイラはどういう風に解釈するんですか?
>>368
>pにはhのアドレスが代入される訳ですから。
え、じゃ文字列の先頭のアドレスで正しいですか?
371デフォルトの名無しさん:2007/08/16(木) 08:42:22
>>370
"hoge"+1なんだから、当然'o'ヘのポインタだ。
372デフォルトの名無しさん:2007/08/16(木) 08:43:32
>>370
hのアドレス=文字列の先頭のアドレス
代入は+1が行われたあとだろ?
だからすでにアドレスが変わってる
373デフォルトの名無しさん:2007/08/16(木) 08:45:27
>>370
q = "hoge"[1];



static const char x[] = "hoge";
q = x[1];

は大体同じ。
374デフォルトの名無しさん:2007/08/16(木) 08:59:29
>>372
すいません、勘違いしてました。
>>371,373
えっと自分が聞きたいのは、
char *q = "hoge"[1];
という文がなぜコンパイル出来るかってことなんです。
char q [] ="hoge";
char *p = "hoge";
はあきらかに違うのに
char *q = "hoge"[1];
がコンパイル出来るとまるでこの二つが同じように錯覚してしまって
間違いの元になるんじゃないかって思ったんです。
んで、そういう事が出来るのはきっと何か理由があるに違いないと思ったんです。
375デフォルトの名無しさん:2007/08/16(木) 09:05:40
特に理由はない。
文法上問題がないから警告止まりでコンパイルされるだけ。
376デフォルトの名無しさん:2007/08/16(木) 09:08:16
> char q [] ="hoge";
> char *p = "hoge";
> はあきらかに違うのに
> char *q = "hoge"[1];
> がコンパイル出来るとまるでこの二つが同じように錯覚してしまって
> 間違いの元になるんじゃないかって思ったんです。

なぜ二つが同じように錯覚するの?
377デフォルトの名無しさん:2007/08/16(木) 09:27:30
>>375
ほんとだ。
char *x = "hoge";
p = x[1];
がコンパイル出来る。
x 0x85fd8
p 0x6f
pのアドレスってどこから出てきたんだろう?
378デフォルトの名無しさん:2007/08/16(木) 09:28:33
>>374
= の右辺に書かれた T 型の文字リテラルは T 型の static 配列と同じです
= の右辺に書かれた T 型の配列は T 型の配列の先頭要素を指す「Tのポインタ型」になります

理由としてはっつーか便利だし〜みたいな?
379デフォルトの名無しさん:2007/08/16(木) 09:31:29
>>377
'o' に決まってるだろう。
380デフォルトの名無しさん:2007/08/16(木) 09:36:05
>>377
m9(^Д^)プギャー
381デフォルトの名無しさん:2007/08/16(木) 09:39:47
>>377
一応言っておくけど0x6fはアドレスじゃないよ
'o'に対応するアスキーコード
http://c-production.com/special/03090704.html
382デフォルトの名無しさん:2007/08/16(木) 10:00:58
qはそれ自身が配列であり、右辺の"hoge"はコンパイラに対する
初期化内容としてのみ解釈される。定数"hoge"は実行時には存在しない。
pの場合、実行時に定数"hoge"をメモリ上に用意して、そのポインタを利用する。
なので同じように見えても右辺の意味がまったく違う。

もともとqは以下のように記述すべきものだったんだろうけど、
char q[] = {'h', o'', g'', 'e', '\0'};
不便なので、利便性のために
char q[] = "hoge";
という書き方も受け入れるようになっただけ。
結果的にpとqの右辺が似ているけど、たまたま。
383デフォルトの名無しさん:2007/08/16(木) 10:07:36
*p = "hooge"
p[] = "hooge"

は同じだろ
384デフォルトの名無しさん:2007/08/16(木) 10:11:42
>>383
本気で言ってるのか
385デフォルトの名無しさん:2007/08/16(木) 10:20:58
>>383
別物
386デフォルトの名無しさん:2007/08/16(木) 10:44:01
>>383
どっちもセミコロンが無いからエラーになる→同じこと
ってオチは無しだぞw
387デフォルトの名無しさん:2007/08/16(木) 10:49:20
>>383
>>364未満だな
388デフォルトの名無しさん:2007/08/16(木) 10:49:57
型名もないしな
389デフォルトの名無しさん:2007/08/16(木) 10:52:18
フフ
390デフォルトの名無しさん:2007/08/16(木) 11:30:57
void foo() {
 auto char *p = "hoge";
 auto char p[] = "hoge";
 …
}
とした時の挙動からして違うことは判るだろ
391デフォルトの名無しさん:2007/08/16(木) 11:48:08
char p1[] = "hoge";
char *p2 = "hoge";

p1[1] = 'a';
p2[1] = 'a'; // <=
392デフォルトの名無しさん:2007/08/16(木) 12:16:13
Perlの無名配列みたいに
{1000,100,10}[0] もいけたらいいのに
393デフォルトの名無しさん:2007/08/16(木) 12:24:01
C99

#include <stdio.h>
#include <string.h>

int main() {
printf("%d\n", (int[]){1,3,5,7,9}[1]);
}
394デフォルトの名無しさん:2007/08/16(木) 12:33:57
>>393
こんな事出来るんだ。
知らんかった。
395デフォルトの名無しさん:2007/08/16(木) 12:49:24
>>393
うは、いけるんやwありがと
396デフォルトの名無しさん:2007/08/16(木) 21:01:08
配列として認識されるのか…すげー
397デフォルトの名無しさん:2007/08/16(木) 21:45:24
これでC99準拠のコンパイラがもっと増えてくれれば
398768:2007/08/16(木) 22:36:05
C99、便利だけどC言語としてみるとキモい・・・
399デフォルトの名無しさん:2007/08/16(木) 22:38:18
C++と同期とって進化してくれれば歓迎なんだけどな。
400デフォルトの名無しさん:2007/08/16(木) 22:57:51
C99準拠のコンパイラって少ないの?
GCCしか使ってないから知らんのだけど。
401デフォルトの名無しさん:2007/08/16(木) 23:02:56
>>400
Comeau
402デフォルトの名無しさん:2007/08/16(木) 23:06:00
前使ってた Borland C++ 5.5.1 は C99 非準拠だったな.
403デフォルトの名無しさん:2007/08/16(木) 23:06:01
ICC
404デフォルトの名無しさん:2007/08/16(木) 23:20:10
VC++ のやつが無視しやがってるから広まらないのかな。
405デフォルトの名無しさん:2007/08/16(木) 23:20:51
C99はDと同じ運命をたどればいいんだよ
406デフォルトの名無しさん:2007/08/16(木) 23:22:13
VC++はC++コンパイラだからC99対応しないよ、ってMSの
中の人が言ったんだっけか。
407デフォルトの名無しさん:2007/08/16(木) 23:29:51
確かにVC++8.0で試すと凄い勢いでエラー出るな
408デフォルトの名無しさん:2007/08/16(木) 23:35:47
まあ、C99 使うくらいなら C++ 使うってのは確かだが
409デフォルトの名無しさん:2007/08/17(金) 00:35:35
数式を画面に表示させるためのライブラリって無いでしょうか?
x^2みたいなのを、綺麗に表示するためのライブラリがほしいのです。
できれば、ソース公開している奴で、無ければソースは無くてもいいのですが
とにかく、アプリに組み込んで開発できる奴がいいです。


ちなみに、開発環境はVC++2005、WinXPProを想定しています。
動作環境も同様にXPProです。

よろしくお願いします。
410デフォルトの名無しさん:2007/08/17(金) 04:48:29
>>409
ググっただけなんで、中身はシラネ。
http://www.vector.co.jp/soft/win95/prog/se363439.html
411デフォルトの名無しさん:2007/08/17(金) 05:26:10
ビット演算がうまくなるコツってないですかね?
全く使いこなせてないので、
他人のソース読んでて、使いこなせていると凄く羨ましいんですけれど。
412デフォルトの名無しさん:2007/08/17(金) 05:27:47
才能ないよ諦めた方がいい
413デフォルトの名無しさん:2007/08/17(金) 05:37:52
コラー!
414デフォルトの名無しさん:2007/08/17(金) 05:49:50
自虐し過ぎ
415デフォルトの名無しさん:2007/08/17(金) 06:14:34
>>411
グラフィックまわりをいじって変な画面効果とか作るのが楽しいかも
上達が見てわかるし
416デフォルトの名無しさん:2007/08/17(金) 08:06:25
>>411
エンディアンと変数型のバイト幅を意識すること。
算術シフトと論理シフトを意識すること。
コツっていうとこんぐらい?

フラグ的な使い方の話だったら、
必要になった時だけ使うのが良いんじゃないかなぁ。
417デフォルトの名無しさん:2007/08/17(金) 08:08:28
>>411
論理演算、真理値表、2進数⇔16進数変換。
この辺のキーワードを調べ使いこなせるようになるとずっと違うと思うよ。
例えばこんなの。
a b c r
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 0
1 0 0 x
1 0 1 x
1 1 0 0
1 1 1 1
こいつからrを求める式を導き出せれば一歩前進。
418デフォルトの名無しさん:2007/08/17(金) 09:16:08
皆さんアドバイス有り難うございます。
ビット演算は大事ですからね。
精進します。
>>417
グヌヌ。
難しいぞ。分かんないっす。
419デフォルトの名無しさん:2007/08/17(金) 09:22:07
プッ ヘボすぎ
420デフォルトの名無しさん:2007/08/17(金) 09:29:14
~(a^c)&b
こうですか?
421デフォルトの名無しさん:2007/08/17(金) 10:04:58
タンクローリーを運転する人に見えたのは俺だけでいい。
422デフォルトの名無しさん:2007/08/17(金) 11:18:41
int foo;
int bar;
bar = (unsigned int)foo & 0x0fffffff;
という事をしょっちゅうしているプログラムがあるんですけど、
どういう意図を持ってこの処理をしてるんでしょうか?
最初は、int型の変数をunsigned int型にキャストしてint型の変数に代入すると、
例えば-5が代入されてたら4294967291になるのかなぁと思ってたんですが、
そういう訳でもないみたいですし。
423デフォルトの名無しさん:2007/08/17(金) 11:21:44
>>422
意図については、そのプログラムを書いた人に聞くのが一番!

あと、もう少し基礎を勉強したほうが良いよ
424デフォルトの名無しさん:2007/08/17(金) 20:27:31
動的な配列を作る時は
int* a=(int*)malloc(sizeof(int)*10);
if(a==NULL)
みたいにしてポインタが有効かチェクしますよね?
二次元の配列を作る目的で
int** b=(int*)malloc(sizeof(int*)*10);
とやったら、この時も
if(b==NULL)
で、bが有効なポインタかどうか判断していいんですか?
425デフォルトの名無しさん:2007/08/17(金) 20:31:19
はい
426デフォルトの名無しさん:2007/08/17(金) 21:12:36
>>424
if(b==(void**)0)
427デフォルトの名無しさん:2007/08/17(金) 22:36:27
>>424
#include<stdio.h>
#include<stdlib.h>

#define X_SIZE 15
#define Y_SIZE 10

int main(void){
int x, y;
int **b;

b=malloc(sizeof(int*)*Y_SIZE);
if(b==NULL) exit(1);
b[0]=malloc(sizeof(int)*X_SIZE*Y_SIZE);
if(b[0]==NULL) exit(1);
for(y=1;y<Y_SIZE;y++) b[y]=&b[0][y*X_SIZE];

for(y=0;y<Y_SIZE;y++)
for(x=0;x<X_SIZE;x++) b[y][x]=y*X_SIZE+x;

for(y=0;y<Y_SIZE;y++){
for(x=0;x<X_SIZE;x++) printf(" %3d", b[y][x]);
printf("\n");
}

free(b[0]);
free(b);

return 0;
}
428デフォルトの名無しさん:2007/08/17(金) 23:01:35
>>426
キャストしたらダメだろ。
意味変わる。
429デフォルトの名無しさん:2007/08/17(金) 23:07:24
>>420
それでもいいけど、(b&~c)^aの方がシンプルだろう。
430デフォルトの名無しさん:2007/08/18(土) 01:15:04
a^b&~c ってなところか。

>>411
最低限の論理学の勉強をする。
ド・モルガンの法則とかは必須。
431デフォルトの名無しさん:2007/08/18(土) 07:42:18
#define NULL (void*)0
だから
ポインタへのポインタが"NULL"かどうかは
(void**)0で調べないといけない
432デフォルトの名無しさん:2007/08/18(土) 08:20:03
>#define NULL (void*)0
>だから
いいえ。
433デフォルトの名無しさん:2007/08/18(土) 10:12:01
世界中のC言語を使える人のコンピューターに対する理解度の高さの平均と、
世界中のJavaを使える人のコンピューターに対する理解度の高さの平均は、
どっちが高いですか?
434デフォルトの名無しさん:2007/08/18(土) 10:16:53
マルチ死ね
435デフォルトの名無しさん:2007/08/18(土) 10:18:08
>>433
スレ違い
436DEFORTの名無し:2007/08/18(土) 13:41:52
ひさしぶりぶり
MinGWつかってみたけど微妙
437デフォルトの名無しさん:2007/08/18(土) 13:47:02
またお前か
438デフォルトの名無しさん:2007/08/18(土) 14:28:50
>>422
0x0fffffff でマスクってことは、下位28ビットが欲しいってだけじゃね。
あと、unsigned int へのキャストは無駄だな。
439デフォルトの名無しさん:2007/08/18(土) 15:32:58
>>431
どこからそんなデマを仕入れてきた?
440デフォルトの名無しさん:2007/08/18(土) 16:02:21
脳内
441デフォルトの名無しさん:2007/08/18(土) 16:06:10
新聞
442デフォルトの名無しさん:2007/08/18(土) 20:10:13
ある特定のウィンドウがアクティブになった時に、そのウィンドウのメニュー内の
特定のコマンドを実行するようにしたいのですが、どのよう記述したら良いでしょうか?
具体的にはXSIとゆう3DCGソフトの「アニメーションエディタ/編集/オリジナルコマンド」
を自動実行させたいのですが、、、

宜しくお願いします。
443デフォルトの名無しさん:2007/08/18(土) 20:13:48
C/C++じゃなくてスクリプトで書けば?
444デフォルトの名無しさん:2007/08/18(土) 20:16:44
C/C++の勉強すれば分かるよ
445デフォルトの名無しさん:2007/08/19(日) 00:24:05
WSHとかの領域になるんかな?あっちの詳細を全部知ってるわけではないけれども
446デフォルトの名無しさん:2007/08/19(日) 00:43:34
new int[n]; ← このnのところは、何の型で渡すのか決められてますか?
intとかlongとか(負数はあり得ないので、unsignedでしょうか)

あと、Windowsの32ビット環境では、intとlongはまったく同じ型として扱っても問題ないですか?
447デフォルトの名無しさん:2007/08/19(日) 00:45:47
>>442
ウィンドウメニュー内の特定のメニュー項目が選択されたときって、
たぶん、WM_COMMANDとかのウィンドウメッセージが飛ぶと思うんだけど、
その具体的なパラメタを調べて、アクティブとかのイベント関係なく
直接呼んじゃだめなの?

もし、アクティブになると同時って条件をつけたいなら、
1)ウィンドウをアクティブにする
2)ウィンドウメッセージを送信する
っていうだけの簡単なプログラムを作るとか。
448デフォルトの名無しさん:2007/08/19(日) 01:13:18
>>446
特定の型には決まっていない。整数ならいい。
負の数になったら未定義動作。

int と long は違う型です。
449デフォルトの名無しさん:2007/08/19(日) 01:30:05
450デフォルトの名無しさん:2007/08/19(日) 01:32:34
わざわざ他板のを持ってこなくてもいいんだよ
451デフォルトの名無しさん:2007/08/19(日) 01:34:41
>>448,446
>特定の型には決まっていない。整数ならいい。
C++の言語仕様の詳細は知らないけど、VCならsize_tでいいんじゃね
http://msdn2.microsoft.com/en-us/library/t48aek43(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/ms859258.aspx

>int と long は違う型です。
これもVC(x86)の範囲内で同じようにつかえるかって質問なら、問題ないと思うけど
http://msdn2.microsoft.com/en-us/library/ms859270.aspx
452デフォルトの名無しさん:2007/08/19(日) 01:36:23
>>450
この板ID無いが。
453デフォルトの名無しさん:2007/08/19(日) 01:57:33
>>451
operator new 関数の第1引数は VC に限らず size_t 。
でもそれと new 式の配列要素数を表す式の型とは別。

サイズが同じだろうがなんだろうが int と long は違う型。
まったく同じ型として扱うのには問題がある。
454デフォルトの名無しさん:2007/08/19(日) 03:13:14
>>453
ごめん、1点分からないので、教えていただきたい。
とりあえず、>>446はVCの利用上(実装上)の制限が知りたいんじゃないの、
と思ったので、その観点だけで書いたのは自分の思い込みで、それで意見が
すれ違うのは仕方ないんだけど、

>特定の型には決まっていない。整数ならいい。
>でもそれと new 式の配列要素数を表す式の型とは別。
の箇所。
そうはいっても、ソースをコンパイルしてバイナリに落とす以上、コンパイラ定義かも
しれないけど、具体的な値の有効範囲ってかならずあるんじゃないの?
実際、MSDNの配列定義のサイズ指定の箇所では
0以上の整数型、ただしMicrosoft仕様では... としてsize_tに言及してるわけだし。

それにoperator new 関数の第1引数がsize_tに決まってるなら、size_t以上の値を
記述して受け入れてくれるコンパイラがありそうにないので、
その意味でも「整数ならいい」ってのはあいまいな感じがする。

なので、「整数ならいい」ってのは純粋に言語仕様の話として語っているのか、
それとも、コンパイラの実装やソース記述上の制限を語る場合でも同じ回答
になるのか、気になって眠れなくなりそうなんで、正確なところが知りたいんだけど。
455デフォルトの名無しさん:2007/08/19(日) 03:20:37
 
   ________    
     /   |         
    /__  |     
   /   /.  |-―‐.                
  / \ /     |              
 /  ./      |          
   ノ        ヽ__」    


   |
 .―┼‐フ  
   |/   
  /|/ ̄ ̄ ̄\ 
 //|       | 
   |       |  
   |     (二X
456デフォルトの名無しさん:2007/08/19(日) 03:39:56
>>454
現行の規格ではだいたい >>453 みたいなことしか言えない。ある意味
これが正確なところ。

new とは別に、各処理系が定めるべきいろいろな数値の上限の中に
「オブジェクトのサイズ」というのがある。配列オブジェクトもこの制限を
うけるので、値の範囲はこれに基づくとも言える。これについて規格が
最低限のガイドラインとして提示しているのは 262144 。

まだ規格化はされてないけどこんな話もある。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#624
457デフォルトの名無しさん:2007/08/19(日) 04:45:36
ありがとう、これで寝られる。
仕様自身は結局釈然としない部分があるけど、
>>448,453の回答が正確で誠実な回答というのは理解できた。

リンク先は策定中の次期規格?
また、膨大な項目が...
現状でさえ、もうついていけないくらいややこしいのに。
458デフォルトの名無しさん:2007/08/19(日) 12:35:03
#include "DxLib.h"

int WINAPI Winmain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
}
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1)return(-1);
DrawBox(0, 0, 120, 65535, TRUE);

WaitKey();
DxLib_End();
return(0);
}

というプログラム書くとエラー出るのはなぜでしょうか?ちなみに
14さいからはじめるリアルに動くゲーム物理プログラミング教室C言語編
という本に載ってます。
459デフォルトの名無しさん:2007/08/19(日) 12:38:39
エラーの内容かけ。
460458:2007/08/19(日) 12:40:14
エラー E2141 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 4: 宣言の構文エラー
エラー E2190 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 4: 不要な }
エラー E2190 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 4: 不要な }
エラー E2303 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 型名が必要
エラー E2356 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 'ChangeWindowMode(int)' の再宣言で型が一致していない
エラー E2344 C:\Users\shiro\Desktop\MyC\プロジェクトに追加すべきファイル_BCC用\DxLib\DxLib.h 1017: 一つ前の 'ChangeWindowMode(int)' の定義位置
エラー E2063 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 不正な初期化
エラー E2293 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: ) が必要
エラー E2040 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 6: 宣言が正しく終了していない
エラー E2303 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 7: 型名が必要
エラー E2356 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 7: 'DrawBox(int,int,int,int,int,int)' の再宣言で型が一致していない
エラー E2344 C:\Users\shiro\Desktop\MyC\プロジェクトに追加すべきファイル_BCC用\DxLib\DxLib.h 1519: 一つ前の 'DrawBox(int,int,int,int,int,int)' の定義位置
エラー E2063 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 7: 不正な初期化
エラー E2293 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 7: ) が必要
エラー E2040 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 11: 宣言が正しく終了していない
エラー E2190 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 12: 不要な }
*** 16 errors in Compile ***

** error 1 ** deleting Debug\dxtest.obj

です。
ちなみに今日勉強したばかりでさぱりとわかりません
461デフォルトの名無しさん:2007/08/19(日) 12:41:46
勉強してないからエラーが出る
462デフォルトの名無しさん:2007/08/19(日) 12:42:05
どんなエラーがでてるの?
463デフォルトの名無しさん:2007/08/19(日) 12:42:21
最初に4行目にエラーが出ているだろう。
4行目を穴があくまでじっくり見ろ、その教科書とひたすら比較しろ。
それでわからなかったらもっかいおいで。
464デフォルトの名無しさん:2007/08/19(日) 12:45:46
彼はエラーの見方がわからないと思う
465デフォルトの名無しさん:2007/08/19(日) 12:46:33
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1)return(-1);
DrawBox(0, 0, 0, 120, 65535, TRUE);

WaitKey();
DxLib_End();
return(0);
}
466デフォルトの名無しさん:2007/08/19(日) 12:49:38
ChangeWindowMode(1);
こっちのがいいかも分からんね
467458:2007/08/19(日) 13:11:31
>>465のように書いてみましたが
まだ
Fatal: ファイル VORBISFILE_STATIC.LIB が開けません
と出ます。
>>464
まったくおっしゃるとおりです
468デフォルトの名無しさん:2007/08/19(日) 13:59:36
>>467
エラーの通りvorbisfile_static.libってファイルが見つからないんだろ。
あとは環境が分からないと何も言えないと思う。

自分の開発環境を検索ワードに入れて、
(「vorbisfile_static.lib VC++」とか「vorbisfile_static.lib BCC」とか)
その辺でググって見たらどうよ?
469デフォルトの名無しさん:2007/08/19(日) 15:14:22
というか似たような質問を、DxLibのサイトで何度も見た気がするんだ。
470デフォルトの名無しさん:2007/08/19(日) 15:55:17
vorbisfile_static.libはDxLibのアーカイブに同梱されてるから
それをソースと同じディレクトリにコピー
というか「このフォルダのファイルを全てコピー」みたいなフォルダなかったか?
471230:2007/08/19(日) 23:24:29
GNU Compiler Collectionのg++コンパイラで
-std=c++98というコンパイラオプションというのがあるらしいのですが
ぐぐってもよく分かりませんでした。
誰か教えてください。
472471:2007/08/19(日) 23:25:32
230というのははミスです。すみません(汗
473デフォルトの名無しさん:2007/08/19(日) 23:42:30
コンパイラマニュアルとかないの?
474デフォルトの名無しさん:2007/08/19(日) 23:48:12
475471:2007/08/19(日) 23:49:45
どもです。探し見てみます。
476デフォルトの名無しさん:2007/08/19(日) 23:51:50
もう見てないかな
まるちか?2ちゃんではマルチポストは叩かれるですよ
せめて、主とする、質問したスレを付記
機嫌が良ければ、そこにヒント書きますから
477デフォルトの名無しさん:2007/08/19(日) 23:56:08
今更VC++6.0のMFCなんですけれど、
ツリーコントロールのアイテムの文字列が長いときに
横スクロールにせず、文字列を折り返すことってできますでしょうか?
478デフォルトの名無しさん:2007/08/20(月) 01:12:13
curses(ncurses)のプログラミングを euc-jp 環境で行って来たのですが、
訳あって utf-8 環境で行うことになりました。

euc-jp 環境で作ったファイルを utf-8 環境に持ってきて、
iconvで文字コードを変更し、コンパイル、実行すると、出力(日本語)が文字化けてしまいます。

utf-8 環境に持ってきた euc-jp のファイルを、
文字コードをそのままにして、端末の表示文字コードを utf-8 から euc-jp に変更した上で、コンパイル、実行すると、正しく表示されます。

これななぜでしょうか?
curses が utf-8に対応していないとかってありますか?
479デフォルトの名無しさん:2007/08/20(月) 01:14:08
>>478
ソース文字セットと実行文字セットは別。
gcc のオプション -finput-charset と -fexec-charset を参照すべし。
480デフォルトの名無しさん:2007/08/20(月) 01:15:56
>>478
curses 関係あるのか?
puts("あいうえお") とかで試せばわかると思うけど。
481デフォルトの名無しさん:2007/08/20(月) 01:20:45
先ずは問題の切り分けだね。
>480の言うように標準出力に出力してみてその時点で文字化けしているならgccのオプションなどを調節。
その上でcurses使うと化けるのなら、cursesの設定か何か、その辺りの調査。
482デフォルトの名無しさん:2007/08/20(月) 01:36:08
operator=で返す自分の参照は、constつけるべきですか?
483デフォルトの名無しさん:2007/08/20(月) 01:42:23
>>482 いいえ。
484デフォルトの名無しさん:2007/08/20(月) 01:48:55
寧ろつけてはいけません。
485デフォルトの名無しさん:2007/08/20(月) 02:10:18
>>447
どうもです
XSIではコマンドを実行する際にエディタのIDのような物が必要で、
エディタウィンドウを複数開いている時には、コマンド実行前に
その時アクティブなウィンドウのIDを取得する必要があります。

WM_ACTIVATEとかを使えば良いのでしょうか?
486デフォルトの名無しさん:2007/08/20(月) 02:24:33
動画とかをエンコードするデコーダって色々ありますよね。
あれ使えるソフト作るのって大変なんでしょうか?
AVIutlみたいなソフトって個人では簡単に作れないんですかね?
どの辺勉強したらいいんでしょうか?
487デフォルトの名無しさん:2007/08/20(月) 02:27:35
>>478 です。

>>479,480,481
さんを参考にして少しいじってみました。

まず、480さんの言うように、単純に puts("あいうえお") を行うプログラムを書き実行してみました。
すると、”-finput-charset=utf-8 -fexec-charset=utf-8”が有る無しに関わらず、文字化けしませんでした。

次に、cursesのコンパイルを、”-finput-charset=utf-8 -fexec-charset=utf-8”を付けて実行してみたところ、やはり文字化けが発生しました。
488デフォルトの名無しさん:2007/08/20(月) 02:43:20
単にcursesがutf-8に対応して無いんじゃないの?
utf-8だと端末上での漢字の幅がバイト長と単純に一致しなくなるし
naiveな実装だと色々問題起きそう
489デフォルトの名無しさん:2007/08/20(月) 03:30:44
VC++2005で<cstdio>等をインクルードすると、
std::printf はもちろん、名前空間のない ::printf も使えてしまいます。

BCB2006だと逆に、<stdio.h>をインクルードすると
::printf を使えますが、 std::printf も使えます。

どちらが正しいのでしょうか。また、正しくない方を正しくする方法はありますか?
490デフォルトの名無しさん:2007/08/20(月) 04:18:35
>>478です。
http://www.hakodate-ct.ac.jp/~tokai/tokai/gtkmm/etc/p3.htm
というサイトがあったので、
・-lncurses ではなくて -lncursesw をリンクする
・#include <locale.h>
・setlocale( LC_ALL, "" );

を取り入れたところとりあえず、euc-jp 環境のファイルを utf-8 環境に持ってきて、
このファイルの文字コードを utf-8 に変えてコンパイルし実行すると、
文字化けしない ・・・というのは達成できました。

しかし、私は UNIX(LINUX) にあるような SLコマンド のクマAA バージョンを作って遊んでいたのですが、
euc-jp環境とutf-8環境では少し動きが変わってしまいました。
その動きの変わってしまう場所が、euc-jp環境で苦労して改良したところなので、
かなりショックです。

まぁ、なんとか解決策があればいいのですが、
私の知識ではちょっとつらいかも知れません。
491デフォルトの名無しさん:2007/08/20(月) 07:47:38
for(;;)
;
こんなのあるのね
びっくり
492デフォルトの名無しさん:2007/08/20(月) 09:25:05
無限ループの常套手段
493デフォルトの名無しさん:2007/08/20(月) 09:27:33
俺はwhile(1)派
494デフォルトの名無しさん:2007/08/20(月) 09:31:18
自分も無限ループはwhile派かな
カウンタが要るときはfor使うかもしらんけど
495デフォルトの名無しさん:2007/08/20(月) 09:46:09
>>489
<cstdio> で std::printf が、 <stdio.h> で ::printf が使えるようになることになっている。
1つのヘッダで両方が使えるようになることは保証されない。
496デフォルトの名無しさん:2007/08/20(月) 18:43:51
std::bad_allocを捕まえたりいろいろ例外処理を書いているのですが、
メモリ4GBもあるので、デバッグ中にbad_allocが投げられることは今まで一度もありません。
投げられた際の動作をデバッグしたいのですが、そういうときはどうすればいいでしょうか。
敢えてメモリを消費したりするんですか?

↑ではbad_allocのことですが、他にもWindowsのAPI関数が失敗したときとかも、
ちゃんと自分が書いた処理が動作するか確かめたいんですが。
497デフォルトの名無しさん:2007/08/20(月) 19:07:29
throw std::bad_alloc();
498デフォルトの名無しさん:2007/08/20(月) 19:37:17
>>496
適当にラップして失敗に相当する結果を返せばいいべ
499デフォルトの名無しさん:2007/08/20(月) 20:47:05
起動時に malloc(100000000) とか適当にやっとけば足りなくなるんじゃない?
500デフォルトの名無しさん:2007/08/20(月) 21:09:14
例えば、"a"とか"あ"の文字コードを出力する方法ってありますか?
501デフォルトの名無しさん:2007/08/20(月) 21:11:15
printf( "%d", 'a' );
502デフォルトの名無しさん:2007/08/20(月) 21:30:04
>>501
ありがとうございます。

このページ
http://ash.jp/code/unitbl21.htm
の、UTF-8の欄のような値を出力する方法ってありますか?
503デフォルトの名無しさん:2007/08/20(月) 22:23:30
%Xでの表示をぐるぐるまわせばおわりだろうに。
504デフォルトの名無しさん:2007/08/20(月) 22:26:44
>495
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#456
によると、
> Including the header <cxxx> declares a C name in namespace std.
> Including the header <xxx.h> declares a C name in namespace std (effectively by including
> <cxxx>), then imports it into the global namespace with an individual using declaration.
ということで、xxx.h だと std とグローバル両方で宣言されるというのが規格の意図らしい。
なので、BCB2006 の挙動は(それだけ見ると)規格に合致している。

が、現実的には
> If you want to assuredly declare a C name in the global namespace, include <xxx.h>.
> You may or may not also get the declaration in namespace std.
> If you want to assuredly declare a C name in namespace std, include <cxxx>.
> You may or may not also get the declaration in the global namespace.
ということで、>495 が妥当な仮定。
規格もこの現状を追認する形での修正が提案されている。

>502
自分がやりたいと思っていることをもうちょい正確に表現して欲しい。
文字が表示されて欲しいのか、文字コードが表示されて欲しいのかどっち?
入力として考えているのはどんなデータ?外部から与えられる文字列か、文字列リテラルか。文字コードは?
505504:2007/08/20(月) 22:28:32
最初のアンカーは >489 につけるべきだった。
506デフォルトの名無しさん:2007/08/21(火) 02:01:29
別人ですが
>>499
バグでそんな値(もっとでかい、0x40000000とか)を与えたことがあるけど、
無理に仮想記憶拡大して確保しようとして、システムが実質操作不能になるだけだった
507デフォルトの名無しさん:2007/08/21(火) 02:33:09
Windowsって1プロセスが使用できるメモリ空間のサイズって指定出来ないの?
Win2000の頃は2G制限とかあった記憶があるけど、今はどうなんだろ。
508デフォルトの名無しさん:2007/08/21(火) 03:06:41
>>507
以下は単なる思いつき。
1. プログラムの改造が可能なら、自分用の一定量しか領域確保できないメモリマネージャを作る。
2. メモリ取得APIをフックして自力で制限する。
3. SetProcessWorkingSetSizeを指定して、同時にスワップを小さくする。
509デフォルトの名無しさん:2007/08/21(火) 05:28:56
たった1000行のソースも完全に把握できねぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇ
もうだめだぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
510デフォルトの名無しさん:2007/08/21(火) 05:38:16
やっと気付いたか。
さっさと人生やり直せ。
511デフォルトの名無しさん:2007/08/21(火) 08:15:52
>>509
1関数1000行なら窓から投げ捨てろ
512デフォルトの名無しさん:2007/08/21(火) 08:40:46
10万行超えると見る気すら失せる
513デフォルトの名無しさん:2007/08/21(火) 09:28:25
float hoge = new float[100];
foo->CopyArray(hoge);


Cfoo:Cfoo()
{
float m_array = new float[100];
}
void Cfoo:CopyArray( float arg[])
{
arg = m_array;
}

配列のコピーをしたいとき、
上のように配列の名前(=先頭のポインタ?)
だけコピーするだけではダメなようなのですが、なぜですか?
for(int i=0;i<100;i++)
arg[i]=m_array[i];
}
のように中身を一つずつきちんとコピーしないとダメなんでしょうか?
514デフォルトの名無しさん:2007/08/21(火) 09:37:17
arg = m_arrayだとコピーじゃなくて同じ配列に別名を付けてるだけになる
515デフォルトの名無しさん:2007/08/21(火) 09:43:12
::memcpy(arg, m_array, sizeof(float) * 100));
516デフォルトの名無しさん:2007/08/21(火) 09:47:54
std::copy(&m_array[0], &m_array[100], &arg[0]);
517デフォルトの名無しさん:2007/08/21(火) 11:12:35
>>513
>float hoge = new float[100];
コンパイルできるコードを提示しなさい。
>arg = m_array;
それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。
518デフォルトの名無しさん:2007/08/21(火) 11:13:18
>>515
そんなコードを書く香具師は野垂れ死に値すると思います。
519513:2007/08/21(火) 11:55:54
皆さんいろいろありがとうございます。

>>517
>コンパイルできるコードを提示しなさい。

float* hoge = new float[100];
でした。

>それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。

というわけで、分かっておられると思いますが渡してるのはポインタでして
寿命は関係あるんですかね?

>>514
これもちょっと理屈が分かりません。
なぜ配列に別名をつけてることになるんですか?
配列の名前って先頭のポインタをさしてるんじゃなかったでしょうか?

>>518
一行で済むのでforで要素を一つずつコピーするよりは>>515>>516はいいかなと思ったんですが、
どうして>>515はダメなんですか?
520デフォルトの名無しさん:2007/08/21(火) 12:04:44
>>519
>寿命は関係あるんですかね?
その仮引き数の寿命は、その関数を抜けるまでです。
ポインタがポイントしている先のことは言及していませんね。
もう少し、ポインタ変数と言うものを理解しておいた方が良さそうです。

>なぜ配列に別名をつけてることになるんですか?
ポインタ変数にポインタ変数の値を代入するだけでは、
ポイント先の複写は行なわれません。
もう少し、ポインタ変数(ry

>どうして>>515はダメなんですか?
どうしてダメじゃないと思うんですか?
521デフォルトの名無しさん:2007/08/21(火) 12:06:18
>>519
> どうして>>515はダメなんですか?
float配列ならば動くけど、一般のオブジェクトの配列なら破滅的。
たとえば、string配列をmemcpyしたらどうなると思う?
522デフォルトの名無しさん:2007/08/21(火) 12:17:40
float で大丈夫ならダメとは言えないだろ。もっといい方法があるってだけで。
523デフォルトの名無しさん:2007/08/21(火) 12:24:46
>>520
>ポインタ変数にポインタ変数の値を代入するだけでは、
>ポイント先の複写は行なわれません。

いま気づきました。狂ってました。すいません。

要するに考え方として
「呼ぶ側で作った配列を渡してm_arrayの中身をコピーして貰ってくる」んじゃなくて
「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような
感じの書き方はできないんですかね?
呼ぶ側で、m_arrayの先頭のアドレスとサイズだけ分かれば
中身にアクセスできそうに思うのですが。

例えば、クラスメンバで持っているprivateな普通のオブジェクトインスタンスのポインタなんかの場合は
わざわざ中身をコピーしないでアドレスだけGet〜とかで貰って使ったりするじゃないですか?

>どうしてダメじゃないと思うんですか?

試したらとりあえずうまくいったんで・・・

>>521
わかりません。floatでは一応動きましたが、なんでダメなんでしょうか。
サイズ指定した範囲をコピーすればうまく動くと思うのですが。
524デフォルトの名無しさん:2007/08/21(火) 12:29:27
>>523
> 「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような
> 感じの書き方はできないんですかね?

なんでできないと思うの?
525デフォルトの名無しさん:2007/08/21(火) 12:31:36
>>524
書き方が分からないんで
そういう書き方が出来るなら教えてください、
ってことなんですが。
526デフォルトの名無しさん:2007/08/21(火) 12:34:01
やっぱりポインタ変数とポイント先の関係がわかっていないような……
527デフォルトの名無しさん:2007/08/21(火) 12:35:28
floatやint、char[]ならmemcpyしても問題ないが、下みたいなクラスだと問題が出てくる

class hoge {
 char *str;
 int length;
};

main() {
hoge* v1, v2;
v1 = new hoge;
v1->str = new char[100];
memcpy(v2, v1, sizeof(hoge));
strcpy(v1->str, "v1");
strcpy(v2->str, "v2");
printf("v1.str is %s.\nv2.str is %s", v1->str, v2->str);
}
528デフォルトの名無しさん:2007/08/21(火) 12:41:40
>呼ぶ側で、m_arrayの先頭のアドレスとサイズだけ分かれば
>中身にアクセスできそうに思うのですが。

思いついて下のようにやったらうまくいったようなのですが、
これってなんか危険だったりしますか?

float* hoge = new float[100];
hoge = foo->GetArray();


Cfoo:Cfoo() {
float m_array = new float[100];
}

float* Cfoo:GetArray(){return m_array;}
529デフォルトの名無しさん:2007/08/21(火) 12:47:45
>>528
最初のnew float[100]で確保したメモリはどうやって解放するんだい?
530デフォルトの名無しさん:2007/08/21(火) 12:52:23
>>528
配列のコピーをしたいんじゃなかったのか?
531デフォルトの名無しさん:2007/08/21(火) 12:58:48
>>527
理解にしばらく時間を要します。
脳のクロックが著しく劣っているのですいません。

>>529
これでもうまくいったっぽいですが、これならOKですか?

float* hoge;
hoge = foo->GetArray();

Cfoo:Cfoo() {
m_array = new float[100];
}

float* Cfoo:GetArray(){return m_array;}

>>530
すいません、コピーというか、m_arrayの中身を
どうにかして呼ぶ側で使えれば何でも良かったのですが。
532デフォルトの名無しさん:2007/08/21(火) 13:00:55
floatの計算速度ってdoubleよりも遅いんですか?
533デフォルトの名無しさん:2007/08/21(火) 13:02:09
>>528
巧くいってない巧くいってない。

>>531
だから、なんでコードの断片載せるんだって。
で、なんでまたfooはポインタなんだ?
534デフォルトの名無しさん:2007/08/21(火) 13:03:27
>>532
足し算などは同じ。超越関数などは速い可能性が高い。
しかし、他の方への変換が入ったりすると遅くなることもある。

結論:一概には言えない。
535デフォルトの名無しさん:2007/08/21(火) 13:06:07
もうスマートポインタコンテナとかRange conceptとか使う方がいいよ
536513:2007/08/21(火) 13:14:09
つまりはどうしたらいいのでしょうか?もうわけ分かりません。

やりたいことはCfooのメンバとしてもってるfloatの配列m_arrayの中身を
コピーするなりポインタを貰うなり、どういう方法があるのか分かりませんが
正しい方法で使いたいってことなんですが。
元の中身を書き換える必要はありません。知れればいいです。
で、とりあえず531で動いてますが、これは危険でしょうか。
要素数は別個貰うなりすれば分かるので
その範囲内だけアクセスするなら大丈夫そうなんですが、ダメですか。
537デフォルトの名無しさん:2007/08/21(火) 13:16:58
>>536
特に問題はないんじゃないの
538デフォルトの名無しさん:2007/08/21(火) 13:28:14
>>537
そうですか。ではひとまずこれでやっときます。
どうもお騒がせしました。
539デフォルトの名無しさん:2007/08/21(火) 13:36:29
書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。
それ以前に、Cfooを何故ポインタにしているかを知りたいんだが。
540デフォルトの名無しさん:2007/08/21(火) 13:52:24
floatならSSEで高速化しやすい
541513:2007/08/21(火) 13:53:03
>>539
>書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。

なるほど。

>Cfooを何故ポインタにしているかを知りたいんだが。

特に理由はないですが、
newしたCfooのポインタをメンバとして持ってるだけです。
ポインタで持ってるほうがいろいろ別のクラスに連れまわしたりするとき便利かなと。
むしろなぜそこが気になるのか知りたいんですが。
542デフォルトの名無しさん:2007/08/21(火) 14:03:17
>>541
>むしろなぜそこが気になるのか知りたいんですが。
半ば個人的な興味だ。無条件にnewしたがるJava出身者が身近にいるもんでね。
# しかも、悪いことにdeleteする癖はついてないと来たもんだw
543513:2007/08/21(火) 14:06:22
>>542
はい、まさに私のことです。
544デフォルトの名無しさん:2007/08/21(火) 14:10:56
W
545デフォルトの名無しさん:2007/08/21(火) 14:16:01
>>542
BCB使いもnewする癖が‥‥
546デフォルトの名無しさん:2007/08/21(火) 15:40:21
OOっぽく書こうとするとそうなるんじゃないかな
C++的にはスマートポインタを使え、ということになるんだが
いずれにせよ常にownershipを意識している必要はあるね
547デフォルトの名無しさん:2007/08/21(火) 16:02:26
ローカルなオブジェクトまでnewを使い始めたらもう、末期症状だ。
# オブジェクトは全てグローバルに管理されているとしたら、それはそれで難だけど。
548デフォルトの名無しさん:2007/08/21(火) 16:03:31
>>545
VCL使ってると確かにnew癖つくなw
549デフォルトの名無しさん:2007/08/21(火) 18:22:21
カウンタ付けて自動でdeleteするclassくらい自作しろ
550デフォルトの名無しさん:2007/08/21(火) 21:25:00
何で既にあるもん作りなおさにゃならんのん・・・
551デフォルトの名無しさん:2007/08/21(火) 22:27:07
boostの名前あげるとboost厨ウゼェとか言われるから
552デフォルトの名無しさん:2007/08/22(水) 00:16:08
std::tr1::shared_ptrならいいのか?
553デフォルトの名無しさん:2007/08/22(水) 04:50:10
俺はboost::intrusive_ptrが好きだが、めんどい人にはめんどいだろうな。
554デフォルトの名無しさん:2007/08/22(水) 10:37:52
もうIUnknown/comdef.hでいいよw
555デフォルトの名無しさん:2007/08/22(水) 12:21:10
int main (int argc, const char * argv[]) {
char string[] ="Hello,World";
char copystring[13];
stringcopy (string,copystring);
printf("%s¥n",copystring);
return 0;
}
void stringcopy (char *buff,char *copy){
int i = 0;
while(buff[i]){
copy[i] = buff[i];
i++;
}
copy[i] = '¥0';
}
でwhile(buff[i]){…}を
for(i=0;buff[i] == 0;i++)
copy[i] = buff[i];
とすると動かないんですけれど、何故ですか?
556デフォルトの名無しさん:2007/08/22(水) 12:25:25
>>555 条件逆にして動くとでも思ってんの?
557デフォルトの名無しさん:2007/08/22(水) 12:29:42
for(i=0;buff[i] == 0;i++){
printf("loop %d\n",i);
copy[i] = buff[i];
}

ってやってみたら、なにか気づくかも
558デフォルトの名無しさん:2007/08/22(水) 12:36:13
わかった!
for(i=0;buff[i] != 0;i++)
ってすると動くぞ!
559デフォルトの名無しさん:2007/08/22(水) 12:49:13
Containerというクラス名をAAというクラス名にしたら、

Container.h:9: an anonymous union cannot have function members
Container.h:26: abstract declarator `<無名 class>' used as declaration
Container.h:26: anonumous 名前空間の集合体は static でなければなりません

560デフォルトの名無しさん:2007/08/22(水) 12:50:45
>>559
すいません、間違えて「書き込む」ボタン押してしまいました。

Containerというクラス名をAAというクラス名にしたら、

AA.h:9: an anonymous union cannot have function members
AA.h:26: abstract declarator `<無名 class>' used as declaration
AA.h:26: anonumous 名前空間の集合体は static でなければなりません

というエラーが出てきたのですが、このエラーの意味が理解できません。
教えてください。
561デフォルトの名無しさん:2007/08/22(水) 13:12:06
エスパー募集するんでもなければコード貼れよ。
562デフォルトの名無しさん:2007/08/22(水) 13:16:23
>>560
最初のエラーだけとってみれば
無名共用体には関数メンバを持つことができない
というエラー。
だから名前だけじゃなくて何か意味または構造が変わるような修正をしてると
思うけど、情報が不足してるのでこれ以上のことは分からない。
563デフォルトの名無しさん:2007/08/22(水) 13:42:53
>>559です。
自己解決しました。

ContainerからAAに名前を変えたときに、

#ifndef CONTAINER
#define CONTAINER
#include "Container.h"
#endif



#ifndef AA
#define AA
#include "AA.h"
#endif

としていたためにエラーが出ていました。

情報の足りない質問で申し訳ありませんでした。m(_ _)m
564デフォルトの名無しさん:2007/08/22(水) 13:51:53
>>563
まあ、解決したのはよかったけど、
そもそものソースの構造がおかしいんじゃないのか?
普通は Container.h の中で全体を

Container.h
-----------------
#ifndef CONTAINER
#define CONTAINER



#endif
-----------------
としてくくるんであって、includeする側では、二重取り込み防止マクロなんて書かないだろ。
565でいびす:2007/08/22(水) 16:08:55
VC++5.0でファイルリードをやってます。

その時、読込んだ値を文字として認識できるか

調べたいのですが、やり方を教えてもらえませんか?

ループしながら、1文字づつ調べたいです。

ちなみに、文字列には半角の日本語と全角の日本語が混在しています。

お願いします。
566デフォルトの名無しさん:2007/08/22(水) 16:23:15
文字として認識ってのがあいまいだけど
_ismbbprint
あたり使えるか調べて見れ
567でいびす:2007/08/22(水) 16:51:43
>>566

_ismbbprintは使えませんでした。

ビルドが通らなかったです。
568デフォルトの名無しさん:2007/08/22(水) 16:55:13
569デフォルトの名無しさん:2007/08/22(水) 16:59:27
なんだってVC++5.0なんてもんを使ってるんだ
570でいびす:2007/08/22(水) 17:04:29
>>569

古いプログラムをカスタマイズする事になったので使ってます。
571でいびす:2007/08/22(水) 17:11:52
>>570

古いプログラムをカスタマイズする事になっても使う必要ありません。
572デフォルトの名無しさん:2007/08/22(水) 17:23:18
いやー、そうとも限らんぞー
573でいびす:2007/08/22(水) 17:24:06
>>570

いやー、そうとも限らんぞー
574デフォルトの名無しさん:2007/08/22(水) 17:25:49
VC++5.0ってSTLがはじめてバンドルされた版だよな
無理やり使ったが、今にして思えばひでえ出来だった
575デフォルトの名無しさん:2007/08/22(水) 19:20:05
new が失敗した時に NULL を返すことを前提にプログラムしてたりするんだろうなあ。
576デフォルトの名無しさん:2007/08/22(水) 19:22:18
new が失敗した時に NULL を返すことを前提にプログラムしてたりしてます。
577デフォルトの名無しさん:2007/08/22(水) 19:42:58
new(nothrow)使えば問題なし
578デフォルトの名無しさん:2007/08/22(水) 19:45:10
newハンドラ使えば問題なし
579デフォルトの名無しさん:2007/08/22(水) 20:49:37
set_new_handler じゃなくて _set_new_handler で、
new ヘッダじゃなくて eh.h で宣言されてたんだっけ。
bad_alloc は VC5 で宣言されてたっけ?
580デフォルトの名無しさん:2007/08/22(水) 21:01:23
>>565
VCだと昔から日本語対応の関数はあって、どこかのバージョンで
_ismbXXXX のようなマルチバイト系関数であることを明示するような
関数名になったはず。
それがVC++5.0かどうか知らないが、でもだから対応する関数はあるはず。

で、ぐぐると以下のサイトに適度に古そうな関数名がならんでいるので
試してはどうだろうか。
ttp://www.geocities.co.jp/SiliconValley-Bay/7437/c/is.htm
581デフォルトの名無しさん:2007/08/22(水) 21:08:46
UTF-8だったりEUC-JPだったりISO-2022-JPだったりする可能性は?
というのは余計なお世話か。
582デフォルトの名無しさん:2007/08/22(水) 21:12:02
文字コードについては>>565が勝手に判断するでしょ。
だいたいVC++5.0の時代のアプリにShift_JIS以外使ってるとも思えないけど。
583でいびす:2007/08/22(水) 21:14:17
VC9使うことにしますた
584デフォルトの名無しさん:2007/08/22(水) 22:09:24
VC++はソースのエンコードすら指定できない糞コンパイラ
585デフォルトの名無しさん:2007/08/22(水) 22:13:51
>>584はVC++はソースのエンコードすら指定できないコンパイラと思っている糞
586デフォルトの名無しさん:2007/08/22(水) 22:20:15
できるの?
clにそれらしいオプションが見当たらないからできんのかと思ってた
587デフォルトの名無しさん:2007/08/22(水) 22:24:34
>>585
どうやって指定するの?
588デフォルトの名無しさん:2007/08/22(水) 22:31:21
>>585
おれもきになる
589デフォルトの名無しさん:2007/08/22(水) 22:40:08
std::vector<foo> hoge という変数があるとして、
これを関数の引数に渡すときはhogeのポインタを渡した方が
hoge自体を値渡しするより動作は速いですか?
590デフォルトの名無しさん:2007/08/22(水) 22:41:32
その通りだが、せっかくC++なのだからリファレンス渡しするか
iteratorを渡せ
591デフォルトの名無しさん:2007/08/22(水) 22:43:22
何すかそれ
592デフォルトの名無しさん:2007/08/22(水) 22:45:33
void hogehoge(std::vector<foo>& rhoge);
593デフォルトの名無しさん:2007/08/22(水) 22:48:03
>>591
void swap_ptr(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; }
void swap_ref(int &a, int &b) { int tmp = a; a = b; b = tmp; }
main() { int m = 1, n = 2; swap_ptr(&m, &n); swap_ref(m, n); }

swap_ref()がリファレンス渡し。
この場合は入出力引数だが、入力だけでいいんならconstつけろ。
594デフォルトの名無しさん:2007/08/22(水) 22:50:19
>>590
サンクスコ
595デフォルトの名無しさん:2007/08/22(水) 22:55:22
>>593
サンクスコ
596デフォルトの名無しさん:2007/08/22(水) 23:12:21
ドトネトのMicrosoft.VisualC.CppCodeProviderってもしかしてclのかわりに
C++コンパイルできんのか
マネージドじゃないと無理かな
597デフォルトの名無しさん:2007/08/22(水) 23:37:33
vector<CHoge>::iterator itr;

このitrが指してる要素の中身のアドレスを取りたいときは
どうやって書けばいいんですか?

CHoge* p_hoge;
p_hoge = &itr;

とか書いたら怒られました。
598デフォルトの名無しさん:2007/08/22(水) 23:40:54
p_hoge = &*itr;
599デフォルトの名無しさん:2007/08/22(水) 23:42:12
CHoge* p_hoge = &*p_hoge;

vectorなら鼻からbegin()/end()を使わず、
&v[0]と&v[0] + v.size()でポインタを得て、
それをイテレータとしても使うという手もある。
600デフォルトの名無しさん:2007/08/22(水) 23:42:39
>>598
出来ました。サンクスコ
601デフォルトの名無しさん:2007/08/23(木) 01:12:40
鼻から悪魔に見えた
602デフォルトの名無しさん:2007/08/23(木) 01:13:32
>>584
エンコードの指定は出来ないが、
BOMが付いてればUnicode LE/BEやUTF-8はそれで判定する。
BOMがなければANSI文字コードとみなしている。
javacやunix系のコンパイラはUTF-8にBOMが付いてると処理してくれないものが多く、
双方で利用しようとすると結構めんどい。
603デフォルトの名無しさん:2007/08/23(木) 01:13:53
悪魔から鼻に見えた
604デフォルトの名無しさん:2007/08/23(木) 01:49:46
>>577
そんなことしてもコンストラクタから飛んでくる例外は止まらないぜ。
605デフォルトの名無しさん:2007/08/23(木) 01:50:20
なんかかっこいい
606デフォルトの名無しさん:2007/08/23(木) 11:14:46
>>602
それなりに移植性考えたらC++のソースにBOMつけるとかありえんわな
で、当然boostのソースにはそんなもんついてないし、一部のヘッダにLatin-1な
人名が入ってるから、VC++8.0でコンパイルすると色々苦情を言ってくんのな
607デフォルトの名無しさん:2007/08/24(金) 22:47:56
C++でHTMLのタグのようなものを使用していたり、『::』のようなものなどを見かけます。
Cには無く、C++では使用出来るようなことを幅広く説明している書籍でお勧めのものはありますでしょうか。
発売年や価格、本自体の厚さなど数多くありすぎて、どういうものを購入すればいいのか分かりません。
近くに本屋さんはあるのですがプログラム関係は少ないですのでネット通販で買おうかと考えております。
それ故、内容が確認できず判断が・・orz
608デフォルトの名無しさん:2007/08/24(金) 22:50:21
HTMLのタグ・・・確かにそう見えんことはないw
609デフォルトの名無しさん:2007/08/24(金) 22:58:28
なんだそりゃ、templateのことか?
あまりに斬新過ぎる見解でワロタ

それはそうと、wxWidgetsのWindowProcって、ウィンドウクラスのインスタンス
見つけるのにわざわざグローバルなハッシュテーブル引いてんだな、なんだこりゃ
せめてWin32ならGetWindowLongPtr()使ってくれよ
なんかそうできない技術的理由があんのか

ATLみたいなサンクに書き換えたら、そんだけで激高速化すんじゃね?
610デフォルトの名無しさん:2007/08/24(金) 23:15:45
>>607
結局この本は必要…通読する対象ではない気がする、字引的にほぼ全部載ってる
http://www.amazon.co.jp/dp/475611895X
611デフォルトの名無しさん:2007/08/25(土) 00:31:15
そんなに高速化するわけない。
いったい一秒に何回メッセージが来て、
グローバルハッシュを引くのに何ナノ秒
余分にかかるというんだ?
612デフォルトの名無しさん:2007/08/25(土) 00:37:41
一秒に何回メッセージが来て、
グローバルハッシュを引くのに何ナノ秒
余分にかかる
613デフォルトの名無しさん:2007/08/25(土) 00:38:15
俺も初めて見たときはタグかと思った。
includeファイルに.hが付いていないことや、標準入出力に<<、>>を使うこと、
「::」の存在など何もかもが新鮮だったあの頃・・・
いまだに初心者の域を抜けられぬ現状orz
614デフォルトの名無しさん:2007/08/25(土) 00:40:43
::は斬新だった。こうゆう記号ってなんか意味を持って決められてるのかな?
615デフォルトの名無しさん:2007/08/25(土) 00:43:25
意味的に : を使いたいけど、ラベルと被るから :: にしたんじゃね?
616デフォルトの名無しさん:2007/08/25(土) 01:44:24
斬新といえばいえなくもないが、: (コロン)は、通常のラベルどころか

・caseのラベル(厳密にいえば通常のラベルと変わらない)
・クラス継承
・コンストラクタの初期化子(?)
・条件演算子の一部

など、よくこれだけ機能を持たせられたと思うものだ。

さらに、ストリームにビットシフト演算子を使うなんて、どこのアホが考えたかと思う。
演算子オーバーロードを見せつけるための演出としか思われない。

さらに、マニピュレータだって?printf系の方がよっぽどうまく素早く整形できるわ。
あんなのC++委員会の遊びにすぎんよ。

もっとも、Cよりは便利なので使わせていただいていますけどね。
617デフォルトの名無しさん:2007/08/25(土) 02:07:29
べ、別に好きでC++を使っているんじゃないんだからね!
Cより便利だから使ってあげているだけなんだからねっ!
618デフォルトの名無しさん:2007/08/25(土) 02:11:22
おっさんが書いてるんだぜ?きめぇ
619デフォルトの名無しさん:2007/08/25(土) 02:11:29
>>616
iostreamとマニピュレータの登場は、標準化委員会の発足より古いはず。

D&Eによれば入出力に演算子を使うのはDoug McIlroy、
マニピュレータはAndrew Koenigのアイデアだそう。

620デフォルトの名無しさん:2007/08/25(土) 04:31:27
printf より優れてる点は型安全な点とポリモーフィズムだな。
printf 風マニピュレータを作らなかったのは C++ の汚点だな。
621デフォルトの名無しさん:2007/08/25(土) 06:21:38
なんで queue には clear() が無いの?
622デフォルトの名無しさん:2007/08/25(土) 10:13:32
ああ、すまん
作るの忘れてた
623デフォルトの名無しさん:2007/08/25(土) 10:32:35
納得した
624デフォルトの名無しさん:2007/08/25(土) 10:37:06
何のqueueにclearが無いの?
625デフォルトの名無しさん:2007/08/25(土) 11:05:14
参照渡しでもらった引数をさらに別の関数に参照渡しするのって
なにか問題ありますか?
626デフォルトの名無しさん:2007/08/25(土) 11:09:57
G++ の STL の queue, priority_queue, stack.
コンテナアダプタには clear() が用意されて無いけど何か理由があるんでしょうか.
627デフォルトの名無しさん:2007/08/25(土) 11:55:33
G++wwwwwwなんという未来言語wwwwww
628デフォルトの名無しさん:2007/08/25(土) 12:00:58
無知発見
629デフォルトの名無しさん:2007/08/25(土) 12:13:16
自己解決しました.
630デフォルトの名無しさん:2007/08/25(土) 12:15:02
>>627
これはひどいwwwwwww
631デフォルトの名無しさん:2007/08/25(土) 12:27:56
>>627=630
そんなエサで俺様が釣られるかクマー
632デフォルトの名無しさん:2007/08/25(土) 13:55:48
>>625
別に問題ない。
寧ろ、参照渡しでもらったものをポインタ渡しするほうがおかしいし、
参照渡しでもらったものを値渡ししてしまったら意味が違ってしまう。
633デフォルトの名無しさん:2007/08/25(土) 15:43:54
何でないんだろうね。
プリンタジョブとかに queue を使ったとして、
ジョブを全部破棄とかすることあるだろうに。
634デフォルトの名無しさん:2007/08/25(土) 16:01:42
1億と2000年前からpopしなさい、というお達しか
635デフォルトの名無しさん:2007/08/25(土) 16:12:47
while(!q.empty()) { q.pop(); }

としろ、ということか。
636デフォルトの名無しさん:2007/08/25(土) 17:14:26
そうだdequeをつかおう
637デフォルトの名無しさん:2007/08/25(土) 17:16:04
q.~queue();
new(&q) std::queue<T>;
冗談だよ、冗談。
638デフォルトの名無しさん:2007/08/25(土) 17:24:21
素直にq=std::queue<int>();と書いてやれよw
639デフォルトの名無しさん:2007/08/25(土) 17:40:57
queue のソースを書き換えればいいんじゃね?
640デフォルトの名無しさん:2007/08/25(土) 17:47:21
queue を継承した my_queue を(ry
641デフォルトの名無しさん:2007/08/25(土) 18:26:24
(x = 1) = 2;

これ、Cだとエラーなんだが、C++ではコンパイルできる
何で?
642デフォルトの名無しさん:2007/08/25(土) 19:11:39
x = 1の結果が、Cは右辺値、C++は左辺値と定められているから。
643デフォルトの名無しさん:2007/08/25(土) 19:19:25
>>642
やっぱりそういうこと?
ストラウストラップの本とK&RとCの規格書調べたんだけど、それらしい記述を
見つけられなかったんだけど、どこかに明記されている?
644デフォルトの名無しさん:2007/08/25(土) 19:26:25
=演算子が参照を返すからじゃね?
645デフォルトの名無しさん:2007/08/25(土) 19:51:03
>>643
642じゃないけど

C言語はJIS X 3010の.5.16代入演算子
代入式は、代入後の左オペランドの値を持つが、左辺値ではない。

C++は手元にあるのが15年前のARM日本語版しかないけど、5.17代入演算子
代入演算子の結果は、代入が行われた後に左のオペランドに格納してある値である。従って、結果も左辺値である。

Cの規格書って何を調べたの?
646デフォルトの名無しさん:2007/08/25(土) 19:54:07
647デフォルトの名無しさん:2007/08/25(土) 19:58:03
>>645
脳内
648デフォルトの名無しさん:2007/08/25(土) 20:23:22
X3014にも5.17 1節目の最後に「結果は,左辺値とする。」と書いてある。

>>644
型と右辺値左辺値は別の段階の話。
649デフォルトの名無しさん:2007/08/25(土) 20:33:34
三項演算子で変数返すコード書いて左辺値にしても大丈夫
650デフォルトの名無しさん:2007/08/25(土) 22:36:12
たくさんのレスthx

>>645
同じ規格書の同じとこ読んだんだけど、

代入式:
 条件式
 単項式 代入演算子 代入式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ってなってたから、代入式ってのは上の3行目(波線部分)の代入式
のことを言ってるのかと勘違いしてた

単項式 代入演算子 代入式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これ全体を代入式と言ってるのか
とすれば x = 1 という代入式の結果は左辺値ではないということに
なるか

代入式は、代入後の左オペランドの値を持つが、左辺値ではない
と書いてあるけど、代入式の結果は と書いてくれたほうがクリアになるなあ
~~~~~~~~~~~~~~~~~
BNF記法が分かってなかった

>>648
なるほど
C++のほうはEffectiveにも参照を返すと書いてあるから
理解できた
C++の規格書も買うかな
651デフォルトの名無しさん:2007/08/25(土) 22:42:13
禿の本がまだなら規格書よりそっちを先に読んだ方がいいよ
652デフォルトの名無しさん:2007/08/25(土) 22:46:24
>>650
知ってるかもしれないが、JISの規格書なら以下で参照できる。

日本工業標準調査会
ttp://www.jisc.go.jp/index.html
C JISX3010
C++ JISX3014

検索できないのは最悪だけど。
653デフォルトの名無しさん:2007/08/25(土) 22:49:36
>>651
調べ物するときは同じ内容について
色々な本に目を通してるんだけど、
結局、規格書に明記されてると確信に変わる
んで安心できる

禿の本ってEffectiveのこと?
結構高度だから必要に応じて関連する項目を
潰していこうと思ってる
654デフォルトの名無しさん:2007/08/25(土) 22:52:34
>>652
最初、Cの規格書もそこを見てたんだけど
検索できなくて疲れるから買ってしまった
655デフォルトの名無しさん:2007/08/25(土) 22:59:44
禿本 : Bjarne Stroustrup著 プログラミング言語C++
656デフォルトの名無しさん:2007/08/25(土) 23:52:51
>>650
代入式の結果が左辺値か右辺値かは、構文から
決定できる問題ではないので、構文を記した部分は関係ないぞ。
657デフォルトの名無しさん:2007/08/26(日) 03:47:09
class Hoge{private:vector<CFoo> m_vecFoo;};

Hoge::Hoge(){
//落ちる場合1
CFoo foo = CFoo(age,sage);
m_vecFoo.push_back(foo);
//落ちる場合2
CFoo foo;
foo = CFoo(age,sage);
m_vecFoo.push_back(foo);

//落ちない場合
CFoo* foo = new CFoo(age,sage);
m_vecFoo.push_back(*foo)
}

あるクラスCFooについて、newでインスタンスを生成した場合は落ちないんですが、
newを使わないで直接生成した場合(そういうのをなんていうのか知りませんが)
push_backの行で落ちてしまいます。一応どの場合もコンパイルは通ってます。
原因がまったく分からないのでエスパーしてください^^;お願いします。

デバッグ結果:xutilityファイル内↓
inline void __CLR_OR_THIS_CALL _Container_base::_Orphan_all() const
{ // orphan all iterators
_Lockit _Lock(_LOCK_DEBUG);
if (_Myfirstiter != _IGNORE_MYITERLIST)
{
for (_Iterator_base **_Pnext = (_Iterator_base **)&_Myfirstiter;
*_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter)
(*_Pnext)->_Mycont = 0;                  ←この辺でとまってる模様
*(_Iterator_base **)&_Myfirstiter = 0;
}
658657:2007/08/26(日) 03:53:14
//さらにもう一個、落ちる場合
CFoo foo(age,sage);
m_vecFoo.push_back(foo);

ちなみに、push_backをコメントアウトして飛ばせば一応落ちないで動いてるようなので
落ちているのはpush_backの行みたいです。
659デフォルトの名無しさん:2007/08/26(日) 05:25:40
その「あるクラス」がどんなものなのか説明しろよ。
ちゃんとコピーコンストラクタでディープコピーしてるかとか。
660デフォルトの名無しさん:2007/08/26(日) 09:15:04
>>659
すいません。力尽きて寝てました。
実際のCFooはでかいのでそのまま貼ることはできませんが、
・コンストラクタの引数にポインタ型がある
・メンバにもポインタ型がある
・引数つきで生成されること前提なのでデフォルトコンストラクタとか作ってない
・唯一書いてある引数ありのコンストラクタは、メンバを初期化リストで初期化せずに
コンストラクタの中身で初期化してる
・単純なGet〜みたいな関数はヘッダに直接書いてある

この辺がなにか関係してるでしょうか?
661デフォルトの名無しさん:2007/08/26(日) 09:36:45
レスに間が空いててもいいが、わざわざ寝てましたなどと言わなくていい
662デフォルトの名無しさん:2007/08/26(日) 09:39:42
レスに間が空いててもいいし、わざわざ寝てましたなどと言ってもいい
663デフォルトの名無しさん:2007/08/26(日) 09:43:44
>>660
>659の質問に答えたまえ。
コピーコンストラクタを設けていないのなら、C++を初歩から勉強しなおせ。
664デフォルトの名無しさん:2007/08/26(日) 09:51:36
ディープコピーって何ですか?
665デフォルトの名無しさん:2007/08/26(日) 10:28:29
本読め
Effective C++とかEffective STLとか
666657:2007/08/26(日) 10:35:13
なんかポインタのメンバとかもってたりするクラスは
コピーコンストラクタなるものをきちんと実装しないと
値渡ししたりするときに問題が発生しやすいらしいので
m_vecFooにはポインタを渡すことにしました。
667デフォルトの名無しさん:2007/08/26(日) 10:38:42
参照を参照のままコピーするのが浅いコピー
参照先を複製してコピーするのが深いコピー
668デフォルトの名無しさん:2007/08/26(日) 10:52:14
コピーコンストラクタを実装してなかったことが原因な気がしてきてはいるのですが
なぜpush_backの段階で落ちてるんでしょうか?
二重でdeleteされてるわけでもないし、理屈がわかりません。

669デフォルトの名無しさん:2007/08/26(日) 10:52:28
ディープキスって何ですか?
670デフォルトの名無しさん:2007/08/26(日) 10:56:26
保育園でするもの
671657:2007/08/26(日) 10:59:13
>コピーコンストラクタなるものをきちんと実装しないと
>値渡ししたりするときに問題が発生しやすいらしいので

訂正ですが、ポインタのメンバを持ってるクラスの
コピーコンストラクタをきちんと実装してない場合、
”値渡しする段階”で問題がでるのではなくて、
”後始末の段階”で二重のdeleteが起きたりするので危険なんですよね?

なんでpush_backしただけで落ちるんでしょうか?
どんな可能性が考えられますか?
672デフォルトの名無しさん:2007/08/26(日) 11:10:13
とりあえず、デバッガで
本当に push_back の行で落ちてるのかどうか確認してみた方がいいんじゃない?
673デフォルトの名無しさん:2007/08/26(日) 11:13:40
>>671
CFoo foo = CFoo(age, sage);
CFoo bar = foo;

とりあえずこのコードで落ちたりしないか?
674デフォルトの名無しさん:2007/08/26(日) 11:23:30
あと、

>CFoo foo;
>foo = CFoo(age,sage);

これをちゃんと動かしたいなら、代入演算子も定義しとけ。
675デフォルトの名無しさん:2007/08/26(日) 11:38:52
>>672>>673
CFoo foo = CFoo(age, sage);
CFoo bar = foo;

としたらpush_backをコメントアウトしても落ちました。
ってことはやっぱりコピーコンストラクタなるものが
きちんと実装されてないのが原因っぽいです。

でも実装してないときはコンパイラが勝手に作ってくれるんじゃないんですか?
で、勝手に作られたものでは”破棄時”に問題がでるので、
自分でうまく実装しないと危険ってだけなんじゃないんでしょうか?
676デフォルトの名無しさん:2007/08/26(日) 11:39:52
>>671
それはもちろんだが、その前に、解放済みの動的資源を参照するオブジェクト
ができてしまうことがマズイだろ
677657:2007/08/26(日) 11:43:25
あぁ、なんかコピーをした段階で落ちてるんじゃなくて、
一時オブジェクトが解放される段階で落ちてるみたいです。
678デフォルトの名無しさん:2007/08/26(日) 11:44:10
>>656
式の結果が左辺値になるか右辺値になるかは構文ではなく
言語の仕様ということか
それなら黙って認めるしかないから明白だ
679デフォルトの名無しさん:2007/08/26(日) 11:47:02
>675
>自分でうまく実装しないと危険ってだけなんじゃないんでしょうか?

その「危険」の内容が、落ちるってことだ。
680デフォルトの名無しさん:2007/08/26(日) 11:49:39
誰かスレッドについて教えてくれ。

自プロセスのスレッド数を
CreateToolhelp32Snapshot、Process32First、Process32Next
使ってスレッド数を出力するだけのプログラムで
なんでcntThreadsの値が8になるんだ?
CreateThreadとかしてないのに・・・
681デフォルトの名無しさん:2007/08/26(日) 12:00:10
知らんけど、システム的なDLLの誰かが作ったスレッドなんじゃない?
682デフォルトの名無しさん:2007/08/26(日) 12:09:32
>>680
お前がアホだから
683デフォルトの名無しさん:2007/08/26(日) 12:11:02
純粋に自分の作ったスレッドの数のみを知る方法ってないのかな?
684デフォルトの名無しさん:2007/08/26(日) 12:11:39
>>680
せめて
ttp://www.microsoft.com/technet/sysinternals/default.mspx
あたりのツール使って、実際のスレッド数をまず確かめてはどうか?
685デフォルトの名無しさん:2007/08/26(日) 12:11:47
ある
686デフォルトの名無しさん:2007/08/26(日) 12:11:53
自分で作ったのなら自分で管理して数えればいいじゃん
687デフォルトの名無しさん:2007/08/26(日) 12:27:41
ProcessWalkerを使ってみたんだが、やはり複数立ち上がってる・・・

確かに自分で数えればいいんだが、
パフォーマンスログでスレッド数見ると
自分で立ち上げたスレッド数以上立ち上がってて
たまに増減するんだよね。
688デフォルトの名無しさん:2007/08/26(日) 12:28:33
だから何だ?チラシの裏にでも書いてろ。
689デフォルトの名無しさん:2007/08/26(日) 12:36:37
そりゃ裏でスレッドを作られったって、それはWin32の勝手だろうに。
690デフォルトの名無しさん:2007/08/26(日) 13:03:42
C/C++の文法自体は大体理解できたが、大規模なプログラムの作り方が
さっぱり分からん

大規模なものだと、だいたいフォルダごとに纏められていて総数数百、数千のファイルがあるが
どのような感じでそんな構造をつくっていけばいいのかさっぱりです。

Webにはどこも同じような、内容ばかりポリモを動物を使っての説明w

結局みんな大規模なものはかけないのかな?
691デフォルトの名無しさん:2007/08/26(日) 13:07:39
はは
692デフォルトの名無しさん:2007/08/26(日) 13:09:43
>>690
大規模っつーことで複数人での開発を想定するが
個人的にはプロセスやDLL等の境界で切ってあるほうがずっとやりやすかったかな
切らないんなら、適切にスタブを作るのが常套かと思う
Facadeなどの下に隠すのも良い
画面がいっぱいあるだけの良くある業務系なら、それぞれの画面に飛べるように
なっていて、それぞれが独立していれば概ね問題は無い
まあ所詮ケースバイケースで王道は無いだろ
「銀の弾丸はない」のだと知れ
693デフォルトの名無しさん:2007/08/26(日) 13:10:03
大規模なプロジェクトと動物ポリモとどういうつながりが?
694デフォルトの名無しさん:2007/08/26(日) 13:20:38
>>687
オーディオデータとか動画扱ってる場合とかWindowsが勝手にスレッド作る場合はよくあるお
695デフォルトの名無しさん:2007/08/26(日) 13:25:54
>>675
>でも実装してないときはコンパイラが勝手に作ってくれるんじゃないんですか?

各メンバのコピーコンストラクタを呼び出す、というコピーコンストラクタを作ってくれる。
同様に代入の場合は各メンバに対しoperator=を呼ぶ。
メンバにポインタがある場合ポインタがコピーされるだけで、ポインタが指す先は複製されない。
696デフォルトの名無しさん:2007/08/26(日) 13:30:15
まーメンバがコピーコンストラクタが上手く動くクラスとポインタ以外の
基本型だけならデフォのコンストラクタで問題ないことも多い
ポインタ生のままで保持せずにboost::shared_ptrでくるんだりしてれば
適切に参照カウント処理してくれる

そうでないならちと考えろってこった
697デフォルトの名無しさん:2007/08/26(日) 13:31:27
>>693
私が言いたいのはWebで恰もC++知ってますみたいな講座書いてる奴の大半は
動物ポリモみたいなことかいてるだけで実用的なことは一切出来ないのかな?

と思っただけですよ
698デフォルトの名無しさん:2007/08/26(日) 13:33:05
しらねぇ
つーかどうでもいい

動物ポリモは確かにくだらねぇしオリジナリティはねぇな
699デフォルトの名無しさん:2007/08/26(日) 13:37:16
初心者の為に端折って説明してるだけなんだよ
700デフォルトの名無しさん:2007/08/26(日) 13:39:50
あれで初心者が解るのか疑わしい
701デフォルトの名無しさん:2007/08/26(日) 13:42:37
わからなかった?
精進するよ
702デフォルトの名無しさん:2007/08/26(日) 13:44:29
>>697
動物ポリモみたいなこと書いてないで君もさっさと大規模なもの作れる頭持つか諦めなさい。
703デフォルトの名無しさん:2007/08/26(日) 13:50:52
そうだね
スレ汚しすまそ
704デフォルトの名無しさん:2007/08/26(日) 14:26:55
逆に実用的でコーディング時の仕様に依存しないポリモーフィズムってなに
705デフォルトの名無しさん:2007/08/26(日) 14:30:57
まだ、いってんの?

C++ 講座
で検索してみなよ

どこもおなじようなことしか書いてないからw

706デフォルトの名無しさん:2007/08/26(日) 14:35:06
そりゃC++ 講座だもん
707デフォルトの名無しさん:2007/08/26(日) 14:41:55
偉そうに書いてるわりには、実際に作ったソフトを公開してる人いないよね

実際はC++の文法だけしか理解できていない可能性高し



708デフォルトの名無しさん:2007/08/26(日) 14:42:57
だからなんだよ?どうでもいいだろ?
チラシの裏にでも書いてろよ。
709デフォルトの名無しさん:2007/08/26(日) 14:45:45
有能だけどそこまで親切じゃない人もいるんだよ
710デフォルトの名無しさん:2007/08/26(日) 14:54:36
>>707はアホそうに書いてるだけで、実際に作ったソフトを公開してないよね

実際はC++の文法ですら理解できていない可能性高し
711デフォルトの名無しさん:2007/08/26(日) 14:56:11
大規模な開発なんて経験つんでやっていくものじゃないの
Webのしかも言語自体の解説に何期待してんだか
712デフォルトの名無しさん:2007/08/26(日) 14:57:08
>>707
遊びの延長や使い捨てや自分専用で作るのと
公開するソフトを作るのではかかる手間が桁違いだろ
713デフォルトの名無しさん:2007/08/26(日) 15:06:54
公開ライブラリを作ってる人達の実力は底が知れない
具体的にいうとboost関係の人達
714デフォルトの名無しさん:2007/08/26(日) 15:23:49
知れるかどうかって話で言うと、何も公開していない人のほうが底が知れないね。
715デフォルトの名無しさん:2007/08/26(日) 15:25:40
>>713
そうか?
以前正規表現を使いたくてboostを使ったが速度でイマイチだったから
自前で実装したけど?
716デフォルトの名無しさん:2007/08/26(日) 15:30:47
>>715
そうか?
以前正規表現を使いたくてお前のを使ったが速度でイマイチだったから
自前で実装したけど?
717デフォルトの名無しさん:2007/08/26(日) 15:32:20
どうでもいから出て行ってくれないかな。
718デフォルトの名無しさん:2007/08/26(日) 16:38:43
boostはC++の実験場だから
チューニングはしてないよ
719デフォルトの名無しさん:2007/08/26(日) 17:18:01
チューニングに関する実験でもチューニングしてないよ
720デフォルトの名無しさん:2007/08/26(日) 18:59:25
boost::uniform_01< boost::mt11213b, float > rnd( boost::mt11213b( (unsigned long)(time(0)) ) );
oven::random_shuffle( vec, _1 * rnd() ); // std::random_shuffle( vec.begin, vec.end, _1 * rnd() );
std::random_shuffleの乱数生成関数オブジェクトにboost::uniform_01を使ってみたんですが
なんかうまくばらけてくれませぬ
というわけでstd::random_shuffle用のいい乱数発生方法を教えてください
721デフォルトの名無しさん:2007/08/26(日) 20:48:44
Boostなんてたいしたこと無いだろ
これが一番典型的な例

____              progress_
|← reject|  boostの中の人  display   ユーザー
. ̄.|| ̄ ̄        ┗(^o^ )┳(^o^ )┳(^o^ )┛≡=-
  ||            ┏┗  ┗┗  ┏┗ ≡=-
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
722デフォルトの名無しさん:2007/08/26(日) 20:58:05
それがboostの典型なら、boostの中でrejectされたりしないだろう。
boostの中で平均的に評価されているものが、他との比較でreject扱いになって
初めて「boostなんてたいしたことない」になる。
723デフォルトの名無しさん:2007/08/26(日) 22:35:06
progress.hppには
まるで役に立たないprogress_displayと
すごく役に立つprogress_timerが同居しています
そんな兄弟いますよね
724デフォルトの名無しさん:2007/08/26(日) 23:18:30
Visual Studio .NET 2003環境の問題について教えてください。

アラビア語リテラルの入った.ccのソース(MySQL)のコンパイルが出来ません。
 error C3209: '・ァル館・' : Unicode 識別子は現在サポートされていません。
というエラーが表示されます。(ソースUTF8の場合)

秀丸でShift-JISにしたり、UTF8にしたりしたのですが、どちらもエラーでした。
VSのエディターではShift-JISの場合、アラビア語が文字化けもなく表示されます。
(UTF8では文字化けして表示されます。)

2時間くらいググッても分かりませんでした。
この問題の解決法を教えてください。
エロイ人お願い! 
725デフォルトの名無しさん:2007/08/26(日) 23:21:48
>>724
VC が UTF-8 を認識できてないんだろ。どうやるのか知らんけど。
Shift_JIS でアラビア語が扱えないのは確実。
726デフォルトの名無しさん:2007/08/26(日) 23:26:42
英語版に言語パック入れたら?
727デフォルトの名無しさん:2007/08/26(日) 23:29:28
BOMつきUTF-8ってVS2003で食えたっけ
VS2005なら大丈夫のはずだが

リテラルはワイド文字なのか?
そうだと仮定すると、ソース修正して
16進でUnicodeのコードポイントを記述してやるのが一番手早い
Perlか何かを使えば簡単だろ
728724:2007/08/26(日) 23:45:35
素早いレス、感謝感激です。

>>725
アドバイス、d。
どこで聞けば分かりそうですか?ご存じでしたら教えてください。
オプションやらヘルプやら一通り見てみたのですが、分かりませんでした。

>>726
ちょっと難しそうです。d。

>>727
> BOMつきUTF-8ってVS2003で食えたっけ
BOMつきかどうかを確認する方法をご存じでしたら教えてください。

> リテラルはワイド文字なのか?
リテラルはワイド文字です。
確かにソース修正が一番簡単ですね。
ただ、ソースの下の方を見てみたら、ヒンディ語・ヘブライ語・・・と限りなく続いてますので、結構大変かも。
729デフォルトの名無しさん:2007/08/26(日) 23:51:04
>>728
BOMを確認したければファイルの先頭をバイナリエディタで見てみろ。
BOMつきでなければ、VS2005でも食えない。

ワイド文字リテラルなら、話は簡単だな。
手でやらずに簡単なフィルタープログラムを書いて、機械的に変換してしまえ。
そんなら多国語でも関係ない。
730デフォルトの名無しさん:2007/08/26(日) 23:55:03
助けて!以下のプログラムでメモリがおかしくなるお!
分母150 試行回数100000で繰り返すとなるお!
助けて!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int i,j,dom,cnt,max,ret,k;
int ch;
int array[128];
int over, less;
long int times;

i = j = k = dom = cnt = times = max = 0;

printf("input dominator >");
scanf("%d", &dom);
printf("input times >");
scanf("%ld", ×);
731730続き:2007/08/26(日) 23:55:39
LOOP:
k = 0;
over = less = 0;
while(getchar() != '\n');
printf("dominator = %d times = %d\n", dom, times);

sleep(1);
srand(time(NULL));
for(i=0; i<times; i++){
cnt++;
ret = rand() % dom;
if(ret == 7){
array[k] = cnt / 100;
array[k]++;
k++;
array[k] = -1;
printf("%d\n", cnt);
if(cnt > max){
max = cnt;
}
if(cnt > dom){
over++;
}
else{
less++;
}
cnt = 0;
}
}
732730続き:2007/08/26(日) 23:56:15
for(i=0; array[i] != -1; i++){
for(j=0; j<array[i]; j++){
printf("*");
}
printf("\n");
}

printf("MAX = %d\n", max);
printf("OVER = %d ELSE =%d\n", over, less);
printf("%d/%d\n", over+less, times);
printf("%f\n", times / (double)(over + less));
printf("Retry ? (y/n) >");
ch = getchar();
if(ch == 'y' || ch == 'Y'){
goto LOOP;
}

return 0;
}
733730:2007/08/26(日) 23:56:54
このままじゃパチンコで勝てないお!
助けてお!
734デフォルトの名無しさん:2007/08/27(月) 00:00:33
こんなプログラム書いて何になるの?
735デフォルトの名無しさん:2007/08/27(月) 00:01:41
736724:2007/08/27(月) 00:01:41
>>729
ありがd。見てみたら、BOMついてませんね。
付けてオンパイルしてみます。ノシ
737デフォルトの名無しさん:2007/08/27(月) 00:04:27
>>730
ざっとみだけど

>int array[128];

が足りてないだけじゃないの?
738デフォルトの名無しさん:2007/08/27(月) 00:06:54
>>730
メモリをケチるな!
array[128] → array[2048]
期待値は (1/150)*100000=666.67
739730:2007/08/27(月) 00:10:46
できたおおおおおおおおおお!
これで勝てるお!
740730:2007/08/27(月) 00:11:55
期待値の詳細希望
741730:2007/08/27(月) 00:14:06
なるほどお!ボヌスが666.67回くるってことかお!
ありがとお!
742730:2007/08/27(月) 00:17:43
やっぱりすごいお
さっぱりわからなかったのに
すぐ回答がきたお
どうしたらそうなれるかお?
743デフォルトの名無しさん:2007/08/27(月) 00:20:17
>>742
毎日2時間、電灯のヒモでボクシング。これを1年続けること。
744デフォルトの名無しさん:2007/08/27(月) 00:21:02
みんな半年から1年ぐらい
アーバンチャンピオンと
スパルタンXで鍛えてるはず
745デフォルトの名無しさん:2007/08/27(月) 00:26:58
>>740
100000回×(1/150)=666.67回 kがインクリメントされるわけだから
array[k]はarray[668]って式で参照される可能性があるわけで
array[128]と宣言したのではあきらかに足りないってことなんではないかと>期待値云々
こういう実行時に入力される値に依存するような大きさの配列はメモリの動的確保で扱うべきだとは思うけどね
746724:2007/08/27(月) 01:39:46
>>736
ファイルの先頭にBOM(というか、ZERO WIDTH NON-BREAKING SPACE。ef bb bfの3バイト)を付加したら
無事、オンパイルできました。
747デフォルトの名無しさん:2007/08/27(月) 01:42:28
>>746
いや、ファイル先頭にある場合、つまりBOMである限り、
それはBOMであってZERO WIDTH NON-BREAKING SPACEとは言わないんだ。
748724:2007/08/27(月) 02:02:45
>>747
添削ありがd。

WikipediaのUTF-8(http://ja.wikipedia.org/wiki/UTF-8)のところに記述がありました。
> プロトコルが常にUTF-8である事を強制しているものである場合はBOMを禁止するべきで、
> この場合ファイル先頭のBOMは "ZERO WIDTH NO-BREAK SPACE" と見なされる。
> 逆にプロトコルがそれを保証しない場合BOMは禁止されずファイル先頭のそれはBOMと見なされる。(http://tools.ietf.org/html/rfc3629#section-6

2文目ですね。
749デフォルトの名無しさん:2007/08/27(月) 10:40:28
www.vista-osx.com/kensaku.htm
750デフォルトの名無しさん:2007/08/27(月) 15:06:25
ヘッダファイルの書き方について質問です。

自分で複数ファイルのプログラムを作ったとき、
たとえば、mian.c , sub.c , sub.h という3つのソースファイル
からなるプログラムの場合、
$ gcc main.c sub.c
としますよね。

でも#include<stdio.h>などでは、
stdio.hにはプロトタイプ宣言しか無くて、printf( );とかの定義が無いはずなのに
$ gcc main.c stdio.c
などとしなくてもいいのはなぜですか?
751デフォルトの名無しさん:2007/08/27(月) 15:09:05
パス通ってるからじゃないん?よーわからんけど
752デフォルトの名無しさん:2007/08/27(月) 15:11:52
引数で指定しなくてもリンクされるようになってるから。
753デフォルトの名無しさん:2007/08/27(月) 15:17:52
C++のvector配列って結構処理重いんでしょうか。
10MB前後のテキストデータをmallocしたポインタ読み込んで、区切り文字単位に編集・分解していった場合と、
stringに読み込んでからvector<string>に編集・分解していった場合で、
処理時間が前者が約25秒、後者が約60秒掛かったのですが、こんなもんなんですかね。
754デフォルトの名無しさん:2007/08/27(月) 15:28:49
コードplz
755デフォルトの名無しさん:2007/08/27(月) 15:34:02
vector に malloc なんか使ってるから・・・
756デフォルトの名無しさん:2007/08/27(月) 15:36:15
>>753
vector<string>版も意外に速いなw
STLコンテナは基本的に値を保持するんで、その場合はstringのインスタンスを
コピーしまくることになる
ポインタだけで操作すれば格段に速いのは当たり前だ

vector<>が遅いというよりはメンバのコピーに時間がかかっているだけなので、
そこが性能のボトルネックになっているのなら、
vector<char*>でポインタを保持するなり
vector<int>でインデクスを保持するなりするとよいだろう
757753:2007/08/27(月) 15:45:43
>>756
なるほど、言われてみればインスタンスのコピー云々で納得です。
御指導ありがとうございましたm(_ _)m
758デフォルトの名無しさん:2007/08/27(月) 16:01:38
質問です。
i = (char*)malloc(sizeof(char) * 256);
でメモリ領域を確保したのですが、256バイト以上使用することができます。
なぜでしょうか?教えてください
759デフォルトの名無しさん:2007/08/27(月) 16:03:02
>>758
たまたま
760デフォルトの名無しさん:2007/08/27(月) 16:07:29
>>758
本来アクセスしちゃいけないところにアクセスしてるだけ
CはC#などとは違ってそんな事しても例外は発生しないし
たまたま何のエラーも出ない事がある
だからってそんな事やってたらきっとそのうちクラッシュするよ
761デフォルトの名無しさん:2007/08/27(月) 16:10:57
>>758
一般的にmallocは、予めOSから確保しておいたでっかいメモリの塊から
必要な分だけを切り分けて自身の戻り値にしている(残りは次回以降のmallocなどで使う)。
理由は、OSのメモリ確保処理が大抵大容量の確保に向いていて小回りが利かないから。

そういうわけでその256バイトの後ろにも、OSから見れば
アプリケーションが確保した(実態はmallocが抱えていたり
他のmallocなどの呼出で使われている)メモリ空間が広がっている。

だから一見256バイトの後ろも読み書きできるように見えるというわけ。
762デフォルトの名無しさん:2007/08/27(月) 16:16:24
758です。
勉強になりました。
ありがとうございます。
763デフォルトの名無しさん:2007/08/27(月) 16:19:05
運が悪いと範囲外に書き込んだときに他の変数の値書き換えたりすることがあるから範囲外アクセスはNGよ
764デフォルトの名無しさん:2007/08/27(月) 20:10:51
質問させて頂きます。
現在UNIX環境でコンソールベースのプログラムを組んでいるのですが
CUIからメニューの操作、カーソル操作の為のエスケープシーケンスに悩んでおります
コンソールベースのプログラム自体あまり組んだ事ないのですが
CUIからメニュー操作というのは可能なのでしょうか?
765デフォルトの名無しさん:2007/08/27(月) 20:16:05
環境によるかもだけど、ncursesとか調べてみると幸せになれるかもしれない。
766デフォルトの名無しさん:2007/08/27(月) 20:27:24
>>764
こんなのでいいなら簡単にできるけど
エスケープシーケンスの設定が済んでいることが前提
#include <stdio.h>

int main(void){
int i, x, y;
printf("\x1b[2J"); // clear screen
for(i=1;i<=9;i++){
x=i;
y=(i%2)+1;
printf("\x1b[%d;%dH", y, x); // cursor move
printf("%d", i);
}
return 0;
}
767デフォルトの名無しさん:2007/08/27(月) 20:31:35
malloc使う奴はクソだとか言われる事が増えてきてる中、このスレは落ち着きますね…
768デフォルトの名無しさん:2007/08/27(月) 20:34:39
まじで?そんなこと言う奴がいるのか・・・
769デフォルトの名無しさん:2007/08/27(月) 20:52:36
vector型の配列をランダムに並び替えるには自前で作るしかないですかね?
770デフォルトの名無しさん:2007/08/27(月) 20:56:12
std::random_shuffle だっけ
771デフォルトの名無しさん:2007/08/27(月) 21:25:47
>>770
ありがとうございます
772デフォルトの名無しさん:2007/08/27(月) 22:44:37
>>765-766
有難うございます。
ncursesについて詳しく調べて見たいと思います。

エスケープシーケンスからの操作なのですが、設定とはどう行うかご教授願えないでしょうか?
検索しても見つからなくてorz
773デフォルトの名無しさん:2007/08/27(月) 22:51:24
>>772
UNIX環境なら使うターミナルを選ぶだけかな…
MS-Windows環境なら ansi.sys を読み込ませる

774デフォルトの名無しさん:2007/08/27(月) 22:53:34
>>772
TERM環境変数
普通はシェルの初期化スクリプトなどで設定するが、
普通にシェルを操作できてるんなら、まあ大丈夫だろう
775デフォルトの名無しさん:2007/08/27(月) 23:01:57
>773
えー。それって、Windows環境で、DOS-Exeを動かす場合だけでそ。
776デフォルトの名無しさん:2007/08/27(月) 23:12:20
>>773-775
有難うございます。
凄く勉強になります。
ご教授して頂いた所を詳しく調べてみたいと思います。
777デフォルトの名無しさん:2007/08/27(月) 23:48:42
>>775
bashとかでもあるよ。
778デフォルトの名無しさん:2007/08/27(月) 23:54:03
だれか俺にbashとansi.sysの関係を教えてくれ。
779デフォルトの名無しさん:2007/08/27(月) 23:58:10
すまん。レス番見間違えた。
780デフォルトの名無しさん:2007/08/28(火) 03:00:09
プログラム初心者なのですが,助けてください.
VC++2005Express,WinXP Pro環境で,
コンソールアプリケーション上でWM_TIMERを使いたいのですが,
調べてみると不可視ウィンドウを作れば良いと書かれていました.
そこで,以下のようなウィンドウを生成しているのですが,うまく動きません.
ご教授いただけないでしょうか?

HWND Create(){
WNDCLASS wcHide;
HWND hwndHide;
// ウィンドウクラス
wcHide.style = 0;
wcHide.lpfnWndProc = (WNDPROC)MWndProc;
wcHide.cbClsExtra = 0;
wcHide.cbWndExtra = 0;
wcHide.hInstance = (HINSTANCE)GetModuleHandle(NULL);
wcHide.hIcon = NULL;
wcHide.hCursor = NULL;
wcHide.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcHide.lpszMenuName = NULL;
wcHide.lpszClassName = "";

hwndHide = CreateWindow ( wcHide.lpszClassName, "", WS_DISABLE, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, wcHide.hInstance, 0);
}
781780:2007/08/28(火) 03:01:24
LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wp, LPARAM lp)
{
switch ( iMessage ) {
case WM_CREATE:
SetTimer(hWnd , 5000 , 1 , NULL);
return 0;

case WM_TIMER:
printf("test\n");
return 0;
}
return 0;
}

とりあえず,5秒毎に"test"を出力できるようにしたいのですが,
よろしくお願いします.
782デフォルトの名無しさん:2007/08/28(火) 03:04:49
783780:2007/08/28(火) 03:20:40
正しくはご教示でしたか
間違えて使っていました.ありがとうございます.

>うまく動かないってのはどんな状況?
何も表示されずに終了してしまいます.
以下を試してみましたが何も表示されませんでした.
・main文でCreate()を呼び出した後にwhile(1)やsleepをはさんでみる
・WndProc()関数の最初にprintfでチェッカーをはさむ

よろしくお願いいたします.
784デフォルトの名無しさん:2007/08/28(火) 03:23:52
>>780
メッセージループはあるか?
なければググれ
785デフォルトの名無しさん:2007/08/28(火) 03:32:35
ウィンドウクラスの名前が無い。
RegisterClassしてない。
SetTimerの第2引数と第3引数が逆とか、
ウィンドウプロシージャで自分で処理しないメッセージをDefWindowProc()に渡してない。
786780:2007/08/28(火) 03:40:59
>>784
ありがとうございます.
ありません.早速ググってみました.

>>785
ありがとうございます.
調べてみます.
787780:2007/08/28(火) 04:42:09
>>784
>>785

ありがとうございました.
ご指摘の通り,メッセージループ,RegisterClass,DefWindowProc()
全てを書いたところ,意図した動きをしました.
お世話になりました.
788デフォルトの名無しさん:2007/08/28(火) 05:41:34
ちょっと質問。
・外部ハードからデータを所得(配列に格納)し、そのデータ長に数値計算を施し結果を画面上に表示させたい

この動作で、随時変化しているデータ長の所得・数値計算・グラフ描画、
この3つを同時?(なるべくリアルタイムにあるデータ長の数値計算結果をグラフ描画)したいんだけど、
こういう場合ってどんな風に処理・流れにさせればいいの?

例えば、マルチスレッド(出来るかどうかよくわかりませんが)を使って

データ所得→計算→描画
       |
        →データ所得→計算→描画
                 |
                 →データ所得→計算→描画
こんな感じで計算させつつデータを所得。描画させつつ計算。みたいに出来ますか?
789デフォルトの名無しさん:2007/08/28(火) 05:56:44
所得
790デフォルトの名無しさん:2007/08/28(火) 06:00:16
データ所得税
791788:2007/08/28(火) 06:06:24
すんません。取得の間違いでした
792デフォルトの名無しさん:2007/08/28(火) 08:23:36
その程度なら今のPCは十分に早いから
データ所得→計算→描画→データ所得→計算→描画
で十分じゃね?
データ取得に時間掛かるならデータ取得部分だけ別スレッドで回した方がいいけど。
793デフォルトの名無しさん:2007/08/28(火) 18:09:00
典型的なProducer-Consumerパターンでないの?
794デフォルトの名無しさん:2007/08/28(火) 22:40:45
>>788
出来る出来ないで言えば、出来ると思う。

どっちかいうと、例えばデータをファイルに書き込んでるなら、
データ書き込みとデータ読み出しの排他処理してるだろうから、
あんまり頻繁に読み出しに行くとデータ更新を阻害しそうで
そっちの方が怖い。
795デフォルトの名無しさん:2007/08/28(火) 22:47:05
>>788読む限りでは出力先は画面でないの
ファイルに書き戻したりしてないように見えるけど
796デフォルトの名無しさん:2007/08/28(火) 23:53:55
Windows SDKの_msize()で、callocした領域のサイズを見ようと呼び出したのですが、
呼び出した行でプロセスが停止してしまいます。
エラーも何も帰ってこず、前の行のprintfは呼ばれて、次の行のprintfは呼ばれていないという
状況です。_msize()の説明を見ると、動的確保されていない領域でも
エラーが帰ってくるみたいですが…
こういった症状聞いたことある方いませんか?
VC6でデバッグビルドです。よろしくお願いします。
797デフォルトの名無しさん:2007/08/29(水) 00:09:09
ぬるぽではないのか
798796:2007/08/29(水) 00:11:55
ガッ
799デフォルトの名無しさん:2007/08/29(水) 00:13:31
引数に入れてやったポインタがNULLを指してるってことでしょうか
今環境がないので試せないですが、if ( p == NULL ) とかで見てみます
800デフォルトの名無しさん:2007/08/29(水) 00:14:12
だめだこりゃ
801デフォルトの名無しさん:2007/08/29(水) 00:16:09

違うんですか?
802デフォルトの名無しさん:2007/08/29(水) 00:17:38
違う
803デフォルトの名無しさん:2007/08/29(水) 00:19:45
よくわからないので教えて貰えませんか?
_msizeの戻り値を参照してるところで止まってる訳でもなく、
_msize自体で止まるので、引数として渡してやったポインタがNULLなのかと思ったのですが
804デフォルトの名無しさん:2007/08/29(水) 00:25:12
>>803
NULLに対する対処くらいしていてもよさそうだけど
805デフォルトの名無しさん:2007/08/29(水) 00:31:07
>>804
よく読んでみれば、

この関数は、パラメータを検証します。memblock が null ポインタの場合、
「パラメータの検証」に説明されているように、_msize は無効なパラメータ ハンドラを
呼び出します。エラーが処理されると、この関数は errno を EINVAL に設定し、-1 を返します。

とのことなので、-1が返ってくるようですね。
ぬるぽってヌルポインタ(Javaとかだとヌル参照例外)のことですよね?
引数のポインタがNULLでも動くなら、>>797は何について仰ってるのでしょうか?
806デフォルトの名無しさん:2007/08/29(水) 00:31:26
>>803
試しに_msizeの引数にNULL入れたら、Assert出て落ちた。
VS2005 Standard Edition

「止まる」というのは、関数から戻って来ないのか、不正終了するのか、どっち?
807デフォルトの名無しさん:2007/08/29(水) 00:35:00
ねるぽ
808デフォルトの名無しさん:2007/08/29(水) 00:37:28
確認しないとわからないかも…
というのは、Windowsのサービスとして動かしてるのです。
サービスでも普通のプログラムと同じようになんかダイアログでて
落ちるのなら前者の関数から戻ってきてないのだと思いますが、
出なくて静かに落ちるなら、タスクマネージャからプロセスが生きてるか確認しないとわからないかも

>>796のそこで止まるというのは、_msizeを挟んで呼び出し前と呼び出し後を
ログに吐かせたときに、呼び出し前までしか吐かれてなかったのです。

Assert出て落ちるのなら、プロセスが静かに死んでそうな気がしてきました。
809デフォルトの名無しさん:2007/08/29(水) 00:39:32
確認してなかったのか
810デフォルトの名無しさん:2007/08/29(水) 00:40:17
ウザ〜イ!ウザイよ小沢さん。想像で答えられてもウザ過ぎるよ。
811デフォルトの名無しさん:2007/08/29(水) 00:49:13
まぁ「初心者歓迎」ってついとるし、初心者はバグの見所もわかんねだろ。

免罪符にゃならんが。
そこら辺分からんと答えよう無いしな。
812デフォルトの名無しさん:2007/08/29(水) 00:49:15
そこだけ切り出してコンソールアプリにでもしてみれば。

NULLじゃないけど
IsBadReadPtrに引っかかるポインタとか
813デフォルトの名無しさん:2007/08/29(水) 06:40:31
サービスであっても、デバッガアタッチするといいb
814デフォルトの名無しさん:2007/08/29(水) 13:31:03
>>805
本当によく読んでるのか?

> _msize は無効なパラメータ ハンドラを呼び出します。
無効なパラメータ ハンドラが何やるかしってるか?

> 無効なパラメータが見つかると、C ランタイムは、
> 現在割り当てられている無効なパラメータ ハンドラを呼び出します。
> 既定により無効とされているパラメータが見つかった場合、
> ワトソン博士のクラッシュ レポートが起動します。
> 実行中のアプリケーションはクラッシュし、分析用のクラッシュ ダンプを
> Microsoft に提供するかどうかをユーザーに求めるメッセージが表示されます。
> デバッグ モードでは、無効なパラメータが見つかるとアサーション エラーになります。

815デフォルトの名無しさん:2007/08/29(水) 20:48:30
かなり初歩的な質問で申し訳ないんだけど
現在VC++ 2005 Express Editionで開発中で、所謂多重定義の問題にハマっています
Formアプリで、複数のFormをどんどん遷移していくような感じなのですが
イメージとしては、ATMのような、各画面1クリックでどんどん進むようなので、それぞれの画面が
個別のFormとして作られています。
(Form1がForm2を作って、Form2が3を・・のような)

で、聞きたい事は、VC++2005ExpEditでは、Formを作ると、そのclassの定義がすべてForm1.h
のように、ヘッダファイルに書かれてしまいます。
このとき、Form1とForm2で相互にincludeしたい場合、多重includeガードをしても、定義のせいで
リンクがエラーになり、コンパイルが通りません。

いちいちForm1.hの中身を.cppにコピペし、宣言のみを.hに書き直すようなことをしなければいけないのでしょうか

うまい回避方法があれば教えてください。
(長文すみません)
816デフォルトの名無しさん:2007/08/29(水) 21:58:45
C++/CLI?
817デフォルトの名無しさん:2007/08/29(水) 22:02:03
API直で叩けばいいんじゃね?
818デフォルトの名無しさん:2007/08/29(水) 22:25:54
stlのstring使っています。
このstringを1行ごとに読み込んで処理したいのですが、どのようにすればいいでしょうか?
tokenが使えないので、ちょっと苦労しています。一旦とってきたstringをcharに変えるのも、どうかなぁ……って気がしますし、
できれば、stringのままで一行ごとの読み込みがやりたいんですが、やり方を教えてください。

VC++2005 WinXPHomeです。
819デフォルトの名無しさん:2007/08/29(水) 22:32:43
findとかiteratorで改行しらべる
820デフォルトの名無しさん:2007/08/29(水) 23:01:37
>>815
#ifndef Form1_H
#define Form1_H
#include "Form2.h"
class Form1 : public Form
{
};
#endif
----------------------
#ifndef Form2_H
#define Form2_H
#include "Form1.h" //Form1.hからincludeされた場合はForm1_Hが定義済みなのでインクルードガードで無視される
class Form2 : public Form
{
};
#endif

こんな感じで書かれてればエラー出ないと思うんだが‥‥
821デフォルトの名無しさん:2007/08/29(水) 23:48:13
つか、C++を使ってなぜ.NETなのかさっぱり分からん
822デフォルトの名無しさん:2007/08/29(水) 23:51:54
つか、C++を使ってるのか.NETなのかさっぱり分かってないんだろう
823デフォルトの名無しさん:2007/08/29(水) 23:52:29
>>818
std::istringstreamとstd::getline(std::stringを引数にとるほう)はだめ?
824デフォルトの名無しさん:2007/08/29(水) 23:56:08
>>818
意味がイマイチわからんかったが、

istringstream と >>

じゃだめか?
825デフォルトの名無しさん:2007/08/29(水) 23:58:58
>>823

そっちじゃなきゃだめだわ
(大域のgetline か basic_istream<> の istream)
826デフォルトの名無しさん:2007/08/29(水) 23:59:07
>>818
boost, boost-sandbox or pstade使ってもいいなら良い方法があるんだけどいいかな? by boost厨
827デフォルトの名無しさん:2007/08/29(水) 23:59:32
basic_istream<> の istream ×
basic_istream<> の getline ○
828デフォルトの名無しさん:2007/08/30(木) 00:04:46
聞いてくれよ、おら
C++のunionにメソッドを置おけること、昨日知ったよ、orz
これって常識?
829デフォルトの名無しさん:2007/08/30(木) 00:12:39
>>828
structはよく見るけどね
830デフォルトの名無しさん:2007/08/30(木) 00:12:40
unionを使うことが非常識
831デフォルトの名無しさん:2007/08/30(木) 00:17:44
どちらかというと常識ではないと俺は思う。
自身で使ったことがないし、他人が使っているのを見たこともないし。
832デフォルトの名無しさん:2007/08/30(木) 00:25:36
なんかクラスWidgetがあって、

Widget();

という文があったら、Widgetのオブジェクトを(デフォルトコンストラクタで)作成して、
次の行に逝く前にすぐ消される(デストラクタが呼ばれる)と思います。
んじゃ、こういう場合はどうだろうと思い、↓を書いてみました。

Widget *w = &Widget();

「Widget() はこの行でデストラクタが呼ばれ消えてしまうので、ポインタwは無効になるだろう」と考え、
考え通り、すぐデストラクタが呼ばれました。
んじゃ、参照はどうだろうと・・・

Widget &w = Widget();

自分の考えとは違ってすぐにデストラクタが呼ばれず、この関数(またはブロック)を抜けるところでデストラクタが呼ばれました。
参照だと何か特殊なんですかね・・・
833デフォルトの名無しさん:2007/08/30(木) 00:29:15
参照には null が無いから
834デフォルトの名無しさん:2007/08/30(木) 00:34:16
大きなファイルサイズの読み込みを早めるためにMemoryMappedFile使う場合、
ファイル全てのアドレスを割り当てたらまずいですよね・・?

やはりマッピングアドレスを動的に変化させる仕組みが必要でしょうか?
そうすると編集時に問題になってしまいそうですが、何かセオリーみないなモノはあるのでしょうか?
835デフォルトの名無しさん:2007/08/30(木) 00:39:33
>>832
const参照なら標準規格でも明文化された規定になっている。
(知っている人は少ないかもしれないが)

けれど、非const参照の初期化に一時インスタンスの使用はできないことになっている。
一時インスタンスは右辺値だが、非const参照の初期化には左辺値が要求されるため。
最近のVC++やg++ではエラーになる。
どうせお前が使っているのはBorand C++だろう。窓から投げ捨てろ。
836デフォルトの名無しさん:2007/08/30(木) 00:40:16
>>832
参照は一時オブジェクトを捕まえておける
関数の戻り値とかもおっけー
837836:2007/08/30(木) 00:40:53
const参照だけだっけか。すまそ。
838デフォルトの名無しさん:2007/08/30(木) 01:04:15
>>823,824
thx istringstreamでいってみます。
839デフォルトの名無しさん:2007/08/30(木) 12:51:44
>815
別にForm1の定義がまるまる欲しいわけじゃないでそ。
Form *createForm2();
みたいな生成関数があれば大抵足りるんじゃないの。
840デフォルトの名無しさん:2007/08/30(木) 13:45:38
>>820
ガードは試してみたんですが、「定義」が.hに書かれているので・・

>>839
まったくそのとおりなんですが
VCを使うと、デフォルトでヘッダファイルに定義が書かれているんですよ
なので、どうしたものだろうかと
やっぱり、いちいち自分でヘッダファイルに書いてある定義をcppに持っていって、ヘッダファイルでの
宣言は改めて書くようにしないとダメなんでしょうか
841デフォルトの名無しさん:2007/08/30(木) 15:06:39
>>835
BCCタンを悪く言うと痛い目にあうお(#^ω^)ビキビキ
842デフォルトの名無しさん:2007/08/30(木) 15:56:48
>>835
警告は出るがな
843デフォルトの名無しさん:2007/08/30(木) 16:09:45
>>840
form2.h では、#include "form1.h"のかわりに、
class Form1;
と書いとけ。
これで、Form1* ほげほげって書けるようになる。
form1.h でも同様にする。

form1.cpp, form2.cpp では、両方のヘッダファイルをincludeする。
844デフォルトの名無しさん:2007/08/30(木) 21:06:59
BorlandC++5.5.1を使ってコンパイルしているのですが、
このコンパイルをプログラム側からSystem()関数で行った場合に、
プログラム側でコンパイルでエラーが出たかどうかを判断できないのでしょうか?
具体的には System(bcc32 helloworld.c); の返り値とかで判断できないものでしょうか?
845844:2007/08/30(木) 21:07:40
すみません、C言語です。
846デフォルトの名無しさん:2007/08/30(木) 21:30:34
無理。
847844:2007/08/30(木) 21:33:22
>>846
そうですか、意外とプログラム側から分かる情報は少ないんですね。。。
どうしようかな・・・
848デフォルトの名無しさん:2007/08/30(木) 21:38:26
諦めろ
お前には無理
お前のプログラム側から分かる情報なんて皆無
849デフォルトの名無しさん:2007/08/30(木) 21:42:46
んあ?
コンパイルに失敗したかどうかは分かるんじゃない?
エラーが出たのかどうかは分からんが。

BCCのsystem()は良く知らん。

gccのなら、↓でcommandの終了コード取れたと思うけど。

status = system("command");
if(WIFEXITED(status))
exit_code = WEXITSTATUS(status);
850844:2007/08/30(木) 22:02:00
>>849
manpageを見る限りだと、<sys/types.h>と<sys/wait.h>の二つをインクルードするみたいなのですが、
これをコンパイルしたところ、sys/wait.hをオープンできないというエラーがでます。
何故でしょうか・・・;;

ちなみにそのWEITSTATUSの返り値はint型でいいのでしょうか?
851デフォルトの名無しさん:2007/08/30(木) 22:04:07
お前がアホだから
852デフォルトの名無しさん:2007/08/30(木) 22:06:34
数千行から1万行程度で書けて、出来たとき達成感のあるような練習課題思いつけば教えてください
テトリスとかどうかなと思ってるんですが
853デフォルトの名無しさん:2007/08/30(木) 22:33:30
将棋でも作れば?
854デフォルトの名無しさん:2007/08/30(木) 22:36:06
>>852
テトリス
855デフォルトの名無しさん:2007/08/30(木) 22:48:33
>>850
いや、ちょっと待ち。
BCCはWindowsの話じゃないのか?
gccはUNIXとかLinuxの話で。
WEXITSTATUSがBCCでも存在するか知らんのだが。
856デフォルトの名無しさん:2007/08/30(木) 22:49:26
>>850
なぜなら、manpage は bcc じゃないから。

戻り値よりも、obj ファイルや exe ファイルが生成されてるかどうかを見た方が楽なんじゃないか。
857デフォルトの名無しさん:2007/08/30(木) 22:51:43
>>852
テトリス
858844:2007/08/31(金) 00:21:14
>>856
それだとコンパイルするたびに、objファイルを消さないといけないですよね。
コンパイル前にobjファイルとexeファイルを消すプログラムにすれば済む話かもしれないですけど・・・
859デフォルトの名無しさん:2007/08/31(金) 00:25:28
>>852
2ch専用ブラウザ機能付きテトリス
セルフコンパイル機能付きテトリス
英日翻訳機能付きテトリス
OCR機能付きテトリス
人工無能機能付きテトリス
860デフォルトの名無しさん:2007/08/31(金) 00:27:18
>>844
エスパーすると君が本当に必要なのは make および makefile に関する知識だ
861デフォルトの名無しさん:2007/08/31(金) 00:31:02
人工無能機能付きテトリスに期待
862デフォルトの名無しさん:2007/08/31(金) 00:40:19
今更過ぎる質問なんですがWindows2000にVC++2.0って
インストール不可なんでしょうか?
うまく行ったかなと思ったら、最後の最後でレジストリの
書き込みに失敗しましたとかって出てしまいました。
他のバージョンのVCとかは一切インストールしていない
状態です。
863デフォルトの名無しさん:2007/08/31(金) 00:42:02
可能ですよ
864862:2007/08/31(金) 00:53:42
>>863
レスありがとうございます。
Win2Kのインストールから、もう一度やり直してみます・・・orz
サービスパック(SP4)入れる前にVCをインストールした方が
良かったのかな・・・?
865デフォルトの名無しさん:2007/08/31(金) 01:05:29
#include <iostream>
//typedef int link;
class link {};

int main(){
  link l;
}

g++4.1.2で怒られました。コンパイラ不信になりそうです。
変数名をNULLにするような常識外れなのかもしれませんが、
こういう名前空間の衝突はどこを見れば予想できますか?
866デフォルトの名無しさん:2007/08/31(金) 01:08:56
>>g++4.1.2で怒られました。コンパイラ不信になりそうです。
君のレベルではコンパイラのバグなど、コンパイラ側の問題に遭遇することは無い。
コンパイルエラーはすべてコンパイラのせいではなく、自分が悪いのだと認識したほうがいい。
867デフォルトの名無しさん:2007/08/31(金) 01:13:28
>>865
エラーメッセージを見れば予想できるよ。
868デフォルトの名無しさん:2007/08/31(金) 01:26:28
__declspec(novtable)は、どういう時に使うものですか?
869デフォルトの名無しさん:2007/08/31(金) 01:30:10
>>865
自分の作ったクラスとか関数をすべて自分の名前空間に入れれば衝突を気にせずに済むよ
870デフォルトの名無しさん:2007/08/31(金) 01:31:03
>>866
標準ヘッダをインクルードしたらグローバルにunistd.hがぶちまけられる、
ってのはバグでなくてもショックでした。

>>867
初お目見得のエラーメッセージって初心者キラーなもので…。
class hoge{ link l; };
: error: ‘link’ does not name a type

危なそうな名前は回避するしかないんですかね。気をつけます。
871デフォルトの名無しさん:2007/08/31(金) 01:36:49
>>869
あなるほど、ちと面倒ですがそうします。皆さんありがとう。
872デフォルトの名無しさん:2007/08/31(金) 04:29:23
標準入出力等の一部の関数は、
名前空間というものが無いCの関数として公開されたAPIを用いて実装されてるわけで、
たとえ標準Cの関数だけをstd名前空間に入れてもそいつらが使ってるAPI関数はそのままグローバルに残り
そりゃ凄い規模の汚染が発生していることだろう。
VCのIDE上でグローバル名前空間::からの入力予想をかけたらその凄まじさがよくわかる。
ただ大文字で始まるようなものは少ないんで、
「クラスの名前は先頭大文字でキャメル」とかそれなりに一般的な命名規則使ってれば遭遇しにくく
知らずに有効なコーディングルールを使ってるとかえって危ない場合ってあるんだなぁとかそういうことを思った。
873デフォルトの名無しさん:2007/08/31(金) 09:46:13
前々から気になっていたので、これを機にぐぐった

>>868
http://msdn.microsoft.com/msdnmag/issues/0300/c/
874デフォルトの名無しさん:2007/08/31(金) 11:12:27
A を直接作ることが無いのであれば、
A のコンストラクタで仮想関数テーブルを初期化する処理は必要ない、無駄だ、ということか。なるほど。
875デフォルトの名無しさん:2007/08/31(金) 11:28:51
setcurrentdirectoryを使って、
ネットワーク上のPCのディレクトリを指定したいのですが、
記述の仕方を教えてください。 
876デフォルトの名無しさん:2007/08/31(金) 11:30:36
novtableはATLのウィザードで作ったクラスで良く見る。
877デフォルトの名無しさん:2007/08/31(金) 11:50:48
>>845
\\servername\sharename
878デフォルトの名無しさん:2007/08/31(金) 12:04:14
1万行だなんて身近スg
879デフォルトの名無しさん:2007/08/31(金) 13:11:18
std::basic_ifstream<wchar_t>で文字を読み込むと日本語が文字化けしちゃうんですか
何故でしょうか?読み込むテキストはUTF-8で書いてあります
880デフォルトの名無しさん:2007/08/31(金) 13:25:50
UTF-8なlocaleをstreamにimbue()汁
それがサポートされていれば、の話だがな
881デフォルトの名無しさん:2007/08/31(金) 13:31:46
これimbue(std::locale("japanese"));やstd::locale::global(std::locale("japanese")); これは
試しましたがダメでした
882デフォルトの名無しさん:2007/08/31(金) 13:36:17
> UTF-8なlocaleを
これが読めなかったのか

janapeseとかいうlocaleを使っているところを見ると、VC++か?
なら、C++localeに任せるのは諦めろ。
VC++はUTF-8なlocaleをサポートしていない。
883デフォルトの名無しさん:2007/08/31(金) 13:38:14
そうですか・・・じゃあマルチバイトで読み込んで内部で変換するしかないですね
ありがとうございました
884デフォルトの名無しさん:2007/08/31(金) 13:42:01
ようはコード変換のファセットだけUTF-8のものと差し替えればいいんだ。

BoostにもUTF-8コード変換のファセットがあるんだが、
対象がUCS-4だからWindowsのwchar_tでは使えないだろう。
それならおそらく自作するしかない。誰か作っているかもしれないが。
http://www.boost.org/libs/serialization/doc/codecvt.html
885デフォルトの名無しさん:2007/08/31(金) 13:49:05
>>884
汎用的なcodecvt<>のセットがどっかにあるんなら俺も欲しいな
boost::iostreams::codeconverterとかはpublicなデストラクタを備える
codecvt<>実装を要求するんで、VC++標準のcodecvt<>は使えないしな

iconvあたりを使ってデッチあげる手もあると思うが、状態をmbstate_tで
管理しなければならない辺りが悩ましげだし、wchar_tのバイト数が決まってないのも
やっぱ面倒だよな
886デフォルトの名無しさん:2007/08/31(金) 14:25:44
使ったことないけど
ttp://tricklib.com/cxx/ex/babel/
887デフォルトの名無しさん:2007/08/31(金) 15:04:43
CSimpleStringクラスのCopyChars()をそのまま使うと、「古い形式で使われています」と
警告がでるんですが、この関数の新しいバージョンってありますか?
探したけど見つかりませんでした
888デフォルトの名無しさん:2007/08/31(金) 16:52:12
#define _SECURE_ATL
889デフォルトの名無しさん:2007/08/31(金) 17:30:31
やっぱりないですよね
#pragma warning( disable : 4996 )で消しました
890デフォルトの名無しさん:2007/08/31(金) 17:38:19
#if (_MSC_VER > 1310)
#pragma warning(push)
#pragma warning(disabel:4996)
#pragma warning(pop)
#endif
891デフォルトの名無しさん:2007/08/31(金) 23:16:38
template <class Ch,class Tr=std::char_traits<Ch> >

これって何してるのですか?
892デフォルトの名無しさん:2007/08/31(金) 23:20:32
その気になれば、Trをstd::char_traits<Ch>でない何かにすることもできる、と
893デフォルトの名無しさん:2007/08/31(金) 23:27:59
テンプレート引数のデフォルト値
894デフォルトの名無しさん:2007/08/31(金) 23:32:10
template <class Ch,class Tr=std::char_traits<Ch> > class basic_string;
があるときに
basic_string<char>
ってするだけで
basic_string<char, std::char_traits<char> >
ってするのと一緒になるという手抜きができますよってこと?
895デフォルトの名無しさん:2007/08/31(金) 23:59:19
そう
896デフォルトの名無しさん:2007/09/01(土) 00:05:08
basic_ofstreamを拡張して
EUC出力したいのですけど何か参考になる
URLとかないでしょうか?
897デフォルトの名無しさん:2007/09/01(土) 00:13:15
898デフォルトの名無しさん:2007/09/01(土) 00:23:06
899デフォルトの名無しさん:2007/09/01(土) 00:28:17
>>896
コード変換はストリームの管轄ではない。>>879-886
でも、basic_ostream<char>だとcodecvtは使われないのか?

locale関係に挫折したら、邪道だけどストリームバッファを
作成して書き込み前の瀬戸際で変換をかけるという手もあると思う。
900デフォルトの名無しさん:2007/09/01(土) 10:26:32
unsigned char --> charの変換だけが欲しいのに
なんでここまで大がかりになるのかよーわからん。

C++の言語設計ポリシーがきもいのが原因なんだろうけどさー
901デフォルトの名無しさん:2007/09/01(土) 11:52:33
【自己責任で】あっさり変換しちゃえ。
究極的にそれができるから、C/C++が好きだ

美しくスマートに書くのは確かにめんどいが
902!omikuji:2007/09/01(土) 12:47:39
903デフォルトの名無しさん:2007/09/01(土) 14:51:04
興味本位でModern買って、今日届いたけど難しいんだよな?
もっと勉強してから読むか
904デフォルトの名無しさん:2007/09/01(土) 15:06:26
第三章を読んで(いい意味で)爆笑するといいよ
905デフォルトの名無しさん:2007/09/01(土) 16:33:13
ttp://www.scl.kyoto-u.ac.jp/scl/appli/appli_manual/SUNWspro/WS6U2/ja/manuals/stdlib/user_guide/loc_io/19_4.htm
に、JIS<->Unicodeのcodecvtファセット実装例が載っているんだが、
mbstate_tを使わない場合(この実装例では使ってない。つか、mbstate_tなんて
処理系毎の実装詳細に属する代物だから、事実上使えないだろう)、
結局独自のストリーム型を定義するハメになるようだな。
無論wcout等の既存のストリームをimbue()することなんて出来やしない。
これじゃわざわざcodecvtとしてコード変換層を実装する意味はありはしない。

無駄とも思える複雑さを導入していながらこのていたらく。
C++のlocale, streamまわりの設計は本当に糞だな(実装の質も糞だが)。
906デフォルトの名無しさん:2007/09/01(土) 18:38:25
クラスのメンバにfstreamを持たせるのってよくない?
コピーコンストラクタをちゃんと書いてないとコピーできないよね。
なんかもっといい方法ってあるんだろうか。。
907デフォルトの名無しさん:2007/09/01(土) 22:00:09
fstream を局所的に使う設計に変更するとか
908デフォルトの名無しさん:2007/09/01(土) 22:58:17
refcount付きのfstream*入りクラスつくってメンバにいれるとか
909デフォルトの名無しさん:2007/09/01(土) 22:59:49
unicode_iteratorの最強さは異常
組み込みでも使えるな
910デフォルトの名無しさん:2007/09/02(日) 01:52:58
memcpy.asmというファイルでエラーが出て困っています
これはどういう時に呼び出される命令なんでしょうか?
911デフォルトの名無しさん:2007/09/02(日) 01:56:59
>>910 memcpy() したときだろ。
912デフォルトの名無しさん:2007/09/02(日) 02:08:48
memcpy使ってないときにも落ちちゃうんですが
別の関数とかクラスが内部で使ってる場合もあるんですかね?
913デフォルトの名無しさん:2007/09/02(日) 02:13:57
ああ
914デフォルトの名無しさん:2007/09/02(日) 02:14:39
>912
そりゃ、メモリコピーなんて非常に基本的な機能だからいろんなところで使われてるだろう。
915デフォルトの名無しさん:2007/09/02(日) 02:15:58
てかダメだろう落としてちゃ。もうプログラムングやめた方がいいんじゃねぇの
916デフォルトの名無しさん:2007/09/02(日) 02:17:41
じゃあ原因の特定はむずかしいですね
どうしよう
917デフォルトの名無しさん:2007/09/02(日) 02:18:06
デバッガでコールスタック見ればいいんじゃない
918デフォルトの名無しさん:2007/09/02(日) 02:30:05
>>917
今やってみたら原因がわかった気がします
ありがとうございました
919デフォルトの名無しさん:2007/09/02(日) 04:18:43
基本的な質問ですみません
VC++6でwindows コンソールアプリを作っていますが
たとえば

int nA;

nA = 0;
while(1){
print("count=%d",nA++);
Sleep(500);
}

でカウンタ値を表示しますが
マウスをコンソールにあわせると、タイトルバーに「選択」とでて処理が止まってしまいます
これをやめさせるにはどーしたらよいでしょう?


920デフォルトの名無しさん:2007/09/02(日) 04:28:44
>>919
コンソールウィンドウの「簡易編集モード」をオフにするとか。
あれ?マウスカーソル持って行っただけで選択になったっけ?
921デフォルトの名無しさん:2007/09/02(日) 04:30:26
VCで/clrを付けると、GC(gcnew)が使えるようですが、これは.NETと関係あるんですか?
922デフォルトの名無しさん:2007/09/02(日) 04:48:44
>>920
マウスを持っていって置くだけでなります
923919:2007/09/02(日) 04:54:02
>>920
ありがとうございます
「簡易編集モード」でぐぐったら、プロパティで変えられるんですね
変えたらならなくなりましたが
このウィンドウだけ、プログラム上から変える方法はあるんでしょうか?
924デフォルトの名無しさん:2007/09/02(日) 05:16:22
>>923
さぁね。あとはこっち↓行けば?

Win32API質問箱 Build56
http://pc11.2ch.net/test/read.cgi/tech/1186989201/
925デフォルトの名無しさん:2007/09/02(日) 07:33:16
レジストリ書き換えれば(ry
926デフォルトの名無しさん:2007/09/02(日) 07:58:40
>>921
コンパイラは基本的に.NETの中間言語 (CIL)を吐き(一部生の機械語もあり)、
実行には.NET Frameworkなどが必要になる。

所定の構文に従って書けば、C#など.NET言語で使えるクラスも書けるし、
参照設定すれば.NETのライブラリだって使えるしで、
お得なようで、ネイティブと.NET両方の苦悩を抱え込んで面倒くささも倍増。
それが/clrオプションで使えるC++/CLI。

C++/CLI について語ろうぜ Part2
http://pc11.2ch.net/test/read.cgi/tech/1142147319/l50
927デフォルトの名無しさん:2007/09/02(日) 10:47:36
>>922
「置く」なんてオレ語を使うからややこしくなる。
クリックしているんじゃないの?
クリックすることを「置く」なんて言っても通じないよ。
928デフォルトの名無しさん:2007/09/02(日) 10:57:46
クリックのことを押すと言うのはよくやる。
929デフォルトの名無しさん:2007/09/02(日) 11:00:04
押すじゃなくて置く
930デフォルトの名無しさん:2007/09/02(日) 11:06:05
持っていく→アクティブ/非アクティブ関係なく窓の上
置く→アクティブで窓の上
で、アクティブにするのにクリックしたんだと思ったが違うのか
931デフォルトの名無しさん:2007/09/02(日) 11:15:04
よし引っ張れ!
それだ
932デフォルトの名無しさん:2007/09/02(日) 11:17:56
クリックしたんじゃねぇか
933デフォルトの名無しさん:2007/09/02(日) 11:34:08
ダブルクリック→つっつく
934デフォルトの名無しさん:2007/09/02(日) 12:42:48
ドラッグ→ひっぱる
935デフォルトの名無しさん:2007/09/02(日) 12:46:11
最小化→消す
936デフォルトの名無しさん:2007/09/02(日) 12:47:15
プー吹いた
937デフォルトの名無しさん:2007/09/02(日) 19:08:55
CかC++にはinterfaceっていう予約語があるんですか?DirectX関係のソースに使われてました。
大文字でもなくマクロではないと思うし、処理系の拡張なら__interfaceという感じになってそうですし、
VC++だと色が変わるので、予約語だと思ったんですが。
でもWikipediaとかの予約語一覧にも載ってない…
938デフォルトの名無しさん:2007/09/02(日) 19:17:37
C#じゃね?
939デフォルトの名無しさん:2007/09/02(日) 19:20:41
ねーよ
940デフォルトの名無しさん:2007/09/02(日) 19:23:32
virtual
941デフォルトの名無しさん:2007/09/02(日) 19:25:45
struct
942デフォルトの名無しさん:2007/09/02(日) 19:27:14
import
943デフォルトの名無しさん:2007/09/02(日) 19:28:41
extern
944デフォルトの名無しさん:2007/09/02(日) 19:29:39
null
945デフォルトの名無しさん:2007/09/02(日) 19:30:43
po
946デフォルトの名無しさん:2007/09/02(日) 19:39:52
inter
947デフォルトの名無しさん:2007/09/02(日) 19:41:16
>>941
"interface" という語は C++ の予約語ではなく、
該当する COM ヘッダーの中で "struct" として #defined されます
(C++ では、構造体が標準でプライベートではなくパブリックの継承とアクセスを使用することを除けば、クラスと構造体は同じであることを思い出してください)。

http://msdn.microsoft.com/library/ja/jpdnguion/htm/msdn_drguion020298.asp
948デフォルトの名無しさん:2007/09/02(日) 19:43:53
949デフォルトの名無しさん:2007/09/02(日) 19:52:22
陸上では日本人では全く勝負にならんが、コンピュータでもそうなんですかね?
Code Projectなんかがヘビーなコンポーネントを公開しているのはほとんど海外組み
950デフォルトの名無しさん:2007/09/02(日) 20:30:52
ICFPの上位にgoogleのチームに混じって日本人が入っていたりするよ
951デフォルトの名無しさん:2007/09/02(日) 21:52:22
すみません
C言語でtelnetした後に続けてサーバーに出力を自動で送信する方法はありませんか?

エミュレータと通信してましてエミュレータと接続した後に
エミュレータ上のモニターに対してコマンドを送りたいです

具体的には
system("telnet 127.0.0.1 5556");
した後にqというコマンドをエミュレータのモニターに送りたいのですが
スレッドが一つだと処理がtelnetから動かず
スレッドを二つにして
system("q");
と入力を行うとエミュレータでなくDOS上でqが行われるようでうまく動きません
952デフォルトの名無しさん:2007/09/02(日) 21:58:19
>>951
っ popen
953デフォルトの名無しさん:2007/09/02(日) 21:58:30
OSを書け
954デフォルトの名無しさん:2007/09/02(日) 22:01:30
>>951
そういう場合はexpectを使え、ということになっている
955デフォルトの名無しさん:2007/09/02(日) 22:12:00
一瞬>>953が煽りに見えたが、そうだ、ターゲットOSを書け
956デフォルトの名無しさん:2007/09/02(日) 22:12:29
みんな詳しいな
おれなんて文法理解するだけで精一杯だよ
957デフォルトの名無しさん:2007/09/02(日) 22:15:50
やりたい事があったら文法なんて関係ないさ。
958デフォルトの名無しさん:2007/09/02(日) 22:16:34
説明不足すみませんでした

OSはWinXP
エミュレータはQEMU
エミュレータ上のOSはDebian
Cの開発環境はVisualStdioを使っています

そしてWinXP上のC言語とQEMUで通信しております
959デフォルトの名無しさん:2007/09/02(日) 22:17:24
>>956
・簡単なアプリを作る→その肉付けをしていき内容を濃くする
・簡単なアプリを作る→簡単なアプリを作る
・高度なアプリを作る→半年後見直すと自分で組んだプログラムが恥ずかしく感じ組みなおす
・高度なアプリを作る→挫折する

これらを繰り返していくうちに身に付くから、今できることをやるだけで色んな知識を覚えていくよ
960デフォルトの名無しさん:2007/09/02(日) 22:36:39
>>957
>>959
もともと発想力がないからか、自分で課題が思い浮かばないけど
とりあえず持ってる参考書は全て読んで、サンプルだけでも動かして
ちょこっと変更したりすることをしばらく続けて見ようと思う
いまはイテレーターアダプタと格闘中。
961デフォルトの名無しさん:2007/09/02(日) 22:43:14
>>951 >>958
多分勘違いしてはる
system()はコマンドを実行するようなモノであって、
線路(パイプ、FILE*など含む)に送信する働きはない


試作では、send(),recv()かなんかを使うことになるのでは
そっからはやり方はいろいろあるけど、自力で見出していくのでは
962デフォルトの名無しさん:2007/09/02(日) 22:46:05
>>951
例えばTeraTermを使っていいなら、自動運転用マクロ言語内蔵だから接続先からの特定のキーワードを待って
それに対して一定の反応を返すことくらいちょちょいのぱーだよ。
963デフォルトの名無しさん:2007/09/02(日) 23:05:08
>>951
ソケット開いてtelnet話せばいいだけだろ
なんでそんな単純な事も解からないんだ
氏ねよw
964デフォルトの名無しさん:2007/09/02(日) 23:08:25
>>960
サンプルだけ動かして
「俺、C++できるよ」

なんて言ってるような奴にはならないでね
965デフォルトの名無しさん:2007/09/02(日) 23:10:29
>961
system関数は使えないんですね・・・
recv()考えて見ます

>962
それはちょっと使えそうにないので他の手を考えてみます
966デフォルトの名無しさん:2007/09/02(日) 23:11:21
>>964
まだ初期段階だから先は長いと思ってる
まあ仕事でC++使えば一気に向上するとは思うけど
967デフォルトの名無しさん:2007/09/02(日) 23:12:27
>>965
詳細はよくわからんが、connectしてデータをsendすればいいだけではないの??
968デフォルトの名無しさん:2007/09/02(日) 23:26:00
telnet特有のネゴシエーションとか、ログイン処理とか
URGデータの処理とか考えなけりゃね。
969デフォルトの名無しさん:2007/09/02(日) 23:28:07
>>968
そうかログイン処理が必要だな
こりゃ失礼
970デフォルトの名無しさん:2007/09/02(日) 23:34:45
今時telnetってとこには突っ込まんが
せめてライブラリ使うかexpectに汁っての

下らない仕事のためにtelnetを喋るTCPクライアントをわざわざ手書きするなんて
ナンセンス極まりない
971デフォルトの名無しさん:2007/09/02(日) 23:46:27
思うに、telnetで接続して、"q\n"かなんか、何か簡単にシグナルしたかったんだろう
そのくらいの軽務なら、connect(), recv()でいいんじゃないかと思った

CreateThreadはできるけど、system()がわからない。
きっと、IPC(広義の)の初心者さんなんだ ヒントくらいでいいんじゃまいかとw
972デフォルトの名無しさん:2007/09/02(日) 23:54:37
telnetぐらい3日でかけるだろ
どうせ暇なニート学生だろ?

973デフォルトの名無しさん:2007/09/02(日) 23:59:55
ニート学生って言語矛盾じゃないか
974デフォルトの名無しさん:2007/09/03(月) 00:01:34
どうせ学校もろくにいかないで
2chが動画サイトめぐりだろ
身分があるだけでニートとかわらんだろw
975デフォルトの名無しさん:2007/09/03(月) 00:08:38
何がしたいのかは知らないが、
そもそも telnet を使う必要が無いんじゃないか?
976デフォルトの名無しさん:2007/09/03(月) 00:10:10
Cの基本的な文法については勉強して次は実際にSourceForgeでオープンソースの
プログラムを読もうと思っていたのですが難しすぎて分かりません
みなさんはある程度文法の勉強をしてからどのようにして勉強していきましたか?
977デフォルトの名無しさん:2007/09/03(月) 00:13:36
作りたいものを作る。それが一番。
978デフォルトの名無しさん:2007/09/03(月) 00:15:51
>>976
Cなら簡単に1万行ぐらいまでなら
読めるようになる方法がある。読めない文法だけ
飛ばしてたぶん処理追えるようにはなるとは思う

環境ちょっと限定になるけどな
979デフォルトの名無しさん:2007/09/03(月) 00:16:17
>>976
必要に迫られれば、驚くほどの速度で習得可能

文法の次はアルゴリズムの勉強がお勧め
アルゴリズムに関する説明(自然言語)を元にC言語ソースにする
これが結構難しい
980デフォルトの名無しさん:2007/09/03(月) 00:18:20
読むのと書くのは別の能力。
981デフォルトの名無しさん:2007/09/03(月) 00:20:37
書くスキルあげつつ読みたいなら

モジュールバラしテクニックを身に着けるといいよ。

単純にどこで処理が範囲かわかったら
あとは改造する楽しいよ。

982デフォルトの名無しさん:2007/09/03(月) 00:25:40
読むと書くのは別の能力だというのは分かりますが
ある程度うまい書き方とか定石なども学びたいと思いまして

今コーディングの本を読んでいるのですがいきなり書いてそれに慣れてしまうと
ものすごい危険なコードを何の意識もなく書いてしまったりしてしまうのかと思いまして

>>979
今読んでいる本が終わったらアルゴリズムの本も読んでみようと思います
983デフォルトの名無しさん:2007/09/03(月) 00:30:13
>>982
最初から完璧なコードが書けるなどと思うな
最初は誰でもつたないんだ
それを気にせずコード書け
書かなきゃいつまでたっても上手くはならん
984デフォルトの名無しさん:2007/09/03(月) 00:33:16
C++だったらそれこそ20冊ぐらい読まないと駄目だからなぁ…
と言っても読みながら書かないと理解できないような内容だから
読もうとしてる内に書く経験も積むことになるが
985デフォルトの名無しさん:2007/09/03(月) 00:34:26
20冊って何の本だよ
986デフォルトの名無しさん:2007/09/03(月) 00:35:03
>>983
今は本を読んで演習問題などでコードを書いているという状況です

>>984
何かお勧めの本などはありませんか?
987デフォルトの名無しさん:2007/09/03(月) 00:38:12
文法覚えたなら簡単なソフト作ればいいんじゃね?
何でもいいから動くもの作らんと、モチベーション維持が大変だ
目標があってC言語勉強したんだろうから、目標までの道のりを
考えて一歩ずつ進むしかないよ。

といいつつも、俺はなんもしてないな。
988デフォルトの名無しさん:2007/09/03(月) 00:41:22
手じかに役に立つ類のちょろっとしたものを書きたいのなら
ぶっちゃけCは向いてないよあまり
989デフォルトの名無しさん:2007/09/03(月) 00:42:45
演習問題を一通りやって何かを作ろうとしてもアイディアが出なければ
大学とか専門学校で出される課題のようなプログラムを作るといいよ
ここには宿題スレもある事だし
990デフォルトの名無しさん:2007/09/03(月) 00:44:16
ライブラリとかマクロとか使ってカスタムすればLL言語並の「軽い」C++ができるぜ
ただし作った奴以外には読めない使えない代物になるけど
991デフォルトの名無しさん:2007/09/03(月) 00:46:46
>>986
人に薦められた本が君に適している確率はかなり低いよ。
マスターしたけりゃ立ち読みして読みやすいと感じた本を読め。
仮にその本が結局ハズレでも、その次に選ぶ本はより君に適しているはず。
992デフォルトの名無しさん:2007/09/03(月) 00:52:56
>>987
どうやれば市販のソフトのようなものが作れるかもよく分からない状況で
みなさんvisual studioとか使ってるんですか?

>>991
はいわかりました
993デフォルトの名無しさん:2007/09/03(月) 00:55:13
VisualStudio使ってるよ
VC++とVC#だけだけど
994デフォルトの名無しさん:2007/09/03(月) 00:58:05

>>993
どのようなアプリをつくったんですか?
公開できるようなものではないと思いますがw
995デフォルトの名無しさん:2007/09/03(月) 01:00:37
次スレ
【初心者歓迎】C/C++室 Ver.42【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1188748806/l50
996デフォルトの名無しさん:2007/09/03(月) 01:02:26
うめるか
997デフォルトの名無しさん:2007/09/03(月) 01:03:47
>>994
馬鹿にしてんのか
998992:2007/09/03(月) 01:07:49
>>997
994は僕じゃないです
999デフォルトの名無しさん:2007/09/03(月) 01:13:49
うm
1000デフォルトの名無しさん:2007/09/03(月) 01:14:10
仕事で作った物って公開できないのが大半だな・・・
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。