[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/27 13:34 / Filesize : 231 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.40【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1184717430/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

2 名前:987 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:29:47 ]
>>1乙!

何をしたら動かなくなったのかが知りたいな。
できればfopenとかの戻り値をチェックして欲しい。
ってか、ローカル変数でかいYO!って落ちじゃないよな?


4 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:45:20 ]
>>987
Rs,Hn,Odds,Poll,Poll_S,Poll_T
を、まずmallocで確保しようぜ?

それでダメだったらまた来いよ。


5 名前:デフォルトの名無しさん mailto:age [2007/08/06(月) 23:54:22 ]
www.freewebs.com/photoradio/?1/360788

6 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 00:00:50 ]
>>前スレ986
> 従って、ヌルポインタはprintf()の引数として処理できない。
できるよ。

printf("%p\n", (void*)0);

7 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 00:38:42 ]
printf("%p\n", NULL);

8 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 00:46:05 ]
>>7 それ、らめぇ

9 名前:デフォルトの名無しさん [2007/08/07(火) 00:51:41 ]
NULL で思い出したんだけども C++ って NULL よりも 0 を使う方がいいの?


10 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 01:04:50 ]
>>9
どちらとも言えない。 NULL 使うんなら対応するヘッダのインクルードを忘れずに。
あとは↓を見て自分なりの答えをどうぞ。
www.kouno.jp/home/c_faq/c5.html



11 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:21:49 ]
>>9
C++ では NULL は 0 と定義されているとは限らない。処理系定義。
だから、NULL と書いておけば、処理系によっては

int n = NULL;

と書いた時にエラーか警告を出してくれるかもしれない。

12 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:29:11 ]
>>9
好みの問題だから、どっちでもいいよ。

13 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:49:37 ]
>>11
エラーは出せない。

14 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:29:10 ]
>>11
C でも同じだろ。

15 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:38:15 ]
>>14
C は 0 か ((void*)0) だっしょ。
C++ は完全に処理系定義だったはず。
C99 で変わってたら知らんが。

16 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:52:07 ]
あんまり仕様の隙間を縫うような考え方はしない方がいいよ

17 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 05:10:27 ]
まーたNULLの話題かw

18 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:21:45 ]
ポインタのみに適合するNULLをテンプレートで実装してみたけどどうよ、
って話を何年か前に見た記憶があるんだけど、どこで見たんだか思い出せない

19 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:42:53 ]
ポインタのみに適合するNULLをテンプレートで実装してみたけどどうよ、
って話を何日か前に見た記憶があるんだけど、どこで見たんだか思い出せる

20 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:53:17 ]
>>15
とりあえず、 C99 では処理系定義。



21 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:57:05 ]
教えていただきたいことがあるのですが
BCC32にて、ユニットテストを行うコンソールアプリを製作してるのですが
下記のように関数[AssertEqueal]が呼ばれてた場合、
[AssertEqueal]内でソースファイル内での行数を取得することは可能なのでしょうか?
可能ならばその方法を教えていただきたいのですが

void main()
{
AssertEqueal( a , b );
}


22 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 11:10:59 ]
__LINE__を使うとか

23 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 11:12:26 ]
つ __LINE__
AssertEquealはマクロ関数で実装して。

24 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 12:13:37 ]
>>22,23
ありがとうございます、無事実装できましたー

25 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 16:12:31 ]
この調子だと __FILE__ も使ってなかったりしないよな。

26 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 16:25:03 ]
なんすかそれ

27 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 16:32:41 ]
__FILE__ と __LINE__ はセットだろー
ついでに文字列化演算子 # もな

28 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 16:44:14 ]
そんなんあるんですか

29 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 16:56:31 ]
つか、この分だと普通にassert()を知らないんじゃないか

30 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 17:17:36 ]
assert知ってるけど使ってない
便利なもん?



31 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 17:29:21 ]
それは知ってるって言わない

32 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 17:36:19 ]
assert知らないけど使ってる
何するもん?

33 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 17:46:47 ]
ちょっと自信ないから調べてきた

つまりは
assert( 条件 )
って風に書いて、この条件がfalseになったらそこで止めてくれるってことでよろしい?
でもリリースにするとどうなるの?勝手に何かに置き換わってくれる?

34 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 17:56:24 ]
そんなん#ifdef _DEBUGとかでくるめばよかろう

35 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:01:18 ]
assert は NDEBUG が #define されてるかどうかで中身が変わる。

NDEBUG が #define されていると assert は何もしない。
NDEBUG が #define されてなければ、条件が false だったら abort する。

36 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:02:07 ]
横からサンクス

37 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:04:15 ]
>>35
どうもありがとう


38 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:18:53 ]
みんな、マニュアル読もうな


39 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:26:28 ]
お前が一番読め

40 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:34:51 ]
abort()ってUnixとかだとコアダンプを吐いて終了するのが普通だけど
Win+IDEとかで開発してるとデバッガが起動してくれたほうが何かと便利なので、
abort()ってあんま便利じゃない希ガス
my_abort() { char **nullpo = 0; *nullpo = "ガッ"; }
みたいなの作って、強引にSEGV起こしてデバッガ起動させたほうが便利かも

例外も、スローされた場所が分からないという意味では、微妙に役に立たない
面があるよね、C++だと



41 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:44:34 ]
>40
マクロで__FILE__と__LINE__を引数に取る例外クラスを作ればいいかと思う。
前に適当に作ったんだけど実際に使ったことがないので使い勝手はなんともいえん

JavaのprintStackTraceみたいのがあればいいけどね

42 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:58:12 ]
>>40
Visual Studioだと、assertも引っかかったときや
例外が投げられた時点でデバッガに移れるぞ。
スタックの状態はassertやthrow式の時点のものが見れる。

43 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:26:30 ]
>>41
スタックトレース見れるとそうでないとでは随分違うよね。
>>42
ああ、そうだっけか。なら、同じかな。
SEGVだとデバッガがインストールされていない場合でもDr.ワトソン経由で
コアダンプが吐かれるのがいいかなとも思うけど。

44 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:51:12 ]
gccだとバックトレース取れるみたいだな
ttp://0xcc.net/blog/archives/000067.html

移植性も糞もないがw

46 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 20:52:56 ]
すれ違いかもしれませんが、行数の多いものをコンパイルすると一定以上の上部行数が
表示されないんですが、表示させる設定はあるのでしょうか?

47 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 20:54:46 ]
意味がわからないが、moreをパイプとか

48 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 20:55:33 ]
一定以上の上部行数って何のよ。エラーメッセージ?
環境は?

49 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:07:53 ]
環境はwindowsXPでCPadとLSI C-86を使っています。
各ソートの詳細な動きを見たいんですが、エラーではないと思いますが
下のソースを実行すると0123485679から上が表示されないんです。
説明が下手ですいません。


50 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:09:31 ]
printf("%d",rand())



51 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:09:33 ]
このぺーじのを参考にしています。
ttp://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html


52 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:10:48 ]
そのぺーじは参考にしてはいけません。

53 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:13:10 ]
つーか今時LSI C-86か
VS2005 Expressとかがタダで使える時代に

54 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:24:55 ]
原始人なんですいません

55 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:21:51 ]
携帯から失礼します。
C言語の話なのですが同じ型の
二つの構造体をビット演算子で
比較することは不可能なのでしょうか。

職場でさっきやってみたら
コンパイルエラー。。。

57 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:27:15 ]
別にwindowsでもバックトレースは取れるべ
www.codeguru.com/cpp/w-p/system/threading/article.php/c10317/

58 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:28:19 ]
ビット演算子で比較って何よ。
ビット演算子は比較するためのものではありません

59 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:34:16 ]
なんだか、intならビット演算で比較ができるとでもいいたそうな56だなー
#そりゃ、算術演算も究極的にはビット演算だけどさ

60 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:39:59 ]
アセンブリ言語的には TEST 命令があるから
ビット演算で比較というのもナシではないけどね。



61 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:46:35 ]
>>46
LSI C-86は使ったことも無くESPしてみるけど、DOSコンパイルなの?
表示行が多くて、始めに出力した内容がDOS窓を上にスクロールしてもみえません。とか?

62 名前:56 mailto:sage [2007/08/07(火) 23:29:26 ]
家についた>>56です。
少しスレを荒れさせてしまったようで申し訳ありません。

struct point {
int a;
int b;



int z;
};

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



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

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

と思った次第でございます。

63 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:32:35 ]
地道に1個ずつやるしかない。

64 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:35:31 ]
>>62
もしint aとかが1ビットしか使っていなければビットフィールドを使う手もある。
とはいっても、量によっては結局何行か必要になるわけだが・・・

65 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:52:05 ]
それでいいならmemcmpでいいだろ。
でも構造体にはパディングが入る可能性があるので
規格上は動作が保証されない。
やっぱメンバごとに比較するのがよいと思われ。

67 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:54:46 ]
論理積? &&の方?、
left.a && left.aと
left.b && left.bと
...
それぞれの関係がわからない・・・
a-zまでをさらにまた&&で結合させるの?

68 名前:56 mailto:sage [2007/08/08(水) 00:15:37 ]
56です。
>>67さん
論理積と書いてしまって混乱させてしまったようですが
ビットAND演算子(&)を想定しています。

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

それに大して構造体Bで用意したメンバa-z(0x01 or 0x00)
を各メンバ同士ビットAND演算子(&)で演算を行って
フラグを残したり、落としたりという処理をしたかったりしてました。

69 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 00:19:07 ]
一つの変数に複数のフラグを持たせるか、そういう関数作るが一番いいと思う。

70 名前:56 mailto:sage [2007/08/08(水) 00:20:19 ]
56です。

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

アドバイスくださった皆様どうもありがとうございました /平伏



71 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 00:23:55 ]
bitset.hのような話?

72 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 00:31:10 ]
>>70
>思えば同じ型の構造体でも丸ごと代入は許されていない
普通にできるけど。
--
struct {int a; int b;} a = {1, 2}, b;
b = a;

73 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 00:31:35 ]
>>70
構造体丸ごとの代入は許されてるよん。
代入しか許されてないけど。

74 名前:56 mailto:sage [2007/08/08(水) 00:44:30 ]
構造体丸ごとの代入
→ググッたら普通に出てきた。。。
無知で申し訳ないです

75 名前:デフォルトの名無しさん [2007/08/08(水) 05:24:03 ]
while (str != null) {
hoge
)
みたいな関数についてなんですが、
なんでstr != nullで動くんですか?
文字列の終わりはnullじゃなくて、¥0じゃないんですか?
nullは無効なメモリアドレスで、
¥0とは違う意味じゃないんですか?

76 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 05:37:27 ]
違う意味だね。
だから、文字列の終わりを判定するコードじゃないんだろう。

77 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 05:45:48 ]
>>75
strは文字配列へのポインタで、
まさにstrが無効なメモリアドレスでない間ループを回すコードじゃないのか?
strの型を確認してみるんだ。

78 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 09:04:05 ]
在宅アルバイトならチャットレディがオススメ。
はっきり言ってこんなに楽で自由で高収入のアルバイトは
ありません。私も経験者ですので自信があります。
下記のサイトに詳しく説明してあります。
www2.atpages.jp/nicl1216/




81 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 09:28:53 ]
36歳独身男性でも応募できますか?

82 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 10:33:24 ]
86歳♀ですが応募できますか?

83 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 10:48:59 ]
21歳独身男性結婚する気なしでも応募できますか?

84 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 13:25:12 ]
>>81
見た目と声がレディなら、アソコはどうなっていても構いません。

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

>>83
年は関係ありませんし、結婚願望はない方が好ましいですね。
ただし、見た目と声は(´∀`*)でないとダメです。

85 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 13:25:38 ]
3チャイです。キリンさんが好きです、でもゾウさんの方がもぉっと好きで〜す♪

86 名前:DEFORTの名無し [2007/08/08(水) 20:27:50 ]
ちょっと質問したいんだがどこかのサイトに無料のCのコンパイラないかな
知っている人がいたら教えて♪

87 名前:DEFORTの名無し [2007/08/08(水) 20:30:16 ]
これはスレちがい?

88 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 20:32:36 ]
MinGWとかVisualC++2005ExpressEditionとか

89 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 20:49:29 ]
gcc

90 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 20:51:20 ]
OSくらい書こうや
WindowsXP?



91 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 21:05:57 ]
>>86-87
あほすぎで笑うとこですよね?

92 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 21:14:13 ]
DEFORT じゃなくて DEFAULT だよな

93 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 21:17:27 ]
W

94 名前:デフォルトの名無しさん [2007/08/08(水) 23:24:39 ]
いくつかのC言語の初心者向けの書籍をいくつか読んで気になった事があるのですが、
%d や %s などの呼び方が書籍によって「変換指定子」や「変換仕様」と違い、
どんな条件で変わっているのか調べても判らず困っています。
これはどちらか間違っているのでしょうか?

95 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 23:29:51 ]
「変換指定子」は d とか s とか変換方式を表す文字のみを指す。
「変換仕様」や「変換指定」は % で始まり「変換指定子」で終わる全体を表す。

96 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 23:34:13 ]
>>94
あなたが間違っています。

97 名前:デフォルトの名無しさん mailto:sage [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を使うべきなのか。。。

98 名前:94 mailto:sage [2007/08/08(水) 23:41:28 ]
>>95
ありがとうございます、助かります。

99 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 23:48:46 ]
>>97
www.ipa.go.jp/security/rfc/RFC3174JA.html

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

ワガママですみません。



101 名前:97 mailto:sage [2007/08/08(水) 23:57:40 ]
追記。
libssl.aをリンクすれば良いのですが、
libgnutils-openssl.soとかあるので、共有ライブラリで何とかならんのかなーと。


102 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:03:41 ]
わざわざ面倒なことしてライブラリ使わんでも、それコピって使えばいいと思うが・・・
こだわる理由がわからん。

103 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:04:36 ]
ソースがでかくなるのやじゃないですか?

104 名前:デフォルトの名無しさん [2007/08/09(木) 00:06:30 ]
sha.h みつけた
mist.suenaga.cse.nagoya-u.ac.jp/document/sha_8h-source.html

105 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:08:29 ]
>>104
C++っすね。。。

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

この辺が出てくるのですが。。


106 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:10:05 ]
>>103
1個のファイルに全プログラムを書いてるとか?

107 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:18:55 ]
>>106
いえいえ。
もし既に標準ライブラリとしてRHEL4で提供しているのであれば、それを使った方が良いと思ってるのです。
javaでもメッセージダイジェストのクラスjava.security.MessageDigestがありますし。
できれば標準で提供されているものに乗っかりたいかなと。

Cとjavaではそもそも思想が違うと言われたらそうかも知れませんが。。。

108 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:23:16 ]
変態!変態!変態!!

109 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:30:48 ]
>>108
そう?

110 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:33:06 ]
すみません、どなたか教えて頂けないでしょうか。
C言語で、以下のものを作成したのですが、

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

この時に*name[]に入った配列の数を知るにはどうしたら良いでしょうか。
(上記の場合、自分では「それぞれの文字列の先頭のポインタが3つ入っている」という認識です)




111 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:33:42 ]
sizeof name / sizeof name[0]

112 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:37:03 ]
>>111
配列の数を知る事が出来ました。
ありがとうございます。


113 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:38:10 ]
えっと、なぜint *?
char * name[] = { "hoge", "hogehoge", "hogehogehoge" };
sizeof ( name ) / sizeof ( char * )で3が得られる。

114 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:39:46 ]
みんな、簡単な問題だと思って、レスが早いよ!!

116 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:41:55 ]
別スレに来たのかとおもた

117 名前:110です mailto:sage [2007/08/09(木) 00:47:09 ]
自分の認識ではname[]へは、
[satouへのポインタ]
[takahashiへのポインタ]
[suzukiへのポインタ]

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

この辺りが曖昧でして。申し訳ありません。


118 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:50:06 ]
皆様突っ込みどうぞ

119 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:52:05 ]
>>117
数がいくら増えようが、char *もint *も必要とするメモリは変わりない。
ってか、name[]に256を超えるポインタを格納することを考えてintにしたのか?
だとしたら激しく勘違いしているぞ。

120 名前:100です mailto:sage [2007/08/09(木) 00:54:21 ]
すみません、ソース見てみたらchar型で宣言してました。
int型に変更してコンパイルしてみたところ
大量のwarningが出ました。
(エラー内容:warning initialization incompatible pointer type)

お騒がせして申し訳ありません。




121 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:56:05 ]
>>117
ポインタが指し示す値の型がintならint*を使うしcharならchar*を使う
指し示した先の型が表せる値の範囲は違ってもポインタ自体のサイズはint*でもchar*でも同じ

122 名前:110です。 mailto:sage [2007/08/09(木) 00:58:30 ]
↑すみません>>120 = >>110です。
char型の配列を、
name[] ={...}内に入っている分を確保するという事で良いでしょうか。


123 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 01:01:07 ]
違う。char *を{...}の中にある要素数だけ配列として確保する。
だから、下の二つはnameで確保するメモリは同じ。
char * name[] = { "a", "b" };
char * name[] = { "aaaaaaaaaa", "bbbbbbbbbb" };


125 名前:110です mailto:sage [2007/08/09(木) 01:15:45 ]
皆様へ

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

ありがとうございました。


126 名前:46 mailto:sage [2007/08/09(木) 04:02:22 ]
>>61書き込みを遅くなりまして申し訳ありませんでした。
>>始めに出力した内容がDOS窓を上にスクロールしてもみえません。とか?
そのとおりです。何か対処法がありましたらぜひ教えてくださいよろしくお願いします。


127 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 04:06:27 ]
どんだけ〜

128 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 07:55:37 ]
>>126
所謂DOS窓を縦に引き伸ばしてみては如何でしょうか。
或いは、リダイレクトでファイルに落としてエディタで見るとか、
パイプラインでmoreに繋いで見るとか。

って、どう見ても言語ネタじゃないね。

129 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 11:02:45 ]
>>97
うちのUbuntu系のLinuxには /usr/lib/libssl.so があるんだぜ。


130 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 11:34:48 ]
>>126
ワロタwwプログラミング以前の問題だなw



131 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 13:18:07 ]
左上のアイコン右クリック>規定値>レイアウト>画面バッファのサイズ>高さ を増やすとか

132 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 13:22:16 ]
>>126
出力をテキストファイルにリダイレクトするとか

bcc32 -Etest.txt test.cpp > result.txt

133 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 16:49:44 ]
ファイル入出力で質問です。
ファイル保存のダイアログを出して、適当なところに保存して
また別にfopen("test.txt", "w");
で保存すると、保存ダイアログが出てたフォルダに保存されてしまうのですが
これを、実行ファイルと同じフォルダに保存するようにしたいんですけど
どうすればいいでしょうか?

134 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:13:51 ]
カレントディレクトリを実行ファイルのあるディレクトリにすればいいんじゃないの?

135 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:20:44 ]
>>133
つまりユーザはダイアログで保存ディレクトリも含めて保存先を指定したのに
それを*無視*して実行ファイルと同じディレクトリに*無理やり*保存したい
ってこと?

ユーザ権限について調べてみるといいと思うよ
Unixは言うに及ばず、WindowsであってもVistaでは厳しくなったようだから

136 名前:135 mailto:sage [2007/08/09(木) 17:24:09 ]
ああ、
> また別にfopen("test.txt", "w");
> で保存すると、
と書いてあるから、ユーザに指定させたのとは無関係に、プログラムが
勝手にこしらえるファイルの話か?
だったら、自分で実行ファイルのディレクトリを取得して、
フルパスで指定汁。カレントがどこだか分からないのだから。

とは言え、パーミッションには注意。Unixならもともとそういう設計は論外な。

137 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:27:59 ]
>>134
>>135
アドバイスありがとうございます。
ダイアログで保存するものと、fopenで保存するものは別のものなんです。
ただダイアログを出さないで保存したいなと思いまして。

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

カレントディレクトリを実行ファイルのあるディレクトリにすればいいとは思ったんですけど
やり方がわかりませんでした。

138 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:29:46 ]
GetModuleFileName()でexeのファイル名を取れ

139 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:31:32 ]
>>133
OFN_NOCHANGEDIR

140 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:32:31 ]
int main(int argc, char *argv[])
ってやると、argv[0]に実行ファイル名が入るよ



141 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:37:02 ]
>>140
この場合、そのことに何の意味が?
まさか、argv[0]に必ずフルパスが入っているなんて能天気なことを想像してたりしませんよね?

142 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:44:13 ]
>>141
フルパスが入るようにコマンドラインを入力するんだよ
大丈夫か?

143 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:45:26 ]
>>142
アプリの都合でアプリの存在するディレクトリにこしらえるファイルのために
何でユーザがアプリの起動方法を指図されなければならないのだろうか

144 名前:133 mailto:sage [2007/08/09(木) 17:48:56 ]
みなさんありがとうございます。

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

ありがとうございました!


145 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:49:28 ]
argvやカレントディレクトリに仮定を置くのは糞デザイン

146 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:50:46 ]
>>144
それじゃ、カレントがexeのディレクトリと同じじゃないと
意味無いよ。確実にexeが存在するのと同じ場所にファイルを作りたいなら
フルパス指定するしかない。

147 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:58:50 ]
GetModuleFileName()でフルパスを得て
_splitpath()で分解して
sprintf()で結合とかどう?

148 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:09:56 ]
ダメ

149 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:23:43 ]
exeと同じフォルダに書き込もうとか思っていると、
VistaのUACではまるかも。

そこに至るまでの道のりは長いだろうけどね。

150 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:29:17 ]
何をさも自分が苦労したからって



151 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:38:38 ]
>>150
北極行くのに南極経由するような人なんだから触れてやるな

152 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:56:11 ]
>>150
「さも」の使い方がおかしい

153 名前:133 mailto:sage [2007/08/09(木) 19:02:17 ]
すいません。だめでしたね。
>>147
の様な処理で分解してstrcatで結合して
それっぽい動きになりました。

154 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 19:50:02 ]
ファイルダイアログで選択して別ファイルに保存、、、
C#のスレでまったく同じ質問があったな、しかも同じ日
どっかの課題かなにかなのだろうか

155 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 19:51:14 ]
ただのマルチだろ

156 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:16:59 ]
いや、だって言語違うぜ?

157 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:17:54 ]
右も左も分からないんだろう

158 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:21:21 ]
うーん、向うはC#のソース出してたし
解決の仕方も解決した時刻も違うから
同じ人とは思えないなあ
質問者に種あかししてほしいとこだが

159 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:36:30 ]
ファイルダイアログなんてよくある質問じゃん。

160 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:40:44 ]
全部同じ奴だろ



161 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 23:17:50 ]
包茎を短時間で修正するプログラムの
開発って難しいですか?

162 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 23:21:06 ]
包茎と短時間と修正の定義次第

163 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:35:49 ]
いつから配列の定義の要素数に変数が使えるようになったん?
99年から?
void func(int n){
 int array[n];
 :
}
とか。。。

164 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:36:20 ]
C99 から

165 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:37:50 ]
やぱり。即レスども。
個人的にはその仕様はうれしい。

166 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:44:37 ]
>>165
ここを参考
seclan.dll.jp/c99d/c99d04.htm#dt19990719

167 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:49:43 ]
longjmpするとリークする可能性があるから、気をつけたまへ

168 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 08:39:01 ]
C99とC/C++は互換性無いから別スレに分けた方がいいと思う。

169 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 08:51:48 ]
可変引数マクロは非C99処理系にも是非輸入して欲しい

170 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 09:01:38 ]
素直にC99使えば



171 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 09:01:53 ]
>>168
C と C++ 用にそれぞれ専用スレがあるだろ。問題があれば誘導すればいい。

172 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 09:25:09 ]
>>172 ss << ifs.rdbuf();

174 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 10:44:50 ]

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

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

あと、ディレクトリ内にある全ファイルの名前取得みたいなことは
標準ライブラリだけででけますか?

175 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 10:52:02 ]
>>174
どっちもだめ
ディレクトリのないファイルシステムもあるんで、CやC++の標準は
ディレクトリがらみを一切扱っていないはず

177 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 10:57:35 ]
>>168
C99はCであって、
互換性がないのはCとC++

178 名前:漏れが書かなくてもきっと誰かが書く mailto:sage [2007/08/10(金) 10:58:24 ]
>>176
そこでboostですよ。

179 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 11:12:01 ]
>>178
無論そんなことは知っているが、>>174は「標準ライブラリだけ」と
2度も強調しているんだし、非標準の方法があることぐらいは知ってて
聞いてるんだろ

180 名前:175 mailto:sage [2007/08/10(金) 11:23:23 ]
ごめんあほなこと書いた
> stringstreamのpubsetbuf()も有効とは限らない
そもそもpubsetbuf()を入力を食わせるのに使えるはずがないな



181 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 11:26:26 ]
>>179
>178の名前欄。

つーか、>176はなんで「扱っていないはず」なんて曖昧なままにしておくのだろう。
調べれば直ぐに答が出ることなのに。

182 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 11:28:03 ]
>>181
すまん、扱っていないことは知っている
理由のほうが推測だ

183 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 11:35:59 ]
>>182
なるほど、それは失敬。そしてその推測は妥当だろう。
実際、CP/Mやtronにはディレクトリがない。

184 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 11:42:45 ]
まぁ一方ではsignal()なんかが標準だし
わけわからんところもあるよな

185 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 11:50:07 ]
大丈夫、signal()は内容が規定されていないから存在しない環境では何もしなければいいから。

186 名前:174 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:34:48 ]
いいえ

*(p++) の値は 'h' になります



191 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:37:41 ]
いいえ

*(p++) の値は 'g' にもなります

192 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:37:42 ]
はい、トムはペンです

193 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:38:25 ]
出力してみりゃ分かることだろうに。
2ch に書き込むより早く分かる。

194 名前:デフォルトの名無しさん [2007/08/10(金) 12:44:01 ]
*(++p) オヌヌメ

195 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:52:10 ]
*next(p)
^^;;

196 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:53:03 ]
>>189
p が指す値と
式 *(p++) の値を混同してないか?


197 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:53:46 ]
有り難うございます。
ちなみに
*pには何が代入されているんですか?

198 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 13:01:58 ]
*pには何も代入されていないと思いますが。

199 名前:デフォルトの名無しさん [2007/08/10(金) 13:02:37 ]
夏・・・

200 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 13:09:34 ]
最近は季節に関係なく年中馬鹿が湧く、と考えていたけど、
やっぱり長期休暇は頻度もスケールも一回り違うかな。



201 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 13:36:08 ]
出力してみりゃわかることをうだうだと質問してからに・・・

202 名前:デフォルトの名無しさん [2007/08/10(金) 15:01:04 ]
ちょっとしつもんします
ギャルゲーとかで「フラグをたてる」ていうんですが
フラグというのはビットなんですか?

203 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 15:03:07 ]
ビットなフラグはビットフラグ
ビットじゃないフラグも当然ある

204 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 15:07:07 ]
「立てる」っていう表現をするようなフラグなら、
「立てる」か「倒す」かだからビットだろうなぁという気はする。

205 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 15:10:54 ]
死亡フラグは立てるのに倒れてしまう件

206 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 15:22:38 ]
私生活では全くフラグが立たない件について

207 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 15:26:46 ]
>>204
boolは大抵intかcharで実装されている罠。

208 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:13:01 ]
CDPATH はその名前の通り cd コマンドにしか効かないんじゃない?
-I~/xxx/include
ってやれば?



211 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:15:55 ]
CDPATHはcdに関係するだけでコンパイラには関係ないんじゃないか?
何がしたいのか良く分からないけど、普通に-I~/xxx/include/とか書くとか

ていうか、そもそも-Iの後ろにスペースあるのはOKだっけ?

212 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:39:34 ]
なるほどフルパスで指定しないと駄目なんですね、あと' 'が入ってても駄目と
それら二点に気を付けて打てば通りました
助言ありがとうございました

213 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:45:54 ]
>>212
相対パスでもいけるけど、「ソースがある場所からの」相対パスであることに注意

214 名前:213 mailto:sage [2007/08/10(金) 19:47:00 ]
あ、-Iオプションで指定する場合はそうじゃないか?
すまん、俺自身あやふやになってきた。忘れてくれ

215 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:53:16 ]
-Iオプションは相対パスでもいけるハズ。
たぶんコンパイラ実行時の作業ディレクトリかなんかからの相対パスになると思うけど・・・。
いつもmakefileコピペ改変でやっちまうから、俺も記憶があやふやだ・・・

216 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 20:29:01 ]
相対パスでOK。
Makefileに-Ipathと書いておいて、ln -s どっかの/pathとかよくやる。

217 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 22:50:17 ]
そのクラスに virtual 関数を作ればいいんじゃないの?
instanceof は dynamic_cast
いちおう typeid もあるけど

219 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 22:52:33 ]
>>217
funcをHogeの仮想関数にする(必要に応じて純粋仮想関数にする)。
そして、FooとBarがそれぞれオーバーライドする。

instanceofとかisとかがある言語でも、
そんな書き方よりこういう仮想関数でやる方法が普通だぞ。

220 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 23:00:22 ]
>>217
void func(const Foo& foo);
void func(const Bar& bar);
...



221 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 00:26:58 ]
Lisp じゃないから。

222 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 10:54:08 ]
>>217
基底クラスが派生クラスの面倒までみるべきではないよ

223 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 13:04:07 ]
>>222
funcはHogeのメンバ関数じゃ無い、とかそんな状況な気もする

224 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 13:54:38 ]
func から Hoge の仮想関数呼べばいいだけだよ

225 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 16:49:10 ]
あぁ、いや。
単に基底クラスに面倒見さそうとしてるわけじゃないんじゃない?というだけの話で。

226 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:52:01 ]
ダブルディスパッチ使えばいいじゃん。

228 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 06:43:01 ]
それなにぬねの

229 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 08:45:40 ]
そりゃそうだ。

232 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 10:19:39 ]
スタックオーバーフローで落ちるだけじゃないの?

234 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 11:51:22 ]
うん。まさに、スタックオーバーフローで落ち…
…たときに、アプリケーションエラーって出ないのが

デバッガから起動すれば、ちゃんと
Stack overflow - code c00000fd (first chance)
って捕捉されるんだけど…。

235 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:08:26 ]
コンソールアプリだからじゃないのかな。

236 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:10:47 ]
int ch = ' '
if (!isspace(ch) && !iscntrl(ch))
break;
という文なのですが、
何故かbreakされてしまいます。
chがスペースでないときかつchが制御文字でないとき
にbreakされるはずなのですが、条件式間違っているでしょうか?

237 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:14:01 ]
gcc gdbではSIGSEGVでstack over flowにならんのだけど
検出する方法は別にあるんだろうな、あるんだろうね

238 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:26:17 ]
>>236
動かない断片を提示されてもなんとも言えませんが。
症状を再現できる最低限のロジックを提示してみてください。

239 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:33:45 ]
iscntrl()はロケールに依存するとされるし、
chか、iscntrl()の挙動が直感に反しているのでは

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

をifの前に置いてみては。

240 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:41:07 ]
>>232
気になって試した

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

ただし、VCのオプション的にはスタックサイズが4Kより小さいときでも、
/Gs0 とか付ければいけそうに思えるし、実際アセンブラリストに
__chkstk の名前でてるんだけどダイアログはでない。謎。



241 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:50:44 ]
誰か、エスパー頼む

243 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 14:16:01 ]
ははぁ、成る程!
ちなみに (!isspace(ch) && !iscntrl(ch))
な文字コードってどんなのが当てはまりますかね?

245 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 14:38:10 ]
>>244
空白文字でも制御文字でもない文字。
まぁ、大抵の可読文字が該当する罠。

246 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 16:49:05 ]
すいませんわかりました。
自分馬鹿だorz
ほんと皆さん電波な質問して申し訳有りません
二徹して疲れたので寝ます

247 名前:デフォルトの名無しさん mailto:sage [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 \




248 名前:247 mailto:sage [2007/08/13(月) 19:03:44 ]
(ミスして送信しちまったorz 続き)

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

test.dと.oのルールを同じ行で定義しているのが問題かと思ってわけてみたり
test.d(つまり自分自身)のルールを定義しているのが問題かた思ってtest.dを消してみましたが
解決しませんでした

249 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 19:48:51 ]
インクルードパスにドライブ名が入ってるとだめらしい
C: とか H: とか
代わりに /cygdrive/c/ や /cygdrive/h/ を使うと大丈夫とかいうことらしい

250 名前:247 mailto:sage [2007/08/13(月) 20:15:55 ]
>>249
そのようにしたらmakeのエラーは消えdebugができるようになりました
しかし今度は
Invalid project path: Include path not found (\cygdrive\\root\usr\src\boost)
のような警告がでてきましが、これなら実害ないので我慢します
助言ありがとうございました



251 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 07:26:45 ]
NULLはヌルポインタ、\0はヌル文字
当然、ヌル終端文字列は後者を末尾に持つ

253 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 07:27:29 ]
parse内のgetcharがEOFだった時、何を返すんだ?
思いっきりバグ、もしくはコピペミスだろ。

254 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 07:27:44 ]
どこの\0とどこのNULLだ?
12行目の'\0'と24行目のNULLなら別物だし、
比較も代入もしていないが

255 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 07:37:24 ]
parseからNULL返って来ないな

256 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 07:40:16 ]
お前ら朝から優しいな

257 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 07:41:58 ]
あーそうか、parseが切れてるのか。
{}が対応してないな。

258 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 07:54:20 ]
朝から結構人がいてワロタw


259 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 08:15:31 ]
こんな感じで隠れてる

    (⌒─-⌒) EXILE!EXILE!
  〃((´・ω・`)) ミ ○
((´・ω・`))  O((´・ω・`))   
Oヽ(    )〃ノO      
   ∪⌒∪          
""" "" " """ "" " """ "" " ""

260 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 09:55:22 ]
亀ですが

>>240 ありです、それかもな感じ 何かがひらめいた予感 ちょっと調べてみます
>>235 ちなみに、WinMainでやってみても、なんもいわれんかったのです;



261 名前:デフォルトの名無しさん mailto:sage [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文字以上になると
スタックオーバーで動作は不定になる。うまく動いてもそれは運がいいだけ。


262 名前:251 mailto:sage [2007/08/14(火) 13:07:51 ]
どうやってソースを窓から放り投げるんだ・・・?

263 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:12:15 ]
ソースを窓から放り投げるを開始するには、まず窓を開けます。

264 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:12:43 ]
バッファオーバーフローであってスタックオーバーフローとは(ry

265 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:24:09 ]
なんでそんなこともわからないのですか?

267 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:29:50 ]
>>266
まぁそう言わんと。

>>265
EffectiveC++を読むことをお勧めしておきます。

268 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 14:09:57 ]
>>265,268
hoge という名前の関数は B に 1 個あるので、それ以上辿って A まで探しには行かない
で、見つかった hoge() は引数が一致しないのでエラー

C++ と Java が一緒だと思ってるのが間違い

270 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 14:12:39 ]
>>269
>hoge という名前の関数は B に 1 個あるので、それ以上辿って A まで探しには行かない
なるほど。すっきりしました。ありがとうございます。



271 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:26:39 ]
wavファイルの再生について質問があります。
PlaySoundを使う方法は簡単にできたのですが、wavファイルを実行ファイルに組み込むことはできるのでしょうか?
できるなら、方法や資料を教えて頂けませんか?
宜しくお願いします。

272 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:44:38 ]
とりあえずC/C++とは関係ない

273 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:46:19 ]
実行ファイルの種類による

274 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:47:42 ]
PlaySound リソース でぐぐれば?

275 名前:271 mailto:sage [2007/08/14(火) 17:15:30 ]
PlaySoundでできるとは思っていませんでした。
本当に助かりました。ありがとうございます。


276 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 20:24:53 ]
>>268
そんなサイトあったのか、本買っちゃったよ

278 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 20:44:54 ]
>>277
そのサイトはヒント程度だぞ。何やら勘違いに近い記述も見られるし、本は読むべき。

280 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 20:56:11 ]
>>276
関数テンプレートの場合、完全な特殊化はできるが部分特殊化は出来ない。
代わりに関数オーバーロードが使える。



281 名前:276 mailto:sage [2007/08/14(火) 21:48:52 ]
やっぱ無理なんすか
テンプレート引数を汎用関数のtraitsとして利用したかったのですが…
変数の型を態々書くくらいなら関数オブジェクトとして作る方が良さそうですね

282 名前:261 mailto:sage [2007/08/14(火) 23:00:51 ]
>>264
え?スタックオーバーフローなんて一言も言ってませんがなにか?
              ~~~~~~

283 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 03:27:58 ]
>>282
コレは他人が装ってる釣りか?
ちょっと釣られて見ますよ

284 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 04:00:47 ]
演算子の優先順位についての注意。インクリメント(++)/デクリメント(-- --)演算子と間接参照演算子(*) の優先順位は、間接参照の方が低い。だから、
while(1){
sub( *++p );
}
というコードは頻出するが、単独の文
*++p;
は間接参照の文が無意味である。(ポインタpをインクリメントした後で、ポインタが示す値を参照し、値を捨てる)
って言う文があるのですが、
「単独の文
*++p;
は間接参照の文が無意味である。」
ってどう意味なのでしょうか?
実例を挙げていただけないでしょうか。

285 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 04:12:51 ]
>>284
間接参照演算子「*」
間接参照はポインタの先を「*」で参照すること。

int main(){
int a=10;
int *p=&a;
*p; /* <- この文意味ないべ? */
return 0;
}

286 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 05:07:32 ]
ああ、そういう意味だったんですか。
分かりました。
自分、日本語読む力が無いなぁ。

287 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 05:31:19 ]
>>284
これおかしいな。
ここで例としてあげるべきなのは *p++ であって *++p ではない。
そもそも * と 前置 ++/-- とは優先順位が同じだ。

288 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 07:12:56 ]
>>284
内容がひどいのでさらしておこう。
www.nurs.or.jp/~sug/soft/tora/tora6.htm


289 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:09:10 ]
>sub( *++p );
>というコードは頻出するが
こらこら、副作用があるコードを関数呼び出しで書いちゃ遺憾。
もしこのサイトにあるように頻出するとしたら、よっぽど腐った環境だ。

つーか、このサイト管理者、頭大丈夫か?
www.nurs.or.jp/~sug/soft/index.htm

290 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:21:09 ]
別に書いていいだろう。
未定義動作でもあるまいし。

コーディングスタイルの話としても、
宗教戦争になる程度のこうじゃないといけないとは言えない内容だな。



291 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:29:14 ]
>>290
その「sub()がマクロだったら」と考えてみてくれ。
いつ仕様変更でそのようなことになっても大丈夫なように副作用を発生させないのは常識だ。

292 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:35:04 ]
それだったら*++pではない場合にもいえてしまうんじゃないの?
マクロってなんなのかしらないけど

293 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:43:51 ]
なんだ、ただのもの知らずか。たとえばこんなの。
#define sub(x) (x < 0 ? -x : x)

294 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:44:08 ]
>>289
>こらこら、副作用があるコードを関数呼び出しで書いちゃ遺憾。
どいう意味?


295 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:56:22 ]
>>293
なるほど、マクロって絶対値ってことか

296 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:58:23 ]
そうだよ。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで

297 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:11:47 ]
>>296
いや、違うでしょ?

298 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:12:45 ]
>>297
そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで

299 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:14:25 ]
初心者歓迎とかスレタイにあるのに何やってるの

300 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:21:19 ]
>>299
そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで



301 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:27:40 ]
恥ずかしいからってそんな連投しなくてもいいのに

302 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:30:09 ]
あんああんあんああんあん

303 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:30:30 ]
>>301
そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで

304 名前:292 mailto:sage [2007/08/15(水) 09:35:28 ]
>>300,>>303
あなたの相手は僕でしょ?

305 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:36:37 ]
>>304
そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで

306 名前:292 mailto:sage [2007/08/15(水) 09:38:05 ]
マクロも知らなかった初心者に指摘されたのが悔しかったの?
プライドを傷つけてごめんね

307 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:42:16 ]
マクロも知らない初心者の来る所じゃないんだ。
どれだけそいつに時間とレスを割く必要があるか分かるだろう?
そんなレベルの低い奴が来ると釣りかと思う。

308 名前:292 mailto:sage [2007/08/15(水) 09:45:23 ]
>>307
マクロ知らないとは書き添えたけど質問したわけではありません
あなたの勇み足では?

309 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:49:39 ]
>>306の言ってる指摘ってひょっとするとコレ?
>それだったら*++pではない場合にもいえてしまうんじゃないの?
いくらなんでもマジとは思えん(だから>>293もスルーしたんだろう)。

310 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:50:25 ]
>>308
みんな馬鹿で、お前だけが正しいことを言ってる。
誰もお前の頭の良さについていけなくて、悔しさのあまり暴れてるだけなんだよ。

だからママの所に行っておいで。



311 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:52:13 ]
>>307
>どれだけそいつに時間とレスを割く必要があるか分かるだろう?
って
>そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
の事かwアホじゃね?

312 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:53:52 ]
>>311
日本語でおk

313 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:53:59 ]
>>311アホですね

314 名前:292 mailto:sage [2007/08/15(水) 09:55:13 ]
>>309
>>293のこれだけのレスをみれば、意図的にスルーしているとはとても…

315 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:55:59 ]
>>314
その辺が低脳。全て293のレスだと思ってやがる。

316 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:57:26 ]
>>315
見苦しい言い訳

317 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:57:57 ]
>>315
あああなたでしたかごめんなさいね

318 名前:307 mailto:sage [2007/08/15(水) 09:58:34 ]
どうせ俺の事も>>293だと思って勇み足で回答したとでも言いたいんだろう?
マクロも知らない初心者の来る所じゃないんだと思っている奴が、
わざわざマクロも知らない初心者に答えるわけがないだろう。

319 名前:292 mailto:sage [2007/08/15(水) 09:58:49 ]
>>317は僕です
しっかり名乗ります!

320 名前:292 mailto:sage [2007/08/15(水) 10:00:03 ]
>>318
マクロくらいわかるよw
フィーリングでね



321 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:00:14 ]
どう見ても292の方が見苦しい言い訳。
バカなんだからバカにされたくらいでレス繰り返さなくてもいいのに

322 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:01:24 ]
>>320
フィーリングで分かるなら空気くらい読めるだろ?

323 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:02:59 ]
>>295はうまい荒らしだったな

324 名前:292 mailto:sage [2007/08/15(水) 10:03:36 ]
あ、ずっと安価間違ってた
>>291さんでした

325 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:03:55 ]
>>318
初心者に答えるわけがない なんてレスの無駄だから偉そうに宣言しなくてもいいよw
答えないんじゃなくて答えられないんだろ

326 名前:309 mailto:sage [2007/08/15(水) 10:16:16 ]
結局>>306の言ってる指摘ってのはコレな訳?
>それだったら*++pではない場合にもいえてしまうんじゃないの?

327 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:18:32 ]
>>326
かもしれないけど、なにしろ何がどう「いえてしまう」のか
まるでわからん文章だからなぁ。

328 名前:309 mailto:sage [2007/08/15(水) 10:19:46 ]
>>326
意味わからんよなー

329 名前:309 mailto:sage [2007/08/15(水) 10:23:07 ]
>>326
多分、>>289から続く
>副作用があるコードを関数呼び出しで書いちゃ遺憾。
について言ってるんだと思う。

330 名前:329=309 mailto:sage [2007/08/15(水) 10:25:08 ]
アンカーミス。>>327ね。

後、>>328誰だw



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

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

実にどうでもいい


332 名前:292 mailto:sage [2007/08/15(水) 10:26:21 ]
適切な日本語ではなかったけど、脳の衰え始めている先輩方には難しかったかな?
むしろ適切であったとしてもまともにこたえる気はなさそうにおもえる

333 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:27:23 ]
2chで煽るのだけが生き甲斐の厨房に
煽り返す厨房か

334 名前:309 mailto:sage [2007/08/15(水) 10:44:58 ]
>>331
今は問題無いからいいって考えはどうかと思うぞ。後々の仕様変更に耐えられるコードを書く方がいい。
もっとも今回は副作用で問題が出るマクロにするのが一番悪いが。

>>332
>まともにこたえる気はなさそうにおもえる
何でそう思ったか知らんが結局質問は「副作用があるコードを関数呼び出しで書いちゃ遺憾って言ってるけど、それって*++pではない場合にもいえなくない?」って事か?

335 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:49:04 ]
>>331
話題がループするが、sub()がマクロなら問題だからするべきではないという話だろ。
件のサイトではsub()が何か提示されていないのだから、問題がないとは言えない。

336 名前:292 mailto:sage [2007/08/15(水) 10:54:44 ]
皆さんの話がかみ合ってないかもしれないので整理しましょう

*++pってなんですか?

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

ま、標準ライブラリの一部の関数はマクロで実装することも許されているけどな

338 名前:デフォルトの名無しさん [2007/08/15(水) 11:13:27 ]
>>336
死ね

339 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:32:32 ]
すみません、教えてください。

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

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

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

のように、同じ関数でiterator を返したりconst_iterator を返したりしたいんですが、上手くいかない……


340 名前:339 mailto:sage [2007/08/15(水) 11:40:56 ]
ごめん、忘れてください。超間抜けなこと聞いた。

暑くて頭がボケてたみたい……



341 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:42:17 ]
while(1) sub( *++p );

で意味をなす単項subってどんなマクロ(関数)なんだろ

342 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:48:41 ]
>>341
きっとこんなのだよ。
#define sub(x) putchar(x)

344 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:04:17 ]
>>342
そうだな。実際最悪だろ。

345 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:06:28 ]
マクロは名前空間にもくるめないしなあ

346 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:08:02 ]
>>342
実際、それが問題になることがあって、
min,maxを定義しないようにするための NOMINMAX というマクロが存在する

347 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:08:48 ]
>>342
実際そのマクロの存在の為に、VC6の<algorithm>にはstd::max, std::minがない。
これはC++の移植性において、由々しき問題である。

348 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:10:11 ]
まあVC6はそれ以前に色々ダメすぎだけどな
今となっては

349 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:10:29 ]
>>342
Effective C++でも第1項でいきなり問題視してるじゃん。

350 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:57:03 ]
マルチ死ね

353 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:18:31 ]
>>349
ttp://kamaitachi.blogdns.net/cgi-bin/izna/manage/img0351.jpg
これか。別にそんなに問題視はしてないように見えるが。

354 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:21:04 ]
問題視しまくりじゃないか。

355 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:47:21 ]
ここで言う「マクロと関数に名前の区別」というような点は問題視してない

356 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:56:09 ]
確かに>337が指摘しているような「大文字ではない」ことについてはなんら言及されていないね。

357 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:01:51 ]
>>349>>342宛なんだから、「ここで言う」はmaxマクロに対応させないと。

358 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:14:41 ]
なるほど。確かにそっちはそうだな。

359 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 18:29:58 ]
>>359
p が volatile int* であっても
*++p; と書いて、pがdereferenceされることは保証されてないだろ。




361 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 19:14:24 ]
>>360
すまん、よくわからんのだが「p が deference されることは保証されない」のは、特に

*++p;

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

*p;

でも同様だと言ってる?

362 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 19:24:20 ]
>>360
とりあえず volatile な *p; については

c0x.coding-guidelines.com/6.7.3.html

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

volatile int x;

x;

でも一緒。

363 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 20:19:08 ]
更にいうと

const volatile int x;

x;

でも処理系は x の読み出しを削除してはいけないし、
x の値を何かに使う場合複数回の読み出しで同じ値だと仮定してもいけない。
この場合の const は「書き込めません」っていう意味だ。

364 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 07:55:01 ]
"hoge" + 1
はポインタだが、
"hoge"[1]
はポインタではない。

366 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:01:25 ]
それは分かるんですけれども、
なんでコンパイル出来るのか?
が疑問なんです。

367 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:04:43 ]
>>364
char* p = 定数;

ならわかる?

368 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:13:50 ]
>>366
>pにはhのアドレスが代入される訳ですから。
間違い。

369 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:20:38 ]
>>364
C言語だと、整数からポインタへの代入は警告止まりになる。
C++ だとエラーになる。

370 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:38:00 ]
>>367,369
char* p = 定数;
いや、もちろんポインタに数値をキャストしなくても
代入出来ることは知ってます。
q = "hoge"[1];
ってコンパイラはどういう風に解釈するんですか?
>>368
>pにはhのアドレスが代入される訳ですから。
え、じゃ文字列の先頭のアドレスで正しいですか?



371 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:42:22 ]
>>370
"hoge"+1なんだから、当然'o'ヘのポインタだ。

372 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:43:32 ]
>>370
hのアドレス=文字列の先頭のアドレス
代入は+1が行われたあとだろ?
だからすでにアドレスが変わってる

373 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:45:27 ]
>>370
q = "hoge"[1];



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

は大体同じ。

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


375 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:05:40 ]
特に理由はない。
文法上問題がないから警告止まりでコンパイルされるだけ。

376 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:08:16 ]
> char q [] ="hoge";
> char *p = "hoge";
> はあきらかに違うのに
> char *q = "hoge"[1];
> がコンパイル出来るとまるでこの二つが同じように錯覚してしまって
> 間違いの元になるんじゃないかって思ったんです。

なぜ二つが同じように錯覚するの?

377 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:27:30 ]
>>375
ほんとだ。
char *x = "hoge";
p = x[1];
がコンパイル出来る。
x 0x85fd8
p 0x6f
pのアドレスってどこから出てきたんだろう?


378 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:28:33 ]
>>374
= の右辺に書かれた T 型の文字リテラルは T 型の static 配列と同じです
= の右辺に書かれた T 型の配列は T 型の配列の先頭要素を指す「Tのポインタ型」になります

理由としてはっつーか便利だし〜みたいな?

379 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:31:29 ]
>>377
'o' に決まってるだろう。

380 名前:デフォルトの名無しさん mailto:とか言ったらまた食い付いてくるかな?sage [2007/08/16(木) 09:36:05 ]
>>377
m9(^Д^)プギャー



381 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:39:47 ]
>>377
一応言っておくけど0x6fはアドレスじゃないよ
'o'に対応するアスキーコード
c-production.com/special/03090704.html

382 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:11:42 ]
>>383
本気で言ってるのか

385 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:20:58 ]
>>383
別物

386 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:44:01 ]
>>383
どっちもセミコロンが無いからエラーになる→同じこと
ってオチは無しだぞw

387 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:49:20 ]
>>383
>>364未満だな

388 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:49:57 ]
型名もないしな

389 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:52:18 ]
フフ

390 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 11:30:57 ]
void foo() {
 auto char *p = "hoge";
 auto char p[] = "hoge";
 …
}
とした時の挙動からして違うことは判るだろ



391 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 11:48:08 ]
char p1[] = "hoge";
char *p2 = "hoge";

p1[1] = 'a';
p2[1] = 'a'; // <=

392 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 12:16:13 ]
Perlの無名配列みたいに
{1000,100,10}[0] もいけたらいいのに

393 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 12:33:57 ]
>>393
こんな事出来るんだ。
知らんかった。

395 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 12:49:24 ]
>>393
うは、いけるんやwありがと

396 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:01:08 ]
配列として認識されるのか…すげー

397 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:45:24 ]
これでC99準拠のコンパイラがもっと増えてくれれば

398 名前:768 mailto:sage [2007/08/16(木) 22:36:05 ]
C99、便利だけどC言語としてみるとキモい・・・

399 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 22:38:18 ]
C++と同期とって進化してくれれば歓迎なんだけどな。

400 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 22:57:51 ]
C99準拠のコンパイラって少ないの?
GCCしか使ってないから知らんのだけど。



401 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:02:56 ]
>>400
Comeau

402 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:06:00 ]
前使ってた Borland C++ 5.5.1 は C99 非準拠だったな.

403 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:06:01 ]
ICC

404 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:20:10 ]
VC++ のやつが無視しやがってるから広まらないのかな。

405 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:20:51 ]
C99はDと同じ運命をたどればいいんだよ

406 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:22:13 ]
VC++はC++コンパイラだからC99対応しないよ、ってMSの
中の人が言ったんだっけか。

407 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:29:51 ]
確かにVC++8.0で試すと凄い勢いでエラー出るな

408 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:35:47 ]
まあ、C99 使うくらいなら C++ 使うってのは確かだが

409 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 00:35:35 ]
数式を画面に表示させるためのライブラリって無いでしょうか?
x^2みたいなのを、綺麗に表示するためのライブラリがほしいのです。
できれば、ソース公開している奴で、無ければソースは無くてもいいのですが
とにかく、アプリに組み込んで開発できる奴がいいです。


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

よろしくお願いします。

410 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 04:48:29 ]
>>409
ググっただけなんで、中身はシラネ。
www.vector.co.jp/soft/win95/prog/se363439.html



411 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:26:10 ]
ビット演算がうまくなるコツってないですかね?
全く使いこなせてないので、
他人のソース読んでて、使いこなせていると凄く羨ましいんですけれど。

412 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:27:47 ]
才能ないよ諦めた方がいい

413 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:37:52 ]
コラー!

414 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:49:50 ]
自虐し過ぎ

415 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 06:14:34 ]
>>411
グラフィックまわりをいじって変な画面効果とか作るのが楽しいかも
上達が見てわかるし

416 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 08:06:25 ]
>>411
エンディアンと変数型のバイト幅を意識すること。
算術シフトと論理シフトを意識すること。
コツっていうとこんぐらい?

フラグ的な使い方の話だったら、
必要になった時だけ使うのが良いんじゃないかなぁ。


417 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 09:16:08 ]
皆さんアドバイス有り難うございます。
ビット演算は大事ですからね。
精進します。
>>417
グヌヌ。
難しいぞ。分かんないっす。

419 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 09:22:07 ]
プッ ヘボすぎ

420 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 09:29:14 ]
~(a^c)&b
こうですか?



421 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 10:04:58 ]
タンクローリーを運転する人に見えたのは俺だけでいい。

422 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 11:18:41 ]
int foo;
int bar;
bar = (unsigned int)foo & 0x0fffffff;
という事をしょっちゅうしているプログラムがあるんですけど、
どういう意図を持ってこの処理をしてるんでしょうか?
最初は、int型の変数をunsigned int型にキャストしてint型の変数に代入すると、
例えば-5が代入されてたら4294967291になるのかなぁと思ってたんですが、
そういう訳でもないみたいですし。


423 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 11:21:44 ]
>>422
意図については、そのプログラムを書いた人に聞くのが一番!

あと、もう少し基礎を勉強したほうが良いよ

424 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 20:31:19 ]
はい

426 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 21:12:36 ]
>>424
if(b==(void**)0)

427 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 23:01:35 ]
>>426
キャストしたらダメだろ。
意味変わる。

429 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 23:07:24 ]
>>420
それでもいいけど、(b&~c)^aの方がシンプルだろう。

430 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 01:15:04 ]
a^b&~c ってなところか。

>>411
最低限の論理学の勉強をする。
ド・モルガンの法則とかは必須。



431 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 07:42:18 ]
#define NULL (void*)0
だから
ポインタへのポインタが"NULL"かどうかは
(void**)0で調べないといけない

432 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 08:20:03 ]
>#define NULL (void*)0
>だから
いいえ。

433 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:12:01 ]
世界中のC言語を使える人のコンピューターに対する理解度の高さの平均と、
世界中のJavaを使える人のコンピューターに対する理解度の高さの平均は、
どっちが高いですか?

434 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:16:53 ]
マルチ死ね

435 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:18:08 ]
>>433
スレ違い

436 名前:DEFORTの名無し [2007/08/18(土) 13:41:52 ]
ひさしぶりぶり
MinGWつかってみたけど微妙

437 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 13:47:02 ]
またお前か

438 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 14:28:50 ]
>>422
0x0fffffff でマスクってことは、下位28ビットが欲しいってだけじゃね。
あと、unsigned int へのキャストは無駄だな。

439 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 15:32:58 ]
>>431
どこからそんなデマを仕入れてきた?

440 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 16:02:21 ]
脳内



441 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 16:06:10 ]
新聞

442 名前:デフォルトの名無しさん [2007/08/18(土) 20:10:13 ]
ある特定のウィンドウがアクティブになった時に、そのウィンドウのメニュー内の
特定のコマンドを実行するようにしたいのですが、どのよう記述したら良いでしょうか?
具体的にはXSIとゆう3DCGソフトの「アニメーションエディタ/編集/オリジナルコマンド」
を自動実行させたいのですが、、、

宜しくお願いします。

443 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:13:48 ]
C/C++じゃなくてスクリプトで書けば?

444 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:16:44 ]
C/C++の勉強すれば分かるよ

445 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:24:05 ]
WSHとかの領域になるんかな?あっちの詳細を全部知ってるわけではないけれども

446 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:43:34 ]
new int[n]; ← このnのところは、何の型で渡すのか決められてますか?
intとかlongとか(負数はあり得ないので、unsignedでしょうか)

あと、Windowsの32ビット環境では、intとlongはまったく同じ型として扱っても問題ないですか?

447 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:45:47 ]
>>442
ウィンドウメニュー内の特定のメニュー項目が選択されたときって、
たぶん、WM_COMMANDとかのウィンドウメッセージが飛ぶと思うんだけど、
その具体的なパラメタを調べて、アクティブとかのイベント関係なく
直接呼んじゃだめなの?

もし、アクティブになると同時って条件をつけたいなら、
1)ウィンドウをアクティブにする
2)ウィンドウメッセージを送信する
っていうだけの簡単なプログラムを作るとか。

448 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:13:18 ]
>>446
特定の型には決まっていない。整数ならいい。
負の数になったら未定義動作。

int と long は違う型です。

449 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:30:05 ]
music8.2ch.net/test/read.cgi/musicjf/1187412818/72
おもしろいIDでた

450 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:32:34 ]
わざわざ他板のを持ってこなくてもいいんだよ



451 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:34:41 ]
>>448,446
>特定の型には決まっていない。整数ならいい。
C++の言語仕様の詳細は知らないけど、VCならsize_tでいいんじゃね
msdn2.microsoft.com/en-us/library/t48aek43(VS.80).aspx
msdn2.microsoft.com/en-us/library/ms859258.aspx

>int と long は違う型です。
これもVC(x86)の範囲内で同じようにつかえるかって質問なら、問題ないと思うけど
msdn2.microsoft.com/en-us/library/ms859270.aspx


452 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:36:23 ]
>>450
この板ID無いが。

453 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:57:33 ]
>>451
operator new 関数の第1引数は VC に限らず size_t 。
でもそれと new 式の配列要素数を表す式の型とは別。

サイズが同じだろうがなんだろうが int と long は違う型。
まったく同じ型として扱うのには問題がある。

454 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 03:13:14 ]
>>453
ごめん、1点分からないので、教えていただきたい。
とりあえず、>>446はVCの利用上(実装上)の制限が知りたいんじゃないの、
と思ったので、その観点だけで書いたのは自分の思い込みで、それで意見が
すれ違うのは仕方ないんだけど、

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

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

なので、「整数ならいい」ってのは純粋に言語仕様の話として語っているのか、
それとも、コンパイラの実装やソース記述上の制限を語る場合でも同じ回答
になるのか、気になって眠れなくなりそうなんで、正確なところが知りたいんだけど。

455 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 03:20:37 ]
 
   ________    
     /   |         
    /__  |     
   /   /.  |-―‐.                
  / \ /     |              
 /  ./      |          
   ノ        ヽ__」    


   |
 .―┼‐フ  
   |/   
  /|/ ̄ ̄ ̄\ 
 //|       | 
   |       |  
   |     (二X

456 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 03:39:56 ]
>>454
現行の規格ではだいたい >>453 みたいなことしか言えない。ある意味
これが正確なところ。

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

まだ規格化はされてないけどこんな話もある。
www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#624

457 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:38:39 ]
エラーの内容かけ。

460 名前:458 [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 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:41:46 ]
勉強してないからエラーが出る

462 名前:デフォルトの名無しさん [2007/08/19(日) 12:42:05 ]
どんなエラーがでてるの?

463 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:42:21 ]
最初に4行目にエラーが出ているだろう。
4行目を穴があくまでじっくり見ろ、その教科書とひたすら比較しろ。
それでわからなかったらもっかいおいで。

464 名前:デフォルトの名無しさん [2007/08/19(日) 12:45:46 ]
彼はエラーの見方がわからないと思う

465 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:49:38 ]
ChangeWindowMode(1);
こっちのがいいかも分からんね

467 名前:458 [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 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 15:14:22 ]
というか似たような質問を、DxLibのサイトで何度も見た気がするんだ。

470 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 15:55:17 ]
vorbisfile_static.libはDxLibのアーカイブに同梱されてるから
それをソースと同じディレクトリにコピー
というか「このフォルダのファイルを全てコピー」みたいなフォルダなかったか?



471 名前:230 [2007/08/19(日) 23:24:29 ]
GNU Compiler Collectionのg++コンパイラで
-std=c++98というコンパイラオプションというのがあるらしいのですが
ぐぐってもよく分かりませんでした。
誰か教えてください。

472 名前:471 [2007/08/19(日) 23:25:32 ]
230というのははミスです。すみません(汗

473 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:42:30 ]
コンパイラマニュアルとかないの?

474 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:48:12 ]
>>471 gcc.gnu.org/onlinedocs/

475 名前:471 [2007/08/19(日) 23:49:45 ]
どもです。探し見てみます。

476 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:14:08 ]
>>478
ソース文字セットと実行文字セットは別。
gcc のオプション -finput-charset と -fexec-charset を参照すべし。

480 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:15:56 ]
>>478
curses 関係あるのか?
puts("あいうえお") とかで試せばわかると思うけど。



481 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:20:45 ]
先ずは問題の切り分けだね。
>480の言うように標準出力に出力してみてその時点で文字化けしているならgccのオプションなどを調節。
その上でcurses使うと化けるのなら、cursesの設定か何か、その辺りの調査。

482 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:36:08 ]
operator=で返す自分の参照は、constつけるべきですか?

483 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:42:23 ]
>>482 いいえ。

484 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 02:43:20 ]
単にcursesがutf-8に対応して無いんじゃないの?
utf-8だと端末上での漢字の幅がバイト長と単純に一致しなくなるし
naiveな実装だと色々問題起きそう

489 名前:デフォルトの名無しさん mailto:sage [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です。
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 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 07:47:38 ]
for(;;)
;
こんなのあるのね
びっくり

492 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:25:05 ]
無限ループの常套手段

493 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:27:33 ]
俺はwhile(1)派

494 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:31:18 ]
自分も無限ループはwhile派かな
カウンタが要るときはfor使うかもしらんけど

495 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:46:09 ]
>>489
<cstdio> で std::printf が、 <stdio.h> で ::printf が使えるようになることになっている。
1つのヘッダで両方が使えるようになることは保証されない。

496 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 18:43:51 ]
std::bad_allocを捕まえたりいろいろ例外処理を書いているのですが、
メモリ4GBもあるので、デバッグ中にbad_allocが投げられることは今まで一度もありません。
投げられた際の動作をデバッグしたいのですが、そういうときはどうすればいいでしょうか。
敢えてメモリを消費したりするんですか?

↑ではbad_allocのことですが、他にもWindowsのAPI関数が失敗したときとかも、
ちゃんと自分が書いた処理が動作するか確かめたいんですが。

497 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 19:07:29 ]
throw std::bad_alloc();

498 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 19:37:17 ]
>>496
適当にラップして失敗に相当する結果を返せばいいべ

499 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 20:47:05 ]
起動時に malloc(100000000) とか適当にやっとけば足りなくなるんじゃない?

500 名前:デフォルトの名無しさん [2007/08/20(月) 21:09:14 ]
例えば、"a"とか"あ"の文字コードを出力する方法ってありますか?



501 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:11:15 ]
printf( "%d", 'a' );

502 名前:デフォルトの名無しさん [2007/08/20(月) 21:30:04 ]
>>501
ありがとうございます。

このページ
ash.jp/code/unitbl21.htm
の、UTF-8の欄のような値を出力する方法ってありますか?

503 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:23:30 ]
%Xでの表示をぐるぐるまわせばおわりだろうに。

504 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:26:44 ]
>495
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
自分がやりたいと思っていることをもうちょい正確に表現して欲しい。
文字が表示されて欲しいのか、文字コードが表示されて欲しいのかどっち?
入力として考えているのはどんなデータ?外部から与えられる文字列か、文字列リテラルか。文字コードは?

505 名前:504 mailto:sage [2007/08/20(月) 22:28:32 ]
最初のアンカーは >489 につけるべきだった。

506 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 02:01:29 ]
別人ですが
>>499
バグでそんな値(もっとでかい、0x40000000とか)を与えたことがあるけど、
無理に仮想記憶拡大して確保しようとして、システムが実質操作不能になるだけだった

507 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 02:33:09 ]
Windowsって1プロセスが使用できるメモリ空間のサイズって指定出来ないの?
Win2000の頃は2G制限とかあった記憶があるけど、今はどうなんだろ。

508 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 03:06:41 ]
>>507
以下は単なる思いつき。
1. プログラムの改造が可能なら、自分用の一定量しか領域確保できないメモリマネージャを作る。
2. メモリ取得APIをフックして自力で制限する。
3. SetProcessWorkingSetSizeを指定して、同時にスワップを小さくする。


509 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:28:56 ]
たった1000行のソースも完全に把握できねぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇ
もうだめだぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ

510 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:38:16 ]
やっと気付いたか。
さっさと人生やり直せ。



511 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:15:52 ]
>>509
1関数1000行なら窓から投げ捨てろ

512 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:37:17 ]
arg = m_arrayだとコピーじゃなくて同じ配列に別名を付けてるだけになる

515 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:43:12 ]
::memcpy(arg, m_array, sizeof(float) * 100));

516 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:47:54 ]
std::copy(&m_array[0], &m_array[100], &arg[0]);

517 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:12:35 ]
>>513
>float hoge = new float[100];
コンパイルできるコードを提示しなさい。
>arg = m_array;
それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。

518 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:13:18 ]
>>515
そんなコードを書く香具師は野垂れ死に値すると思います。

519 名前:513 [2007/08/21(火) 11:55:54 ]
皆さんいろいろありがとうございます。

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

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

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

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

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

>>518
一行で済むのでforで要素を一つずつコピーするよりは>>515>>516はいいかなと思ったんですが、
どうして>>515はダメなんですか?

520 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:04:44 ]
>>519
>寿命は関係あるんですかね?
その仮引き数の寿命は、その関数を抜けるまでです。
ポインタがポイントしている先のことは言及していませんね。
もう少し、ポインタ変数と言うものを理解しておいた方が良さそうです。

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

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



521 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:06:18 ]
>>519
> どうして>>515はダメなんですか?
float配列ならば動くけど、一般のオブジェクトの配列なら破滅的。
たとえば、string配列をmemcpyしたらどうなると思う?


522 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:29:27 ]
>>523
> 「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような
> 感じの書き方はできないんですかね?

なんでできないと思うの?

525 名前:デフォルトの名無しさん [2007/08/21(火) 12:31:36 ]
>>524
書き方が分からないんで
そういう書き方が出来るなら教えてください、
ってことなんですが。

526 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:34:01 ]
やっぱりポインタ変数とポイント先の関係がわかっていないような……

527 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:47:45 ]
>>528
最初のnew float[100]で確保したメモリはどうやって解放するんだい?

530 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:00:55 ]
floatの計算速度ってdoubleよりも遅いんですか?

533 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:02:09 ]
>>528
巧くいってない巧くいってない。

>>531
だから、なんでコードの断片載せるんだって。
で、なんでまたfooはポインタなんだ?

534 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:03:27 ]
>>532
足し算などは同じ。超越関数などは速い可能性が高い。
しかし、他の方への変換が入ったりすると遅くなることもある。

結論:一概には言えない。

535 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:06:07 ]
もうスマートポインタコンテナとかRange conceptとか使う方がいいよ

536 名前:513 [2007/08/21(火) 13:14:09 ]
つまりはどうしたらいいのでしょうか?もうわけ分かりません。

やりたいことはCfooのメンバとしてもってるfloatの配列m_arrayの中身を
コピーするなりポインタを貰うなり、どういう方法があるのか分かりませんが
正しい方法で使いたいってことなんですが。
元の中身を書き換える必要はありません。知れればいいです。
で、とりあえず531で動いてますが、これは危険でしょうか。
要素数は別個貰うなりすれば分かるので
その範囲内だけアクセスするなら大丈夫そうなんですが、ダメですか。


537 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:16:58 ]
>>536
特に問題はないんじゃないの

538 名前:デフォルトの名無しさん [2007/08/21(火) 13:28:14 ]
>>537
そうですか。ではひとまずこれでやっときます。
どうもお騒がせしました。

539 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:36:29 ]
書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。
それ以前に、Cfooを何故ポインタにしているかを知りたいんだが。

540 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:52:24 ]
floatならSSEで高速化しやすい



541 名前:513 [2007/08/21(火) 13:53:03 ]
>>539
>書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。

なるほど。

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

特に理由はないですが、
newしたCfooのポインタをメンバとして持ってるだけです。
ポインタで持ってるほうがいろいろ別のクラスに連れまわしたりするとき便利かなと。
むしろなぜそこが気になるのか知りたいんですが。

542 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:03:17 ]
>>541
>むしろなぜそこが気になるのか知りたいんですが。
半ば個人的な興味だ。無条件にnewしたがるJava出身者が身近にいるもんでね。
# しかも、悪いことにdeleteする癖はついてないと来たもんだw

543 名前:513 [2007/08/21(火) 14:06:22 ]
>>542
はい、まさに私のことです。

544 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:10:56 ]
W

545 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:16:01 ]
>>542
BCB使いもnewする癖が‥‥

546 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 15:40:21 ]
OOっぽく書こうとするとそうなるんじゃないかな
C++的にはスマートポインタを使え、ということになるんだが
いずれにせよ常にownershipを意識している必要はあるね

547 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:02:26 ]
ローカルなオブジェクトまでnewを使い始めたらもう、末期症状だ。
# オブジェクトは全てグローバルに管理されているとしたら、それはそれで難だけど。

548 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:03:31 ]
>>545
VCL使ってると確かにnew癖つくなw

549 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 18:22:21 ]
カウンタ付けて自動でdeleteするclassくらい自作しろ

550 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 21:25:00 ]
何で既にあるもん作りなおさにゃならんのん・・・



551 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 22:27:07 ]
boostの名前あげるとboost厨ウゼェとか言われるから

552 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:16:08 ]
std::tr1::shared_ptrならいいのか?

553 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 04:50:10 ]
俺はboost::intrusive_ptrが好きだが、めんどい人にはめんどいだろうな。

554 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 10:37:52 ]
もうIUnknown/comdef.hでいいよw

555 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:25:25 ]
>>555 条件逆にして動くとでも思ってんの?

557 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:29:42 ]
for(i=0;buff[i] == 0;i++){
printf("loop %d\n",i);
copy[i] = buff[i];
}

ってやってみたら、なにか気づくかも

558 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:12:06 ]
エスパー募集するんでもなければコード貼れよ。

562 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:23:15 ]
文字として認識ってのがあいまいだけど
_ismbbprint
あたり使えるか調べて見れ

567 名前:でいびす [2007/08/22(水) 16:51:43 ]
>>566

_ismbbprintは使えませんでした。

ビルドが通らなかったです。


568 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:55:13 ]
ttp://msdn2.microsoft.com/ja-jp/library/6d27cy2z(VS.80).aspx

569 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:59:27 ]
なんだってVC++5.0なんてもんを使ってるんだ

570 名前:でいびす [2007/08/22(水) 17:04:29 ]
>>569

古いプログラムをカスタマイズする事になったので使ってます。



571 名前:でいびす mailto:sage [2007/08/22(水) 17:11:52 ]
>>570

古いプログラムをカスタマイズする事になっても使う必要ありません。

572 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:23:18 ]
いやー、そうとも限らんぞー

573 名前:でいびす mailto:sage [2007/08/22(水) 17:24:06 ]
>>570

いやー、そうとも限らんぞー

574 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:25:49 ]
VC++5.0ってSTLがはじめてバンドルされた版だよな
無理やり使ったが、今にして思えばひでえ出来だった

575 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:20:05 ]
new が失敗した時に NULL を返すことを前提にプログラムしてたりするんだろうなあ。

576 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:22:18 ]
new が失敗した時に NULL を返すことを前提にプログラムしてたりしてます。

577 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:42:58 ]
new(nothrow)使えば問題なし

578 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:45:10 ]
newハンドラ使えば問題なし

579 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 20:49:37 ]
set_new_handler じゃなくて _set_new_handler で、
new ヘッダじゃなくて eh.h で宣言されてたんだっけ。
bad_alloc は VC5 で宣言されてたっけ?

580 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:01:23 ]
>>565
VCだと昔から日本語対応の関数はあって、どこかのバージョンで
_ismbXXXX のようなマルチバイト系関数であることを明示するような
関数名になったはず。
それがVC++5.0かどうか知らないが、でもだから対応する関数はあるはず。

で、ぐぐると以下のサイトに適度に古そうな関数名がならんでいるので
試してはどうだろうか。
ttp://www.geocities.co.jp/SiliconValley-Bay/7437/c/is.htm



581 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:08:46 ]
UTF-8だったりEUC-JPだったりISO-2022-JPだったりする可能性は?
というのは余計なお世話か。

582 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:12:02 ]
文字コードについては>>565が勝手に判断するでしょ。
だいたいVC++5.0の時代のアプリにShift_JIS以外使ってるとも思えないけど。

583 名前:でいびす mailto:sage [2007/08/22(水) 21:14:17 ]
VC9使うことにしますた

584 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:09:24 ]
VC++はソースのエンコードすら指定できない糞コンパイラ

585 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:13:51 ]
>>584はVC++はソースのエンコードすら指定できないコンパイラと思っている糞

586 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:20:15 ]
できるの?
clにそれらしいオプションが見当たらないからできんのかと思ってた

587 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:24:34 ]
>>585
どうやって指定するの?

588 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:31:21 ]
>>585
おれもきになる

589 名前:デフォルトの名無しさん [2007/08/22(水) 22:40:08 ]
std::vector<foo> hoge という変数があるとして、
これを関数の引数に渡すときはhogeのポインタを渡した方が
hoge自体を値渡しするより動作は速いですか?

590 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:41:32 ]
その通りだが、せっかくC++なのだからリファレンス渡しするか
iteratorを渡せ



591 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:43:22 ]
何すかそれ

592 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:45:33 ]
void hogehoge(std::vector<foo>& rhoge);

593 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:50:19 ]
>>590
サンクスコ

595 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:55:22 ]
>>593
サンクスコ

596 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:40:54 ]
p_hoge = &*itr;

599 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:42:12 ]
CHoge* p_hoge = &*p_hoge;

vectorなら鼻からbegin()/end()を使わず、
&v[0]と&v[0] + v.size()でポインタを得て、
それをイテレータとしても使うという手もある。

600 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:42:39 ]
>>598
出来ました。サンクスコ



601 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:12:40 ]
鼻から悪魔に見えた

602 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:13:32 ]
>>584
エンコードの指定は出来ないが、
BOMが付いてればUnicode LE/BEやUTF-8はそれで判定する。
BOMがなければANSI文字コードとみなしている。
javacやunix系のコンパイラはUTF-8にBOMが付いてると処理してくれないものが多く、
双方で利用しようとすると結構めんどい。

603 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:13:53 ]
悪魔から鼻に見えた

604 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:49:46 ]
>>577
そんなことしてもコンストラクタから飛んでくる例外は止まらないぜ。

605 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:50:20 ]
なんかかっこいい

606 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 11:14:46 ]
>>602
それなりに移植性考えたらC++のソースにBOMつけるとかありえんわな
で、当然boostのソースにはそんなもんついてないし、一部のヘッダにLatin-1な
人名が入ってるから、VC++8.0でコンパイルすると色々苦情を言ってくんのな


607 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:47:56 ]
C++でHTMLのタグのようなものを使用していたり、『::』のようなものなどを見かけます。
Cには無く、C++では使用出来るようなことを幅広く説明している書籍でお勧めのものはありますでしょうか。
発売年や価格、本自体の厚さなど数多くありすぎて、どういうものを購入すればいいのか分かりません。
近くに本屋さんはあるのですがプログラム関係は少ないですのでネット通販で買おうかと考えております。
それ故、内容が確認できず判断が・・orz

608 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:50:21 ]
HTMLのタグ・・・確かにそう見えんことはないw

609 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:58:28 ]
なんだそりゃ、templateのことか?
あまりに斬新過ぎる見解でワロタ

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

ATLみたいなサンクに書き換えたら、そんだけで激高速化すんじゃね?

610 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:15:45 ]
>>607
結局この本は必要…通読する対象ではない気がする、字引的にほぼ全部載ってる
www.amazon.co.jp/dp/475611895X



611 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:31:15 ]
そんなに高速化するわけない。
いったい一秒に何回メッセージが来て、
グローバルハッシュを引くのに何ナノ秒
余分にかかるというんだ?

612 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:37:41 ]
一秒に何回メッセージが来て、
グローバルハッシュを引くのに何ナノ秒
余分にかかる

613 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:38:15 ]
俺も初めて見たときはタグかと思った。
includeファイルに.hが付いていないことや、標準入出力に<<、>>を使うこと、
「::」の存在など何もかもが新鮮だったあの頃・・・
いまだに初心者の域を抜けられぬ現状orz


614 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:40:43 ]
::は斬新だった。こうゆう記号ってなんか意味を持って決められてるのかな?

615 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:43:25 ]
意味的に : を使いたいけど、ラベルと被るから :: にしたんじゃね?

616 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:44:24 ]
斬新といえばいえなくもないが、: (コロン)は、通常のラベルどころか

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

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

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

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

もっとも、Cよりは便利なので使わせていただいていますけどね。

617 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:07:29 ]
べ、別に好きでC++を使っているんじゃないんだからね!
Cより便利だから使ってあげているだけなんだからねっ!

618 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:11:22 ]
おっさんが書いてるんだぜ?きめぇ

619 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:11:29 ]
>>616
iostreamとマニピュレータの登場は、標準化委員会の発足より古いはず。

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



620 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 04:31:27 ]
printf より優れてる点は型安全な点とポリモーフィズムだな。
printf 風マニピュレータを作らなかったのは C++ の汚点だな。



621 名前:デフォルトの名無しさん [2007/08/25(土) 06:21:38 ]
なんで queue には clear() が無いの?

622 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:13:32 ]
ああ、すまん
作るの忘れてた

623 名前:デフォルトの名無しさん mailto: sage [2007/08/25(土) 10:32:35 ]
納得した

624 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:37:06 ]
何のqueueにclearが無いの?

625 名前:デフォルトの名無しさん [2007/08/25(土) 11:05:14 ]
参照渡しでもらった引数をさらに別の関数に参照渡しするのって
なにか問題ありますか?

626 名前:デフォルトの名無しさん mailto: sage [2007/08/25(土) 11:09:57 ]
G++ の STL の queue, priority_queue, stack.
コンテナアダプタには clear() が用意されて無いけど何か理由があるんでしょうか.

627 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 11:55:33 ]
G++wwwwwwなんという未来言語wwwwww

628 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:00:58 ]
無知発見

629 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:13:16 ]
自己解決しました.

630 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:15:02 ]
>>627
これはひどいwwwwwww



631 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:27:56 ]
>>627=630
そんなエサで俺様が釣られるかクマー

632 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 13:55:48 ]
>>625
別に問題ない。
寧ろ、参照渡しでもらったものをポインタ渡しするほうがおかしいし、
参照渡しでもらったものを値渡ししてしまったら意味が違ってしまう。

633 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 15:43:54 ]
何でないんだろうね。
プリンタジョブとかに queue を使ったとして、
ジョブを全部破棄とかすることあるだろうに。

634 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 16:01:42 ]
1億と2000年前からpopしなさい、というお達しか

635 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 16:12:47 ]
while(!q.empty()) { q.pop(); }

としろ、ということか。

636 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:14:26 ]
そうだdequeをつかおう

637 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:16:04 ]
q.~queue();
new(&q) std::queue<T>;
冗談だよ、冗談。

638 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:24:21 ]
素直にq=std::queue<int>();と書いてやれよw

639 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:40:57 ]
queue のソースを書き換えればいいんじゃね?

640 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:47:21 ]
queue を継承した my_queue を(ry



641 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:26:24 ]
(x = 1) = 2;

これ、Cだとエラーなんだが、C++ではコンパイルできる
何で?

642 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:11:39 ]
x = 1の結果が、Cは右辺値、C++は左辺値と定められているから。

643 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:19:25 ]
>>642
やっぱりそういうこと?
ストラウストラップの本とK&RとCの規格書調べたんだけど、それらしい記述を
見つけられなかったんだけど、どこかに明記されている?


644 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:26:25 ]
=演算子が参照を返すからじゃね?

645 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:51:03 ]
>>643
642じゃないけど

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

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

Cの規格書って何を調べたの?

646 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:54:07 ]
>>644
>>642

647 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:58:03 ]
>>645
脳内

648 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:23:22 ]
X3014にも5.17 1節目の最後に「結果は,左辺値とする。」と書いてある。

>>644
型と右辺値左辺値は別の段階の話。

649 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:33:34 ]
三項演算子で変数返すコード書いて左辺値にしても大丈夫

650 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:36:12 ]
たくさんのレスthx

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

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

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

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

>>648
なるほど
C++のほうはEffectiveにも参照を返すと書いてあるから
理解できた
C++の規格書も買うかな



651 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:42:13 ]
禿の本がまだなら規格書よりそっちを先に読んだ方がいいよ

652 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:46:24 ]
>>650
知ってるかもしれないが、JISの規格書なら以下で参照できる。

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

検索できないのは最悪だけど。

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

禿の本ってEffectiveのこと?
結構高度だから必要に応じて関連する項目を
潰していこうと思ってる

654 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:52:34 ]
>>652
最初、Cの規格書もそこを見てたんだけど
検索できなくて疲れるから買ってしまった


655 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:59:44 ]
禿本 : Bjarne Stroustrup著 プログラミング言語C++

656 名前:デフォルトの名無しさん mailto:sage [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;
}

658 名前:657 mailto:sage [2007/08/26(日) 03:53:14 ]
//さらにもう一個、落ちる場合
CFoo foo(age,sage);
m_vecFoo.push_back(foo);

ちなみに、push_backをコメントアウトして飛ばせば一応落ちないで動いてるようなので
落ちているのはpush_backの行みたいです。

659 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 05:25:40 ]
その「あるクラス」がどんなものなのか説明しろよ。
ちゃんとコピーコンストラクタでディープコピーしてるかとか。

660 名前:デフォルトの名無しさん [2007/08/26(日) 09:15:04 ]
>>659
すいません。力尽きて寝てました。
実際のCFooはでかいのでそのまま貼ることはできませんが、
・コンストラクタの引数にポインタ型がある
・メンバにもポインタ型がある
・引数つきで生成されること前提なのでデフォルトコンストラクタとか作ってない
・唯一書いてある引数ありのコンストラクタは、メンバを初期化リストで初期化せずに
コンストラクタの中身で初期化してる
・単純なGet〜みたいな関数はヘッダに直接書いてある

この辺がなにか関係してるでしょうか?



661 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:36:45 ]
レスに間が空いててもいいが、わざわざ寝てましたなどと言わなくていい

662 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:39:42 ]
レスに間が空いててもいいし、わざわざ寝てましたなどと言ってもいい

663 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:43:44 ]
>>660
>659の質問に答えたまえ。
コピーコンストラクタを設けていないのなら、C++を初歩から勉強しなおせ。

664 名前:デフォルトの名無しさん [2007/08/26(日) 09:51:36 ]
ディープコピーって何ですか?

665 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:28:29 ]
本読め
Effective C++とかEffective STLとか

666 名前:657 mailto:sage [2007/08/26(日) 10:35:13 ]
なんかポインタのメンバとかもってたりするクラスは
コピーコンストラクタなるものをきちんと実装しないと
値渡ししたりするときに問題が発生しやすいらしいので
m_vecFooにはポインタを渡すことにしました。

667 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:38:42 ]
参照を参照のままコピーするのが浅いコピー
参照先を複製してコピーするのが深いコピー

668 名前:デフォルトの名無しさん [2007/08/26(日) 10:52:14 ]
コピーコンストラクタを実装してなかったことが原因な気がしてきてはいるのですが
なぜpush_backの段階で落ちてるんでしょうか?
二重でdeleteされてるわけでもないし、理屈がわかりません。



669 名前:デフォルトの名無しさん [2007/08/26(日) 10:52:28 ]
ディープキスって何ですか?

670 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:56:26 ]
保育園でするもの



671 名前:657 [2007/08/26(日) 10:59:13 ]
>コピーコンストラクタなるものをきちんと実装しないと
>値渡ししたりするときに問題が発生しやすいらしいので

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

なんでpush_backしただけで落ちるんでしょうか?
どんな可能性が考えられますか?


672 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:10:13 ]
とりあえず、デバッガで
本当に push_back の行で落ちてるのかどうか確認してみた方がいいんじゃない?


673 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:13:40 ]
>>671
CFoo foo = CFoo(age, sage);
CFoo bar = foo;

とりあえずこのコードで落ちたりしないか?


674 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:39:52 ]
>>671
それはもちろんだが、その前に、解放済みの動的資源を参照するオブジェクト
ができてしまうことがマズイだろ

677 名前:657 [2007/08/26(日) 11:43:25 ]
あぁ、なんかコピーをした段階で落ちてるんじゃなくて、
一時オブジェクトが解放される段階で落ちてるみたいです。

678 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:44:10 ]
>>656
式の結果が左辺値になるか右辺値になるかは構文ではなく
言語の仕様ということか
それなら黙って認めるしかないから明白だ

679 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:47:02 ]
>675
>自分でうまく実装しないと危険ってだけなんじゃないんでしょうか?

その「危険」の内容が、落ちるってことだ。

680 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:49:39 ]
誰かスレッドについて教えてくれ。

自プロセスのスレッド数を
CreateToolhelp32Snapshot、Process32First、Process32Next
使ってスレッド数を出力するだけのプログラムで
なんでcntThreadsの値が8になるんだ?
CreateThreadとかしてないのに・・・



681 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:00:10 ]
知らんけど、システム的なDLLの誰かが作ったスレッドなんじゃない?

682 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:09:32 ]
>>680
お前がアホだから

683 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:11:02 ]
純粋に自分の作ったスレッドの数のみを知る方法ってないのかな?


684 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:11:39 ]
>>680
せめて
ttp://www.microsoft.com/technet/sysinternals/default.mspx
あたりのツール使って、実際のスレッド数をまず確かめてはどうか?

685 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:11:47 ]
ある

686 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:11:53 ]
自分で作ったのなら自分で管理して数えればいいじゃん

687 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:27:41 ]
ProcessWalkerを使ってみたんだが、やはり複数立ち上がってる・・・

確かに自分で数えればいいんだが、
パフォーマンスログでスレッド数見ると
自分で立ち上げたスレッド数以上立ち上がってて
たまに増減するんだよね。

688 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:28:33 ]
だから何だ?チラシの裏にでも書いてろ。

689 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:36:37 ]
そりゃ裏でスレッドを作られったって、それはWin32の勝手だろうに。

690 名前:デフォルトの名無しさん [2007/08/26(日) 13:03:42 ]
C/C++の文法自体は大体理解できたが、大規模なプログラムの作り方が
さっぱり分からん

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

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

結局みんな大規模なものはかけないのかな?



691 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:07:39 ]
はは

692 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:09:43 ]
>>690
大規模っつーことで複数人での開発を想定するが
個人的にはプロセスやDLL等の境界で切ってあるほうがずっとやりやすかったかな
切らないんなら、適切にスタブを作るのが常套かと思う
Facadeなどの下に隠すのも良い
画面がいっぱいあるだけの良くある業務系なら、それぞれの画面に飛べるように
なっていて、それぞれが独立していれば概ね問題は無い
まあ所詮ケースバイケースで王道は無いだろ
「銀の弾丸はない」のだと知れ

693 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:10:03 ]
大規模なプロジェクトと動物ポリモとどういうつながりが?

694 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:20:38 ]
>>687
オーディオデータとか動画扱ってる場合とかWindowsが勝手にスレッド作る場合はよくあるお

695 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:25:54 ]
>>675
>でも実装してないときはコンパイラが勝手に作ってくれるんじゃないんですか?

各メンバのコピーコンストラクタを呼び出す、というコピーコンストラクタを作ってくれる。
同様に代入の場合は各メンバに対しoperator=を呼ぶ。
メンバにポインタがある場合ポインタがコピーされるだけで、ポインタが指す先は複製されない。

696 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:30:15 ]
まーメンバがコピーコンストラクタが上手く動くクラスとポインタ以外の
基本型だけならデフォのコンストラクタで問題ないことも多い
ポインタ生のままで保持せずにboost::shared_ptrでくるんだりしてれば
適切に参照カウント処理してくれる

そうでないならちと考えろってこった


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

と思っただけですよ

698 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:33:05 ]
しらねぇ
つーかどうでもいい

動物ポリモは確かにくだらねぇしオリジナリティはねぇな

699 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:37:16 ]
初心者の為に端折って説明してるだけなんだよ

700 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:39:50 ]
あれで初心者が解るのか疑わしい



701 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:42:37 ]
わからなかった?
精進するよ

702 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:44:29 ]
>>697
動物ポリモみたいなこと書いてないで君もさっさと大規模なもの作れる頭持つか諦めなさい。

703 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:50:52 ]
そうだね
スレ汚しすまそ

704 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:26:55 ]
逆に実用的でコーディング時の仕様に依存しないポリモーフィズムってなに

705 名前:デフォルトの名無しさん [2007/08/26(日) 14:30:57 ]
まだ、いってんの?

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

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



706 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:35:06 ]
そりゃC++ 講座だもん

707 名前:デフォルトの名無しさん [2007/08/26(日) 14:41:55 ]
偉そうに書いてるわりには、実際に作ったソフトを公開してる人いないよね

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





708 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:42:57 ]
だからなんだよ?どうでもいいだろ?
チラシの裏にでも書いてろよ。

709 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:45:45 ]
有能だけどそこまで親切じゃない人もいるんだよ

710 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:54:36 ]
>>707はアホそうに書いてるだけで、実際に作ったソフトを公開してないよね

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



711 名前:デフォルトの名無しさん [2007/08/26(日) 14:56:11 ]
大規模な開発なんて経験つんでやっていくものじゃないの
Webのしかも言語自体の解説に何期待してんだか

712 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:57:08 ]
>>707
遊びの延長や使い捨てや自分専用で作るのと
公開するソフトを作るのではかかる手間が桁違いだろ

713 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 15:06:54 ]
公開ライブラリを作ってる人達の実力は底が知れない
具体的にいうとboost関係の人達

714 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 15:23:49 ]
知れるかどうかって話で言うと、何も公開していない人のほうが底が知れないね。

715 名前:デフォルトの名無しさん [2007/08/26(日) 15:25:40 ]
>>713
そうか?
以前正規表現を使いたくてboostを使ったが速度でイマイチだったから
自前で実装したけど?

716 名前:デフォルトの名無しさん [2007/08/26(日) 15:30:47 ]
>>715
そうか?
以前正規表現を使いたくてお前のを使ったが速度でイマイチだったから
自前で実装したけど?

717 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 15:32:20 ]
どうでもいから出て行ってくれないかな。

718 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 16:38:43 ]
boostはC++の実験場だから
チューニングはしてないよ


719 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 17:18:01 ]
チューニングに関する実験でもチューニングしてないよ

720 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 20:48:44 ]
Boostなんてたいしたこと無いだろ
これが一番典型的な例

____              progress_
|← reject|  boostの中の人  display   ユーザー
. ̄.|| ̄ ̄        ┗(^o^ )┳(^o^ )┳(^o^ )┛≡=-
  ||            ┏┗  ┗┗  ┏┗ ≡=-
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

722 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 20:58:05 ]
それがboostの典型なら、boostの中でrejectされたりしないだろう。
boostの中で平均的に評価されているものが、他との比較でreject扱いになって
初めて「boostなんてたいしたことない」になる。

723 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 22:35:06 ]
progress.hppには
まるで役に立たないprogress_displayと
すごく役に立つprogress_timerが同居しています
そんな兄弟いますよね

724 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:21:48 ]
>>724
VC が UTF-8 を認識できてないんだろ。どうやるのか知らんけど。
Shift_JIS でアラビア語が扱えないのは確実。

726 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:26:42 ]
英語版に言語パック入れたら?


727 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:29:28 ]
BOMつきUTF-8ってVS2003で食えたっけ
VS2005なら大丈夫のはずだが

リテラルはワイド文字なのか?
そうだと仮定すると、ソース修正して
16進でUnicodeのコードポイントを記述してやるのが一番手早い
Perlか何かを使えば簡単だろ


728 名前:724 mailto:sage [2007/08/26(日) 23:45:35 ]
素早いレス、感謝感激です。

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

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

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

> リテラルはワイド文字なのか?
リテラルはワイド文字です。
確かにソース修正が一番簡単ですね。
ただ、ソースの下の方を見てみたら、ヒンディ語・ヘブライ語・・・と限りなく続いてますので、結構大変かも。

729 名前:デフォルトの名無しさん mailto:sage [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", ×);




731 名前:730続き [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;
}
}

732 名前:730続き [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;
}


733 名前:730 [2007/08/26(日) 23:56:54 ]
このままじゃパチンコで勝てないお!
助けてお!

734 名前:デフォルトの名無しさん [2007/08/27(月) 00:00:33 ]
こんなプログラム書いて何になるの?


735 名前:デフォルトの名無しさん [2007/08/27(月) 00:01:41 ]
>>734
>>733

736 名前:724 mailto:sage [2007/08/27(月) 00:01:41 ]
>>729
ありがd。見てみたら、BOMついてませんね。
付けてオンパイルしてみます。ノシ

737 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:04:27 ]
>>730
ざっとみだけど

>int array[128];

が足りてないだけじゃないの?

738 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:06:54 ]
>>730
メモリをケチるな!
array[128] → array[2048]
期待値は (1/150)*100000=666.67

739 名前:730 [2007/08/27(月) 00:10:46 ]
できたおおおおおおおおおお!
これで勝てるお!

740 名前:730 [2007/08/27(月) 00:11:55 ]
期待値の詳細希望



741 名前:730 [2007/08/27(月) 00:14:06 ]
なるほどお!ボヌスが666.67回くるってことかお!
ありがとお!

742 名前:730 mailto:sage [2007/08/27(月) 00:17:43 ]
やっぱりすごいお
さっぱりわからなかったのに
すぐ回答がきたお
どうしたらそうなれるかお?

743 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:20:17 ]
>>742
毎日2時間、電灯のヒモでボクシング。これを1年続けること。

744 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:21:02 ]
みんな半年から1年ぐらい
アーバンチャンピオンと
スパルタンXで鍛えてるはず

745 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:26:58 ]
>>740
100000回×(1/150)=666.67回 kがインクリメントされるわけだから
array[k]はarray[668]って式で参照される可能性があるわけで
array[128]と宣言したのではあきらかに足りないってことなんではないかと>期待値云々
こういう実行時に入力される値に依存するような大きさの配列はメモリの動的確保で扱うべきだとは思うけどね

746 名前:724 mailto:sage [2007/08/27(月) 01:39:46 ]
>>736
ファイルの先頭にBOM(というか、ZERO WIDTH NON-BREAKING SPACE。ef bb bfの3バイト)を付加したら
無事、オンパイルできました。

747 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 01:42:28 ]
>>746
いや、ファイル先頭にある場合、つまりBOMである限り、
それはBOMであってZERO WIDTH NON-BREAKING SPACEとは言わないんだ。

748 名前:724 mailto:sage [2007/08/27(月) 02:02:45 ]
>>747
添削ありがd。

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

2文目ですね。

749 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:09:05 ]
パス通ってるからじゃないん?よーわからんけど

752 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:11:52 ]
引数で指定しなくてもリンクされるようになってるから。

753 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:17:52 ]
C++のvector配列って結構処理重いんでしょうか。
10MB前後のテキストデータをmallocしたポインタ読み込んで、区切り文字単位に編集・分解していった場合と、
stringに読み込んでからvector<string>に編集・分解していった場合で、
処理時間が前者が約25秒、後者が約60秒掛かったのですが、こんなもんなんですかね。

754 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:28:49 ]
コードplz

755 名前:デフォルトの名無しさん [2007/08/27(月) 15:34:02 ]
vector に malloc なんか使ってるから・・・

756 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:36:15 ]
>>753
vector<string>版も意外に速いなw
STLコンテナは基本的に値を保持するんで、その場合はstringのインスタンスを
コピーしまくることになる
ポインタだけで操作すれば格段に速いのは当たり前だ

vector<>が遅いというよりはメンバのコピーに時間がかかっているだけなので、
そこが性能のボトルネックになっているのなら、
vector<char*>でポインタを保持するなり
vector<int>でインデクスを保持するなりするとよいだろう

757 名前:753 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:07:29 ]
>>758
本来アクセスしちゃいけないところにアクセスしてるだけ
CはC#などとは違ってそんな事しても例外は発生しないし
たまたま何のエラーも出ない事がある
だからってそんな事やってたらきっとそのうちクラッシュするよ



761 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:19:05 ]
運が悪いと範囲外に書き込んだときに他の変数の値書き換えたりすることがあるから範囲外アクセスはNGよ

764 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:10:51 ]
質問させて頂きます。
現在UNIX環境でコンソールベースのプログラムを組んでいるのですが
CUIからメニューの操作、カーソル操作の為のエスケープシーケンスに悩んでおります
コンソールベースのプログラム自体あまり組んだ事ないのですが
CUIからメニュー操作というのは可能なのでしょうか?

765 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:16:05 ]
環境によるかもだけど、ncursesとか調べてみると幸せになれるかもしれない。

766 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:31:35 ]
malloc使う奴はクソだとか言われる事が増えてきてる中、このスレは落ち着きますね…

768 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:34:39 ]
まじで?そんなこと言う奴がいるのか・・・

769 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:52:36 ]
vector型の配列をランダムに並び替えるには自前で作るしかないですかね?

770 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:56:12 ]
std::random_shuffle だっけ



771 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:25:47 ]
>>770
ありがとうございます

772 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:44:37 ]
>>765-766
有難うございます。
ncursesについて詳しく調べて見たいと思います。

エスケープシーケンスからの操作なのですが、設定とはどう行うかご教授願えないでしょうか?
検索しても見つからなくてorz

773 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:51:24 ]
>>772
UNIX環境なら使うターミナルを選ぶだけかな…
MS-Windows環境なら ansi.sys を読み込ませる



774 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:53:34 ]
>>772
TERM環境変数
普通はシェルの初期化スクリプトなどで設定するが、
普通にシェルを操作できてるんなら、まあ大丈夫だろう

775 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:01:57 ]
>773
えー。それって、Windows環境で、DOS-Exeを動かす場合だけでそ。

776 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:12:20 ]
>>773-775
有難うございます。
凄く勉強になります。
ご教授して頂いた所を詳しく調べてみたいと思います。

777 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:48:42 ]
>>775
bashとかでもあるよ。

778 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:54:03 ]
だれか俺にbashとansi.sysの関係を教えてくれ。

779 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:58:10 ]
すまん。レス番見間違えた。

780 名前:デフォルトの名無しさん mailto:sage [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);
}



781 名前:780 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:04:49 ]
www.google.co.jp/search?q=%E3%81%94%E6%95%99%E6%8E%88&btnG=%E6%A4%9C%E7%B4%A2
うまく動かないってのはどんな状況?

783 名前:780 mailto:sage [2007/08/28(火) 03:20:40 ]
正しくはご教示でしたか
間違えて使っていました.ありがとうございます.

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

よろしくお願いいたします.

784 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:23:52 ]
>>780
メッセージループはあるか?
なければググれ

785 名前:デフォルトの名無しさん [2007/08/28(火) 03:32:35 ]
ウィンドウクラスの名前が無い。
RegisterClassしてない。
SetTimerの第2引数と第3引数が逆とか、
ウィンドウプロシージャで自分で処理しないメッセージをDefWindowProc()に渡してない。

786 名前:780 mailto:sage [2007/08/28(火) 03:40:59 ]
>>784
ありがとうございます.
ありません.早速ググってみました.

>>785
ありがとうございます.
調べてみます.

787 名前:780 mailto:sage [2007/08/28(火) 04:42:09 ]
>>784
>>785

ありがとうございました.
ご指摘の通り,メッセージループ,RegisterClass,DefWindowProc()
全てを書いたところ,意図した動きをしました.
お世話になりました.

788 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 05:41:34 ]
ちょっと質問。
・外部ハードからデータを所得(配列に格納)し、そのデータ長に数値計算を施し結果を画面上に表示させたい

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

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

データ所得→計算→描画
       |
        →データ所得→計算→描画
                 |
                 →データ所得→計算→描画
こんな感じで計算させつつデータを所得。描画させつつ計算。みたいに出来ますか?

789 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 05:56:44 ]
所得

790 名前:デフォルトの名無しさん [2007/08/28(火) 06:00:16 ]
データ所得税



791 名前:788 mailto:sage [2007/08/28(火) 06:06:24 ]
すんません。取得の間違いでした

792 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 08:23:36 ]
その程度なら今のPCは十分に早いから
データ所得→計算→描画→データ所得→計算→描画
で十分じゃね?
データ取得に時間掛かるならデータ取得部分だけ別スレッドで回した方がいいけど。

793 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 18:09:00 ]
典型的なProducer-Consumerパターンでないの?

794 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:40:45 ]
>>788
出来る出来ないで言えば、出来ると思う。

どっちかいうと、例えばデータをファイルに書き込んでるなら、
データ書き込みとデータ読み出しの排他処理してるだろうから、
あんまり頻繁に読み出しに行くとデータ更新を阻害しそうで
そっちの方が怖い。

795 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:47:05 ]
>>788読む限りでは出力先は画面でないの
ファイルに書き戻したりしてないように見えるけど

796 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 23:53:55 ]
Windows SDKの_msize()で、callocした領域のサイズを見ようと呼び出したのですが、
呼び出した行でプロセスが停止してしまいます。
エラーも何も帰ってこず、前の行のprintfは呼ばれて、次の行のprintfは呼ばれていないという
状況です。_msize()の説明を見ると、動的確保されていない領域でも
エラーが帰ってくるみたいですが…
こういった症状聞いたことある方いませんか?
VC6でデバッグビルドです。よろしくお願いします。

797 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:09:09 ]
ぬるぽではないのか

798 名前:796 mailto:sage [2007/08/29(水) 00:11:55 ]
ガッ

799 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:13:31 ]
引数に入れてやったポインタがNULLを指してるってことでしょうか
今環境がないので試せないですが、if ( p == NULL ) とかで見てみます

800 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:14:12 ]
だめだこりゃ



801 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:16:09 ]

違うんですか?

802 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:17:38 ]
違う

803 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:19:45 ]
よくわからないので教えて貰えませんか?
_msizeの戻り値を参照してるところで止まってる訳でもなく、
_msize自体で止まるので、引数として渡してやったポインタがNULLなのかと思ったのですが

804 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:25:12 ]
>>803
NULLに対する対処くらいしていてもよさそうだけど

805 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:31:07 ]
>>804
よく読んでみれば、

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

とのことなので、-1が返ってくるようですね。
ぬるぽってヌルポインタ(Javaとかだとヌル参照例外)のことですよね?
引数のポインタがNULLでも動くなら、>>797は何について仰ってるのでしょうか?

806 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:31:26 ]
>>803
試しに_msizeの引数にNULL入れたら、Assert出て落ちた。
VS2005 Standard Edition

「止まる」というのは、関数から戻って来ないのか、不正終了するのか、どっち?

807 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:35:00 ]
ねるぽ

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

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

Assert出て落ちるのなら、プロセスが静かに死んでそうな気がしてきました。

809 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:39:32 ]
確認してなかったのか

810 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:40:17 ]
ウザ〜イ!ウザイよ小沢さん。想像で答えられてもウザ過ぎるよ。



811 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:49:13 ]
まぁ「初心者歓迎」ってついとるし、初心者はバグの見所もわかんねだろ。

免罪符にゃならんが。
そこら辺分からんと答えよう無いしな。

812 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:49:15 ]
そこだけ切り出してコンソールアプリにでもしてみれば。

NULLじゃないけど
IsBadReadPtrに引っかかるポインタとか

813 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 06:40:31 ]
サービスであっても、デバッガアタッチするといいb

814 名前:デフォルトの名無しさん [2007/08/29(水) 13:31:03 ]
>>805
本当によく読んでるのか?

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

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



815 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:58:45 ]
C++/CLI?

817 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:02:03 ]
API直で叩けばいいんじゃね?

818 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:25:54 ]
stlのstring使っています。
このstringを1行ごとに読み込んで処理したいのですが、どのようにすればいいでしょうか?
tokenが使えないので、ちょっと苦労しています。一旦とってきたstringをcharに変えるのも、どうかなぁ……って気がしますし、
できれば、stringのままで一行ごとの読み込みがやりたいんですが、やり方を教えてください。

VC++2005 WinXPHomeです。

819 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:32:43 ]
findとかiteratorで改行しらべる

820 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:51:54 ]
つか、C++を使ってるのか.NETなのかさっぱり分かってないんだろう

823 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:52:29 ]
>>818
std::istringstreamとstd::getline(std::stringを引数にとるほう)はだめ?

824 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:56:08 ]
>>818
意味がイマイチわからんかったが、

istringstream と >>

じゃだめか?

825 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:58:58 ]
>>823

そっちじゃなきゃだめだわ
(大域のgetline か basic_istream<> の istream)

826 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:59:07 ]
>>818
boost, boost-sandbox or pstade使ってもいいなら良い方法があるんだけどいいかな? by boost厨

827 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:59:32 ]
basic_istream<> の istream ×
basic_istream<> の getline ○

828 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:04:46 ]
聞いてくれよ、おら
C++のunionにメソッドを置おけること、昨日知ったよ、orz
これって常識?

829 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:12:39 ]
>>828
structはよく見るけどね

830 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:12:40 ]
unionを使うことが非常識



831 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:17:44 ]
どちらかというと常識ではないと俺は思う。
自身で使ったことがないし、他人が使っているのを見たこともないし。

832 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:25:36 ]
なんかクラスWidgetがあって、

Widget();

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

Widget *w = &Widget();

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

Widget &w = Widget();

自分の考えとは違ってすぐにデストラクタが呼ばれず、この関数(またはブロック)を抜けるところでデストラクタが呼ばれました。
参照だと何か特殊なんですかね・・・

833 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:29:15 ]
参照には null が無いから

834 名前:デフォルトの名無しさん [2007/08/30(木) 00:34:16 ]
大きなファイルサイズの読み込みを早めるためにMemoryMappedFile使う場合、
ファイル全てのアドレスを割り当てたらまずいですよね・・?

やはりマッピングアドレスを動的に変化させる仕組みが必要でしょうか?
そうすると編集時に問題になってしまいそうですが、何かセオリーみないなモノはあるのでしょうか?

835 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:39:33 ]
>>832
const参照なら標準規格でも明文化された規定になっている。
(知っている人は少ないかもしれないが)

けれど、非const参照の初期化に一時インスタンスの使用はできないことになっている。
一時インスタンスは右辺値だが、非const参照の初期化には左辺値が要求されるため。
最近のVC++やg++ではエラーになる。
どうせお前が使っているのはBorand C++だろう。窓から投げ捨てろ。

836 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:40:16 ]
>>832
参照は一時オブジェクトを捕まえておける
関数の戻り値とかもおっけー

837 名前:836 mailto:sage [2007/08/30(木) 00:40:53 ]
const参照だけだっけか。すまそ。

838 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 01:04:15 ]
>>823,824
thx istringstreamでいってみます。

839 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 12:51:44 ]
>815
別にForm1の定義がまるまる欲しいわけじゃないでそ。
Form *createForm2();
みたいな生成関数があれば大抵足りるんじゃないの。

840 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 13:45:38 ]
>>820
ガードは試してみたんですが、「定義」が.hに書かれているので・・

>>839
まったくそのとおりなんですが
VCを使うと、デフォルトでヘッダファイルに定義が書かれているんですよ
なので、どうしたものだろうかと
やっぱり、いちいち自分でヘッダファイルに書いてある定義をcppに持っていって、ヘッダファイルでの
宣言は改めて書くようにしないとダメなんでしょうか




841 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 15:06:39 ]
>>835
BCCタンを悪く言うと痛い目にあうお(#^ω^)ビキビキ

842 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 15:56:48 ]
>>835
警告は出るがな

843 名前:デフォルトの名無しさん mailto:sage [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); の返り値とかで判断できないものでしょうか?

845 名前:844 [2007/08/30(木) 21:07:40 ]
すみません、C言語です。

846 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:30:34 ]
無理。

847 名前:844 [2007/08/30(木) 21:33:22 ]
>>846
そうですか、意外とプログラム側から分かる情報は少ないんですね。。。
どうしようかな・・・

848 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:38:26 ]
諦めろ
お前には無理
お前のプログラム側から分かる情報なんて皆無

849 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:42:46 ]
んあ?
コンパイルに失敗したかどうかは分かるんじゃない?
エラーが出たのかどうかは分からんが。

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

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

status = system("command");
if(WIFEXITED(status))
exit_code = WEXITSTATUS(status);


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

ちなみにそのWEITSTATUSの返り値はint型でいいのでしょうか?



851 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:04:07 ]
お前がアホだから

852 名前:デフォルトの名無しさん [2007/08/30(木) 22:06:34 ]
数千行から1万行程度で書けて、出来たとき達成感のあるような練習課題思いつけば教えてください
テトリスとかどうかなと思ってるんですが

853 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:33:30 ]
将棋でも作れば?

854 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:36:06 ]
>>852
テトリス

855 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:48:33 ]
>>850
いや、ちょっと待ち。
BCCはWindowsの話じゃないのか?
gccはUNIXとかLinuxの話で。
WEXITSTATUSがBCCでも存在するか知らんのだが。

856 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:49:26 ]
>>850
なぜなら、manpage は bcc じゃないから。

戻り値よりも、obj ファイルや exe ファイルが生成されてるかどうかを見た方が楽なんじゃないか。

857 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:51:43 ]
>>852
テトリス

858 名前:844 mailto:sage [2007/08/31(金) 00:21:14 ]
>>856
それだとコンパイルするたびに、objファイルを消さないといけないですよね。
コンパイル前にobjファイルとexeファイルを消すプログラムにすれば済む話かもしれないですけど・・・

859 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:25:28 ]
>>852
2ch専用ブラウザ機能付きテトリス
セルフコンパイル機能付きテトリス
英日翻訳機能付きテトリス
OCR機能付きテトリス
人工無能機能付きテトリス

860 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:27:18 ]
>>844
エスパーすると君が本当に必要なのは make および makefile に関する知識だ



861 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:31:02 ]
人工無能機能付きテトリスに期待

862 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:40:19 ]
今更過ぎる質問なんですがWindows2000にVC++2.0って
インストール不可なんでしょうか?
うまく行ったかなと思ったら、最後の最後でレジストリの
書き込みに失敗しましたとかって出てしまいました。
他のバージョンのVCとかは一切インストールしていない
状態です。


863 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:42:02 ]
可能ですよ

864 名前:862 mailto:sage [2007/08/31(金) 00:53:42 ]
>>863
レスありがとうございます。
Win2Kのインストールから、もう一度やり直してみます・・・orz
サービスパック(SP4)入れる前にVCをインストールした方が
良かったのかな・・・?

865 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:05:29 ]
#include <iostream>
//typedef int link;
class link {};

int main(){
  link l;
}

g++4.1.2で怒られました。コンパイラ不信になりそうです。
変数名をNULLにするような常識外れなのかもしれませんが、
こういう名前空間の衝突はどこを見れば予想できますか?

866 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:08:56 ]
>>g++4.1.2で怒られました。コンパイラ不信になりそうです。
君のレベルではコンパイラのバグなど、コンパイラ側の問題に遭遇することは無い。
コンパイルエラーはすべてコンパイラのせいではなく、自分が悪いのだと認識したほうがいい。

867 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:13:28 ]
>>865
エラーメッセージを見れば予想できるよ。

868 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:26:28 ]
__declspec(novtable)は、どういう時に使うものですか?

869 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:30:10 ]
>>865
自分の作ったクラスとか関数をすべて自分の名前空間に入れれば衝突を気にせずに済むよ

870 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:31:03 ]
>>866
標準ヘッダをインクルードしたらグローバルにunistd.hがぶちまけられる、
ってのはバグでなくてもショックでした。

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

危なそうな名前は回避するしかないんですかね。気をつけます。



871 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:36:49 ]
>>869
あなるほど、ちと面倒ですがそうします。皆さんありがとう。

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

873 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:46:13 ]
前々から気になっていたので、これを機にぐぐった

>>868
msdn.microsoft.com/msdnmag/issues/0300/c/

874 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 11:12:27 ]
A を直接作ることが無いのであれば、
A のコンストラクタで仮想関数テーブルを初期化する処理は必要ない、無駄だ、ということか。なるほど。

875 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 11:28:51 ]
setcurrentdirectoryを使って、
ネットワーク上のPCのディレクトリを指定したいのですが、
記述の仕方を教えてください。 

876 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 11:30:36 ]
novtableはATLのウィザードで作ったクラスで良く見る。

877 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 11:50:48 ]
>>845
\\servername\sharename

878 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 12:04:14 ]
1万行だなんて身近スg

879 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:11:18 ]
std::basic_ifstream<wchar_t>で文字を読み込むと日本語が文字化けしちゃうんですか
何故でしょうか?読み込むテキストはUTF-8で書いてあります

880 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:25:50 ]
UTF-8なlocaleをstreamにimbue()汁
それがサポートされていれば、の話だがな



881 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:31:46 ]
これimbue(std::locale("japanese"));やstd::locale::global(std::locale("japanese")); これは
試しましたがダメでした

882 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:36:17 ]
> UTF-8なlocaleを
これが読めなかったのか

janapeseとかいうlocaleを使っているところを見ると、VC++か?
なら、C++localeに任せるのは諦めろ。
VC++はUTF-8なlocaleをサポートしていない。

883 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:38:14 ]
そうですか・・・じゃあマルチバイトで読み込んで内部で変換するしかないですね
ありがとうございました

884 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:42:01 ]
ようはコード変換のファセットだけUTF-8のものと差し替えればいいんだ。

BoostにもUTF-8コード変換のファセットがあるんだが、
対象がUCS-4だからWindowsのwchar_tでは使えないだろう。
それならおそらく自作するしかない。誰か作っているかもしれないが。
www.boost.org/libs/serialization/doc/codecvt.html

885 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:49:05 ]
>>884
汎用的なcodecvt<>のセットがどっかにあるんなら俺も欲しいな
boost::iostreams::codeconverterとかはpublicなデストラクタを備える
codecvt<>実装を要求するんで、VC++標準のcodecvt<>は使えないしな

iconvあたりを使ってデッチあげる手もあると思うが、状態をmbstate_tで
管理しなければならない辺りが悩ましげだし、wchar_tのバイト数が決まってないのも
やっぱ面倒だよな

886 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 14:25:44 ]
使ったことないけど
ttp://tricklib.com/cxx/ex/babel/

887 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:04:43 ]
CSimpleStringクラスのCopyChars()をそのまま使うと、「古い形式で使われています」と
警告がでるんですが、この関数の新しいバージョンってありますか?
探したけど見つかりませんでした

888 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 16:52:12 ]
#define _SECURE_ATL

889 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 17:30:31 ]
やっぱりないですよね
#pragma warning( disable : 4996 )で消しました

890 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 17:38:19 ]
#if (_MSC_VER > 1310)
#pragma warning(push)
#pragma warning(disabel:4996)
#pragma warning(pop)
#endif



891 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:16:38 ]
template <class Ch,class Tr=std::char_traits<Ch> >

これって何してるのですか?

892 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:20:32 ]
その気になれば、Trをstd::char_traits<Ch>でない何かにすることもできる、と

893 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:27:59 ]
テンプレート引数のデフォルト値

894 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:59:19 ]
そう

896 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:05:08 ]
basic_ofstreamを拡張して
EUC出力したいのですけど何か参考になる
URLとかないでしょうか?

897 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:13:15 ]
http://

898 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:23:06 ]
つ[www.google.co.jp/]

899 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:28:17 ]
>>896
コード変換はストリームの管轄ではない。>>879-886
でも、basic_ostream<char>だとcodecvtは使われないのか?

locale関係に挫折したら、邪道だけどストリームバッファを
作成して書き込み前の瀬戸際で変換をかけるという手もあると思う。

900 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 10:26:32 ]
unsigned char --> charの変換だけが欲しいのに
なんでここまで大がかりになるのかよーわからん。

C++の言語設計ポリシーがきもいのが原因なんだろうけどさー



901 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 11:52:33 ]
【自己責任で】あっさり変換しちゃえ。
究極的にそれができるから、C/C++が好きだ

美しくスマートに書くのは確かにめんどいが

902 名前:!omikuji mailto:sage [2007/09/01(土) 12:47:39 ]


903 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 14:51:04 ]
興味本位でModern買って、今日届いたけど難しいんだよな?
もっと勉強してから読むか


904 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 15:06:26 ]
第三章を読んで(いい意味で)爆笑するといいよ

905 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 18:38:25 ]
クラスのメンバにfstreamを持たせるのってよくない?
コピーコンストラクタをちゃんと書いてないとコピーできないよね。
なんかもっといい方法ってあるんだろうか。。

907 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:00:09 ]
fstream を局所的に使う設計に変更するとか

908 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:58:17 ]
refcount付きのfstream*入りクラスつくってメンバにいれるとか

909 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:59:49 ]
unicode_iteratorの最強さは異常
組み込みでも使えるな

910 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:52:58 ]
memcpy.asmというファイルでエラーが出て困っています
これはどういう時に呼び出される命令なんでしょうか?



911 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:56:59 ]
>>910 memcpy() したときだろ。

912 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:08:48 ]
memcpy使ってないときにも落ちちゃうんですが
別の関数とかクラスが内部で使ってる場合もあるんですかね?

913 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:13:57 ]
ああ

914 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:14:39 ]
>912
そりゃ、メモリコピーなんて非常に基本的な機能だからいろんなところで使われてるだろう。

915 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:15:58 ]
てかダメだろう落としてちゃ。もうプログラムングやめた方がいいんじゃねぇの

916 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:17:41 ]
じゃあ原因の特定はむずかしいですね
どうしよう

917 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:18:06 ]
デバッガでコールスタック見ればいいんじゃない

918 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:30:05 ]
>>917
今やってみたら原因がわかった気がします
ありがとうございました

919 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 04:18:43 ]
基本的な質問ですみません
VC++6でwindows コンソールアプリを作っていますが
たとえば

int nA;

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

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




920 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 04:28:44 ]
>>919
コンソールウィンドウの「簡易編集モード」をオフにするとか。
あれ?マウスカーソル持って行っただけで選択になったっけ?



921 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 04:30:26 ]
VCで/clrを付けると、GC(gcnew)が使えるようですが、これは.NETと関係あるんですか?

922 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 04:48:44 ]
>>920
マウスを持っていって置くだけでなります

923 名前:919 mailto:sage [2007/09/02(日) 04:54:02 ]
>>920
ありがとうございます
「簡易編集モード」でぐぐったら、プロパティで変えられるんですね
変えたらならなくなりましたが
このウィンドウだけ、プログラム上から変える方法はあるんでしょうか?

924 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 05:16:22 ]
>>923
さぁね。あとはこっち↓行けば?

Win32API質問箱 Build56
pc11.2ch.net/test/read.cgi/tech/1186989201/

925 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 07:33:16 ]
レジストリ書き換えれば(ry

926 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 07:58:40 ]
>>921
コンパイラは基本的に.NETの中間言語 (CIL)を吐き(一部生の機械語もあり)、
実行には.NET Frameworkなどが必要になる。

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

C++/CLI について語ろうぜ Part2
pc11.2ch.net/test/read.cgi/tech/1142147319/l50

927 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 10:47:36 ]
>>922
「置く」なんてオレ語を使うからややこしくなる。
クリックしているんじゃないの?
クリックすることを「置く」なんて言っても通じないよ。

928 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 10:57:46 ]
クリックのことを押すと言うのはよくやる。

929 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:00:04 ]
押すじゃなくて置く

930 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:06:05 ]
持っていく→アクティブ/非アクティブ関係なく窓の上
置く→アクティブで窓の上
で、アクティブにするのにクリックしたんだと思ったが違うのか



931 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:15:04 ]
よし引っ張れ!
それだ

932 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:17:56 ]
クリックしたんじゃねぇか

933 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:34:08 ]
ダブルクリック→つっつく

934 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 12:42:48 ]
ドラッグ→ひっぱる

935 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 12:46:11 ]
最小化→消す

936 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 12:47:15 ]
プー吹いた

937 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:08:55 ]
CかC++にはinterfaceっていう予約語があるんですか?DirectX関係のソースに使われてました。
大文字でもなくマクロではないと思うし、処理系の拡張なら__interfaceという感じになってそうですし、
VC++だと色が変わるので、予約語だと思ったんですが。
でもWikipediaとかの予約語一覧にも載ってない…

938 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:17:37 ]
C#じゃね?

939 名前:デフォルトの名無しさん [2007/09/02(日) 19:20:41 ]
ねーよ

940 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:23:32 ]
virtual



941 名前:デフォルトの名無しさん [2007/09/02(日) 19:25:45 ]
struct

942 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:27:14 ]
import

943 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:28:41 ]
extern

944 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:29:39 ]
null

945 名前:デフォルトの名無しさん [2007/09/02(日) 19:30:43 ]
po

946 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:39:52 ]
inter

947 名前:デフォルトの名無しさん [2007/09/02(日) 19:41:16 ]
>>941
"interface" という語は C++ の予約語ではなく、
該当する COM ヘッダーの中で "struct" として #defined されます
(C++ では、構造体が標準でプライベートではなくパブリックの継承とアクセスを使用することを除けば、クラスと構造体は同じであることを思い出してください)。

msdn.microsoft.com/library/ja/jpdnguion/htm/msdn_drguion020298.asp

948 名前:デフォルトの名無しさん mailto:947 [2007/09/02(日) 19:43:53 ]
>>937>>947

949 名前:デフォルトの名無しさん [2007/09/02(日) 19:52:22 ]
陸上では日本人では全く勝負にならんが、コンピュータでもそうなんですかね?
Code Projectなんかがヘビーなコンポーネントを公開しているのはほとんど海外組み


950 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:58:19 ]
>>951
っ popen

953 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:58:30 ]
OSを書け

954 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:01:30 ]
>>951
そういう場合はexpectを使え、ということになっている

955 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:12:00 ]
一瞬>>953が煽りに見えたが、そうだ、ターゲットOSを書け

956 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:17:24 ]
>>956
・簡単なアプリを作る→その肉付けをしていき内容を濃くする
・簡単なアプリを作る→簡単なアプリを作る
・高度なアプリを作る→半年後見直すと自分で組んだプログラムが恥ずかしく感じ組みなおす
・高度なアプリを作る→挫折する

これらを繰り返していくうちに身に付くから、今できることをやるだけで色んな知識を覚えていくよ


960 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:36:39 ]
>>957
>>959
もともと発想力がないからか、自分で課題が思い浮かばないけど
とりあえず持ってる参考書は全て読んで、サンプルだけでも動かして
ちょこっと変更したりすることをしばらく続けて見ようと思う
いまはイテレーターアダプタと格闘中。



961 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:43:14 ]
>>951 >>958
多分勘違いしてはる
system()はコマンドを実行するようなモノであって、
線路(パイプ、FILE*など含む)に送信する働きはない


試作では、send(),recv()かなんかを使うことになるのでは
そっからはやり方はいろいろあるけど、自力で見出していくのでは

962 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:46:05 ]
>>951
例えばTeraTermを使っていいなら、自動運転用マクロ言語内蔵だから接続先からの特定のキーワードを待って
それに対して一定の反応を返すことくらいちょちょいのぱーだよ。

963 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:11:21 ]
>>964
まだ初期段階だから先は長いと思ってる
まあ仕事でC++使えば一気に向上するとは思うけど

967 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:12:27 ]
>>965
詳細はよくわからんが、connectしてデータをsendすればいいだけではないの??


968 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:26:00 ]
telnet特有のネゴシエーションとか、ログイン処理とか
URGデータの処理とか考えなけりゃね。

969 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:28:07 ]
>>968
そうかログイン処理が必要だな
こりゃ失礼

970 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:34:45 ]
今時telnetってとこには突っ込まんが
せめてライブラリ使うかexpectに汁っての

下らない仕事のためにtelnetを喋るTCPクライアントをわざわざ手書きするなんて
ナンセンス極まりない



971 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:46:27 ]
思うに、telnetで接続して、"q\n"かなんか、何か簡単にシグナルしたかったんだろう
そのくらいの軽務なら、connect(), recv()でいいんじゃないかと思った

CreateThreadはできるけど、system()がわからない。
きっと、IPC(広義の)の初心者さんなんだ ヒントくらいでいいんじゃまいかとw

972 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:54:37 ]
telnetぐらい3日でかけるだろ
どうせ暇なニート学生だろ?



973 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:59:55 ]
ニート学生って言語矛盾じゃないか

974 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:01:34 ]
どうせ学校もろくにいかないで
2chが動画サイトめぐりだろ
身分があるだけでニートとかわらんだろw

975 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:08:38 ]
何がしたいのかは知らないが、
そもそも telnet を使う必要が無いんじゃないか?

976 名前:デフォルトの名無しさん [2007/09/03(月) 00:10:10 ]
Cの基本的な文法については勉強して次は実際にSourceForgeでオープンソースの
プログラムを読もうと思っていたのですが難しすぎて分かりません
みなさんはある程度文法の勉強をしてからどのようにして勉強していきましたか?

977 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:13:36 ]
作りたいものを作る。それが一番。

978 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:15:51 ]
>>976
Cなら簡単に1万行ぐらいまでなら
読めるようになる方法がある。読めない文法だけ
飛ばしてたぶん処理追えるようにはなるとは思う

環境ちょっと限定になるけどな


979 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:16:17 ]
>>976
必要に迫られれば、驚くほどの速度で習得可能

文法の次はアルゴリズムの勉強がお勧め
アルゴリズムに関する説明(自然言語)を元にC言語ソースにする
これが結構難しい

980 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:18:20 ]
読むのと書くのは別の能力。



981 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:20:37 ]
書くスキルあげつつ読みたいなら

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

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



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

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

>>979
今読んでいる本が終わったらアルゴリズムの本も読んでみようと思います

983 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:30:13 ]
>>982
最初から完璧なコードが書けるなどと思うな
最初は誰でもつたないんだ
それを気にせずコード書け
書かなきゃいつまでたっても上手くはならん

984 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:33:16 ]
C++だったらそれこそ20冊ぐらい読まないと駄目だからなぁ…
と言っても読みながら書かないと理解できないような内容だから
読もうとしてる内に書く経験も積むことになるが

985 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:34:26 ]
20冊って何の本だよ

986 名前:デフォルトの名無しさん [2007/09/03(月) 00:35:03 ]
>>983
今は本を読んで演習問題などでコードを書いているという状況です

>>984
何かお勧めの本などはありませんか?

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

といいつつも、俺はなんもしてないな。

988 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:41:22 ]
手じかに役に立つ類のちょろっとしたものを書きたいのなら
ぶっちゃけCは向いてないよあまり

989 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:42:45 ]
演習問題を一通りやって何かを作ろうとしてもアイディアが出なければ
大学とか専門学校で出される課題のようなプログラムを作るといいよ
ここには宿題スレもある事だし

990 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:44:16 ]
ライブラリとかマクロとか使ってカスタムすればLL言語並の「軽い」C++ができるぜ
ただし作った奴以外には読めない使えない代物になるけど



991 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:46:46 ]
>>986
人に薦められた本が君に適している確率はかなり低いよ。
マスターしたけりゃ立ち読みして読みやすいと感じた本を読め。
仮にその本が結局ハズレでも、その次に選ぶ本はより君に適しているはず。

992 名前:デフォルトの名無しさん [2007/09/03(月) 00:52:56 ]
>>987
どうやれば市販のソフトのようなものが作れるかもよく分からない状況で
みなさんvisual studioとか使ってるんですか?

>>991
はいわかりました

993 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:55:13 ]
VisualStudio使ってるよ
VC++とVC#だけだけど

994 名前:デフォルトの名無しさん [2007/09/03(月) 00:58:05 ]

>>993
どのようなアプリをつくったんですか?
公開できるようなものではないと思いますがw


995 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:00:37 ]
次スレ
【初心者歓迎】C/C++室 Ver.42【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1188748806/l50

996 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:02:26 ]
うめるか

997 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:03:47 ]
>>994
馬鹿にしてんのか

998 名前:992 [2007/09/03(月) 01:07:49 ]
>>997
994は僕じゃないです

999 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:13:49 ]
うm

1000 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:14:10 ]
仕事で作った物って公開できないのが大半だな・・・



1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






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

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

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