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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:05/02/21 03:39:23
2様
3デフォルトの名無しさん:05/02/21 03:39:43
【関連スレ(処理系別)】
★初心者にVisual C++を教えるスレ★ Part16
http://pc5.2ch.net/test/read.cgi/tech/1101022051/
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
C++Builder相談室 Part13
http://pc5.2ch.net/test/read.cgi/tech/1108468718/
GCCについて part5
http://pc5.2ch.net/test/read.cgi/tech/1103057320/
cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/
Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/
4デフォルトの名無しさん:05/02/21 03:40:21
4様
5デフォルトの名無しさん:05/02/21 03:40:23
【関連スレ(その他)】
C言語なら俺に聞け! Part 102
http://pc5.2ch.net/test/read.cgi/tech/1108056236/
【標準C++】C++相談室 part39【STL含む】
http://pc5.2ch.net/test/read.cgi/tech/1106466303/
C/C++の宿題を片付けます 40代目
http://pc5.2ch.net/test/read.cgi/tech/1107625122/
【C++】template 統合スレ -- Part6
http://pc5.2ch.net/test/read.cgi/tech/1101384692/
C++は難しすぎ 難易度:2
http://pc5.2ch.net/test/read.cgi/tech/1071697977/
C言語の第一歩
http://pc5.2ch.net/test/read.cgi/tech/1031374980/
★C言語で遊ぼう!★
http://pc5.2ch.net/test/read.cgi/tech/1028269762/
プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/
C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/
フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/
C、C++の最適化について語るスレ
http://pc5.2ch.net/test/read.cgi/tech/1084676298/
61:05/02/21 03:41:18
テンプレ以上です
7デフォルトの名無しさん:05/02/21 03:53:24
>>1
8デフォルトの名無しさん:05/02/21 05:17:53
メソッドを書くときに、スーパークラスのメソッドをオーバライドするときには、
publicとprotectedとprivateのどれを使うのが適切ですか。
9デフォルトの名無しさん:05/02/21 07:52:07
>>8
「オーバーライドするから」と言う理由だけではどれが適切かは決まらない。
そのクラスにとって適切なのを選べ。
10デフォルトの名無しさん:05/02/21 08:06:51
10ゲト
11デフォルトの名無しさん:05/02/21 08:50:44
スーパークラスのメソッドのアクセス指定子と同じにしなさい
12デフォルトの名無しさん:05/02/21 09:21:06
>>11
private 継承しても public でオーバーライドか。おめでてーな。
13デフォルトの名無しさん:05/02/21 21:10:46
いつの間にか新スレが。おめでてーな。
14デフォルトの名無しさん:05/02/21 23:34:50
じゅう4様
15デフォルトの名無しさん:05/02/22 07:46:40
ぬるぽ様
16デフォルトの名無しさん:05/02/22 14:43:12
ガッ様
17デフォルトの名無しさん:05/02/22 17:03:41
class NullPointerException : public std::runtime_error {
 public:
  explicit NullPointerException(const std::string& what_arg) : std::runtime_error(what_arg) {}
};
18デフォルトの名無しさん:05/02/22 22:14:53
空欄にiを入れると「0 1 2 3 4」と表示しますが、
これを「4 3 2 1 0」と逆順に表示するように空欄を埋めなさい。

#include <stdio.h>
void main(void)
{
int i;
for(i=0; i<5; i++) printf("%d ",   );
}
馬鹿だからわかんねぇ〜〜〜〜!!!!ヽ(`Д´)ノ
19デフォルトの名無しさん:05/02/22 22:24:44
4−i
じゃねえ?
20デフォルトの名無しさん:05/02/22 22:25:42
・・・
21デフォルトの名無しさん:05/02/22 22:32:03
>>19
ははは・・・(´ー`)そうですね、ありがとうございました。
こんなのもわかんなかった俺って・・・_| ̄|○
>>20
えぇ、その気持ちわかりますよ。ごめんなさいごめんなさい
22デフォルトの名無しさん:05/02/22 22:43:04
_ト ̄|○
23デフォルトの名無しさん:05/02/22 22:44:33
C++で組むとCよりプログラムサイズが大きくなるって本当ですか?
24デフォルトの名無しさん:05/02/22 22:47:30
>>23
そんなことはないだろ。俺はBCC5.6.2に(ry
25デフォルトの名無しさん:05/02/22 22:47:38
プログラムサイズの定義から話し合おうじゃないか。
26デフォルトの名無しさん:05/02/22 23:24:06
noeh32.libをリンクしたら実行ファイルサイズが小さくなりました
27デフォルトの名無しさん:05/02/23 00:06:35
STLを使うt(ry
28デフォルトの名無しさん:05/02/23 00:28:45
>>27
環境によ(ry
使っても使わない時と比べ10Kほどしか(ry
29デフォルトの名無しさん:05/02/23 00:39:22
クラスAは、データを取得保持する共通クラス。
クラスBは、Aからデータを受け取って処理するクラス。
Aからデータを受け取るときに、hogeからhogexx(hogeから派生)
というふうにキャスト?しちゃってるんですが、これは良くないのですか?

class A{
public:
hoge* GetData();
};

class B{
public:
A *a;
void xmethod {
hogexx *p=(hogexx*) a->GetData();
}
};
30デフォルトの名無しさん:05/02/23 00:41:44
べつにいいよ。
31デフォルトの名無しさん:05/02/23 00:43:37
よくねえだろ。
A::GetDataが返す実体がhogexxならいいけど。
32デフォルトの名無しさん:05/02/23 00:46:33
>>29
良くないですね。
現状の hoge の定義がわからないと、言い切ることはできないのですが、
おそらく hoge に適切な仮想関数を定義するのが模範解答になると思います。
33デフォルトの名無しさん:05/02/23 00:46:43
>29
class A
class B : public A
のとき
A* pa = new B;
はオッケなのはわかる?

つまり
class 猿
class 人間 : public 猿
のとき
猿を人間にキャストしたら、知能が足りないのでまともな人間にはならない
人間を猿にキャストなら頭のいい猿になるので問題ない
3429:05/02/23 00:59:06
>>30-33
ありがとうございます。
クラスAは、もう何年も前にコーディングされhoge自身はまったく更新されていません。
hogeを派生したクラスがいろんなとこで使われているので、templateにするしかないのかな
と思っています。
他に良いほうほうがあったら教えてください。
35デフォルトの名無しさん:05/02/23 01:22:39
なんでtemplateがでてくるのかようわからん
もし >29で動作してるとしたらclass Aの返しているhoge*の
インスタンスはhogexxで作られているんじゃないか?
でclass Bでhogexx*にキャストしているのはhogexxのメソッドを使いたいから?
だったらclass B以降でよくつかうhogexxのメソッドをhogeのメソッドにして、
class Bでもhogeで受け取ってそのあとの処理ができるようにするべきでは?
hogeの機能不足が問題だと思われ
実際のソースを見てないからなんともいえないが、小手先のごまかしでなく
きちんと修正すべきだと思われ
それでも修正箇所が極力少なくてすむような修正じゃないとまずいと思うが

一番ダメダメなのは最初にhogexx *p=(hogexx*) a->GetData(); と書いた香具師
修正の時間が取れずに一時しのぎで書いたにせよ、後ででもいいからきちんとした形にしておくべきだったな
苦し紛れのコードを書くと、後の人間が苦労するといういい例
36デフォルトの名無しさん:05/02/23 01:46:28
class Aはhogeおよびその派生クラスの実体の生成には関与せず、
そのコンテナとしてのみ機能しているなら判らんこともない。

その場合ならclass Aの派生クラスを作ってGetDataをオーバーライドするのが手。
あー、まさかGetDataが仮想関数じゃない?
37デフォルトの名無しさん:05/02/23 02:30:40
>>36
オーバーライドでは戻り値の型は変えられないし、
Aがオブジェクトを保持してるんなら、派生クラスでもそれを返すしかないし、
オーバーライドでは何も解決しないと思う。
38デフォルトの名無しさん:05/02/23 03:58:17
>>37
>オーバーライドでは戻り値の型は変えられないし、
変えられるんだよ〜ン。
hogexxがhogeをpublic継承している限り、基底クラスAの hoge* GetData()を
派生クラスで hogexx* GetData() でオーバーライドすることは認められている。
ってかこれができなきゃ多態にならんでしょ。
でも、これ、知らんやつが多いんだよなぁw。

>Aがオブジェクトを保持してるんなら、派生クラスでもそれを返すしかないし、
「class Aはhogeおよびその派生クラスの実体の生成には関与せず」って断ってるやン。
当然、格納されているのはポインタか参照であることが前提だわな。
39デフォルトの名無しさん:05/02/23 04:03:35
hoge* GetData() のままでも多態になるがw
40デフォルトの名無しさん:05/02/23 04:06:59
GetDataを仮想関数にするのは当たり前
abstruct class
41デフォルトの名無しさん:05/02/23 04:09:50
一人大馬鹿が混ざってるな
42デフォルトの名無しさん:05/02/23 04:16:00
MMOを作ろう!企画を立ち上げました。協力できる人はこちら
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm

43デフォルトの名無しさん:05/02/23 05:13:01
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9652&forum=7&7
このページの最後の投稿にあるように、mallocが場合によってはデフラグを行なってから
メモリの割付けをしてもいいのですか?
4437:05/02/23 07:42:19
>>38
> 変えられるんだよ〜ン。
ポインタじゃない場合と勘違いしてた。ごめん。

> 「class Aはhogeおよびその派生クラスの実体の生成には関与せず」って断ってるやン。
ということは、
A は格納されるオブジェクトについて「 hoge およびその派生」を受け付けてしまうので、
これを「 hogexx およびその派生」に狭めることはできないのではないか?
と思う。
4537:05/02/23 07:44:18
private で継承するってことかな?
でもそうなると GetData() が仮想関数である意味が無いな。
46デフォルトの名無しさん:05/02/23 08:06:47
>>43
いいですよ。
実際のところは「マネージャ」ってのがMMUになるんだろうな。

ソフトでこれを実装できるかどうかは怪しいし、
できたとしてもパフォーマンス的に実用できないだろう。
47デフォルトの名無しさん:05/02/23 10:30:41
try {
 a = new char[1024];
 b = new char[1024];
 c = new char[1024];
} catch(bad_alloc e) {
 return 0;
}

ここで c の new の時に例外が発生した時にはやはり a , b は解放しなくてはいけないのでしょうか
また、スマートな解放の仕方をおしえてください
48デフォルトの名無しさん:05/02/23 11:31:04
初歩的な質問かもしれませんがお願いします。

debianで動くC++プログラム中で、あるタイミングで
ディスクの空き容量をチェックしたいのですが、
dfコマンドのような関数はありませんでしょうか。

ネットや本でさがしてるんですがプログラム中から
ディスクの空き容量を取得する方法がなかなかわかりません。

49デフォルトの名無しさん:05/02/23 11:36:16
>>47
boost::scoped_arrayのようなスマートポインタに突っ込む。
50デフォルトの名無しさん:05/02/23 13:19:31
>>47
a = b = c = NULL;
try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} chatch (bad_alloc e) {
delete a;
delete b;
delete c;
return 0;
}
51デフォルトの名無しさん:05/02/23 14:14:59
>>47
つboost::move_ptr
52デフォルトの名無しさん:05/02/23 21:28:24
>>50
このうっかりさんめw

a = b = c = NULL;
try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} catch (bad_alloc e) {
delete[] a;
delete[] b;
delete[] c;
return 0;
}
53デフォルトの名無しさん:05/02/23 22:49:48
>52
オマエモナー
a = b = c = NULL;
try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} catch (bad_alloc e) {
if(a)delete[] a;
if(b)delete[] b;
if(c)delete[] c;
return 0;
}
54デフォルトの名無しさん:05/02/23 22:58:48
>>53

delete[] 0;は効果を持たないから、そのif()は必要ない。
55デフォルトの名無しさん:05/02/23 23:03:47
a = b = c = NULL;
try {
 a = new char[1024];
 b = new char[1024];
 c = new char[1024];
} catch (bad_alloc e) {
 delete[] a;
 delete[] b;
 delete[] c;
 return 0;
}
これでOKですか?
delete[] に NULLわたしてもOKですよね・・
56デフォルトの名無しさん:05/02/23 23:18:12
a = b = c = NULL;
try {
 a = new char[1024];
 b = new char[1024];
 c = new char[1024];
} catch (bad_alloc) { // 使わないんだから変数名は省略できるだろ。
 delete[] a;
 delete[] b;
 delete[] c;
 return 0;
}
57デフォルトの名無しさん:05/02/23 23:54:45
a = b = c = 0;
try {
 a = new char[1024];
 b = new char[1024];
 c = new char[1024];
} catch (bad_alloc&) { // 使わないんだから変数名は省略できるだろ。
 delete[] a;
 delete[] b;
 delete[] c;
 return 0;
}

0 なんか使わない
例外は参照で受け取る
5857:05/02/23 23:55:31
orz
s/0/NULL
59デフォルトの名無しさん:05/02/24 00:01:01
えーと、ポインタの初期化はNULLじゃなくて 0 を
代入することが推奨されていると、
それが言いたい訳ね?
60デフォルトの名無しさん:05/02/24 13:18:55
class Kanojo : protected Girl {
 //略
};

main() {
 Kanojo shiho;
}

上のコードを実行するとbad_alloc例外が飛んでくるんですがどうすればよいのでしょうか?
61デフォルトの名無しさん:05/02/24 15:23:51
>>60
どうすればいいんでしょうね?
あなたが何をしたいのかわからないので答えようがありません。
62デフォルトの名無しさん:05/02/24 15:34:55
省略しないソースと、コンパイラー、OS、
を提出してくれれば答えてあげてもいいよ
63デフォルトの名無しさん:05/02/24 15:51:46
またいつもと同じやり取りが続く・・・
64デフォルトの名無しさん:05/02/24 18:53:26
BCCでGUIアプリを作りたいです。

cgiにしてApache上で動作させてブラウザからGUI…というのはできましたんで、
そのほかのGUIにする方法を教えて下さい。
もろ初心者です。
65デフォルトの名無しさん:05/02/24 18:59:21
Win32APIでも覚えなさい
66デフォルトの名無しさん:05/02/24 23:40:49
>>64
BCCじゃなくてBCBを金を出して買え。
金がないなら必死に「猫でも」でも読んでみろ。
67デフォルトの名無しさん:05/02/25 12:54:57
>>64
それはGUIじゃない。
基礎からやり直せ。
68デフォルトの名無しさん:05/02/25 13:24:18
>>64
↓どうぞ^^
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("MainForm.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
//---------------------------------------------------------------------------
#include "MainForm.h"
extern TForm1 *Form1;
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
  try {
    Application->Initialize();
    Application->Title = "はじめての>>64GUIプログラミング";
    Application->CreateForm(__classid(TForm1), &Form1);
    Application->Run();
  }
  catch (Exception &exception) {
    Application->ShowException(&exception);
  }
  catch (...) {
    try {
      throw Exception("");
    }
    catch (Exception &exception) {
      Application->ShowException(&exception);
    }
  }
  return 0;
}
69デフォルトの名無しさん:05/02/25 14:27:57
ずっと昔に先輩から、
「C(C++)でプログラム組むときは、1関数に1ファイル。」
と教わったことがあります。
でも、そんな事したら、1プログラムで何百ファイルとなってしまいます。
本当に皆さんもこんなことしているのでしょうか?
今でもおかしいと思ってやみません。
70デフォルトの名無しさん:05/02/25 15:01:42
>>69
んなわけねぇだろ
71デフォルトの名無しさん:05/02/25 15:02:24
簡単な質問かもしれませんが、分からないので教えてください。

以下のプログラム、核は出来ています。このまま使用しても目的は達成できます。が、
http://tokyo.cool.ne.jp/kuonnnokizunanbalivetehe/CSJS2EUC.C
http://tokyo.cool.ne.jp/kuonnnokizunanbalivetehe/CEUC2SJS.C
この2つのソースコードをJISを経過させずに直接変換させるにはどうしたらいいでしょうか?

72デフォルトの名無しさん:05/02/25 15:19:53
こっちにも貼ったのかよ
73デフォルトの名無しさん:05/02/25 15:21:07
>>69
ありえないキチガイだな。
74デフォルトの名無しさん:05/02/25 15:35:58
C++でもってことは、クラス内のゲッタでも1ファイルだったりして。
#1行ですむのにね。
75デフォルトの名無しさん:05/02/26 00:18:51
>>69
きみのかち。
76デフォルトの名無しさん:05/02/26 00:26:39
多分その先輩はコピペしまくりの超巨大関数しか作らないんじゃないの?
77デフォルトの名無しさん:05/02/26 00:48:24
もちにみ
78デフォルトの名無しさん:05/02/26 01:03:23
>>69
どっかの本(雑誌だったかな?)でも似たようなこと書いた記事見たことある。
当時はそうなんだ、と感心したものだったが、
いまだに実行に移していない(ってか、移せるわきゃ無いだろ)自分がいる。
7969:05/02/26 01:04:57
やっぱりそうですよね。
15年来の疑問がやっと解決しました。
どうもありがとうございました。
80デフォルトの名無しさん:05/02/26 01:15:11
15年!
81デフォルトの名無しさん:05/02/26 01:20:11
いちいち反応すなw
82デフォルトの名無しさん:05/02/26 01:25:58
libc.aをバラすと1ファイル1関数になってたりする。
リンク後の実行可能ファイルのサイズをちょっとだけ抑える効果ぐらいしかない。
依存関係にある関数同士はどうせ一緒にリンクされるのでライブラリ内でも1ファイルにまとめられていることがある。
83デフォルトの名無しさん:05/02/26 01:30:26
いや、15年前だと1つの関数が数百行とか平気で書く奴がいたらしい。
84デフォルトの名無しさん:05/02/26 01:31:38
大丈夫、今でもいる。
85デフォルトの名無しさん:05/02/26 01:36:10
某サイトでさらされている最長は六千行だったかな。
86デフォルトの名無しさん:05/02/26 01:39:23
ライブラリをリンクすると関係ない関数までリンクされちゃう?
87デフォルトの名無しさん:05/02/26 01:41:01
されない
88デフォルトの名無しさん:05/02/26 01:56:05
>>82
>依存関係にある関数同士はどうせ一緒にリンクされるので
>ライブラリ内でも1ファイルにまとめられていることがある。

その理由を否定する訳ではないが、どちらかというと関数群内で
共通の変数などをstaticでくくって隠蔽する目的もある。

Cのファイル単位のスコープは、C++のクラスが使えるようになるまでは
よく利用された。っていうか今でも利用されている。
8982:05/02/26 02:01:06
>>88
補足、感謝。
90デフォルトの名無しさん:05/02/26 02:11:25
C++でプログラム組むときは、1ファイルに1クラス。
であってますか?
91デフォルトの名無しさん:05/02/26 02:12:22
>>90
そりゃJavaだろ
92デフォルトの名無しさん:05/02/26 02:14:23
>>90
そうとも限らん。
自分的には1ファイル1ネームスペースが原則。
例外もあるが。
93デフォルトの名無しさん:05/02/26 02:28:39
質問です。

EMアルゴリズムを回してます。
「アクティブな構成」が「Win32 Debug」と「Win Release」の時で
結果が違うんですけどなぜでしょうか・・・。
収束するとこも違うし、Releaseだとエラーが出て止まってしまうんです。

Visual C++ 6.0、WindowsXPです。
9493:05/02/26 02:34:36
↑「Win32 Debug」と「Win32 Release」です。
95デフォルトの名無しさん:05/02/26 02:38:39
>>93
スレ違い。
こっち
★初心者にVisual C++を教えるスレ★ Part17
ttp://pc5.2ch.net/test/read.cgi/tech/1107926989/l50
9693:05/02/26 02:42:30
すまぬ。もちつきます。
97mi:05/02/26 12:54:10
初めまして★ 学校の課題で、

『キーボードから入力した数字を999が入力されるまで降順にソートしていき、数字の値と共にその数字分の*を表示する。999はデータとして扱わない。配列の要素数は10で11以上の入力はなく、数字以外の入力もないものとする。』

というのをやっているのですが、私が作成した以下のプログラムでは出来ませんでした。どこを直せばいいのか教えていただけないでしょうか?


#include <stdio.h>
void main()
{
intdata[10],i=0,j,max=0,dummy;
while (i < 10) {
if (scanf("%d",&data[i]),data[i] != 999){
printf("max = %d\n",max);
if (max <= data[i]){
dummy = data[i];
data[i-1] = max;
max = dummy;
}
} else {
data[i+1] = EOF;
goto next;
}
i++;
}
next: ;
for(j = 0; data[j] != EOF; j++){
printf("data[%d] = %d\n",j,data[j]);
}
}
98デフォルトの名無しさん:05/02/26 13:09:52
>>97
スレ違い。
こっち。
C/C++の宿題を片付けます 40代目
ttp://pc5.2ch.net/test/read.cgi/tech/1107625122/l50
99デフォルトの名無しさん:05/02/26 21:26:28
すみません、質問です。
変数の数値を桁ごとに分けて、
それぞれ別々の変数に入れる方法を教えてください。
100デフォルトの名無しさん:05/02/26 21:54:41
>>99
1.xを10で割ったあまりをaに入れる
2.aをketa[]に入れる
3.xを10で割ってxに入れる
4.1〜3をxが0になるまでくりかえす

2)
1.xを文字列に変換する
2.その文字列を文字数分ループさせて一文字ずつとりだす

おすきなのをどうぞ
101デフォルトの名無しさん:05/02/26 22:02:05
>>100
あまりを使うのですか!
ありがとうございます!
102デフォルトの名無しさん:05/02/26 22:16:07
商と余りを同時に求めたかったらdiv()を使えと
10399,101:05/02/26 22:36:57
>>102
div()を調べました。
こんなのがあるんですね、知らなかった
標準関数なのに・・・
104デフォルトの名無しさん:05/02/26 23:56:29
>>99
sprintf()で文字列にして、
sscanf()で一桁ずつ取り出せばいいのでは?

# って、>>100でガイシュツか…
105デフォルトの名無しさん:05/02/27 17:22:05
以下のようにすると,
`A' was not declared in this scope
というエラーがでてしまうのですが,どうすれば良いのでしょうか?

= A.h:
class A {
public:
typedef struct Hoge {
...
} hoge;
}


=B.h:
#include "A.h"

class B {
public:
B(A::hoge *hoge); // ここでエラー
}
106デフォルトの名無しさん:05/02/27 17:24:48
>>105 もしかして、セミコロンか?
107デフォルトの名無しさん:05/02/27 21:58:39
>>105
セミコロン落ちはコピペしたときのミスとすれば
エラーの原因はそこに引用した以外の部分にあるはず。
108デフォルトの名無しさん:05/02/27 22:01:00
--- A.h --------------
typedef Hoge {
...
};


class A {
public:
Hoge hoge;
};


--- B.h --------------:
#include "A.h"

class B {
public:
B(Hoge *hoge);
};

とりあえずこれならOKだよな?
109デフォルトの名無しさん:05/02/27 23:54:24
>>108
多分、

×typedef Hoge {
○struct Hoge {

なんだろうな。
それなら通る、ってか>>105だって(セミコロンは要るが)通るはずなんだよ。
結局、省略してないソース全体を見なきゃ何も判らないよ。
110デフォルトの名無しさん:05/02/28 00:19:36
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
FILE *fp;
unsigned count;
if(argc!=2){
exit(1);
}
if((fp=fopen(argv[1],"rb"))==NULL){
exit(1);
}
count=0;
while(!feof(fp)){
fgetc(fp);
if(ferror(fp)){
exit(1);
}
count++;
}
printf("%u",count-1);
fclose(fp);
return 0;
}

Press any key to continueで終わってしまうのですが、
コマンドラインでファイルを指定するという方法はどうすればいいのですか?
ファイルのバイト数を表示するプログラムらしいのですが。
何かプログラムソースに付け加えたり、新しいテキストファイルを作るのでしょうか?
MS-DOS プロンプトでいろいろ試しましたが、よくわかりません‥。
111デフォルトの名無しさん:05/02/28 00:46:20
>>110
そのプログラムの実行方法がわからんということか?
コンパイルしたら
./a.out hoge.dat
と打ってみろ。
112デフォルトの名無しさん:05/02/28 00:53:54
>>111
UNIXじゃなくてwindowsなんです、すみません‥。
Visual C++でやってるんですが、
Press any key to continueのあとは何も書き込めないみたいです。
コマンドライン引数について勉強不足なのでちっと勉強してみます。。
113デフォルトの名無しさん:05/02/28 01:51:16
>>112
DOSプロンプトに
出来たexe名 引数
と打つか、VC++のIDEから実行するなら引数を指定するとこがメニューのどっかにあるはず。
114デフォルトの名無しさん:05/02/28 02:32:56
C:\windows>デスクトップ\File\Debug\Cpp1.exe

とすると、「コマンドまたはファイル名が正しくありません.」
はでません。引数は謎です。
115デフォルトの名無しさん:05/02/28 04:49:20
>>114
プログラミングの前にコマンドプロンプトの使い方を勉強してこい。
116デフォルトの名無しさん:05/02/28 11:52:15
デスクトッフ
これ消せ
117デフォルトの名無しさん:05/02/28 12:31:13
>>115,116
イエス、アー
118デフォルトの名無しさん:05/02/28 18:00:35
↓に含まれるCommand Prompt Hereでも入れとけ
http://www.microsoft.com/windows95/downloads/contents/WUToys/W95PwrToysSet/Default.asp

ついでにSendToX、ContentsMenu(Win2000では動作不可)もおすすめ。
119v(^・^)v:05/03/03 23:56:28
age
120デフォルトの名無しさん:05/03/04 05:30:58
C++まだまだですわい。
121C++初心者:05/03/04 13:14:31
教えてください・・・
標準関数や、WindowsAPIなどで文字列へのポインタを返してくれる関数が
いくつかあるようなのですが、その文字列のメモリ領域?は誰がいつ解放して
いるのでしょうか・・。。
WindowsAPIでプリンタ名などの文字を返してくれる関数を使っていて
とても気になり始めました・・。
宜しくお願いいたします。
122デフォルトの名無しさん:05/03/04 13:18:13
何の知識もない状態で、何も調べずにカキコ

>>121
ヘルプ嫁
123デフォルトの名無しさん:05/03/04 13:34:52
>>121
概ね、4種類のパターンに分かれる。
1)システム固有などの固定領域にある文字列へのポインタを返す。
→アプリケーションの存在期間を通して気兼ねなく使える。
2)クラス固有などの動的領域にある文字列へのポインタを返す。
→クラスの存在期間を通して気兼ねなく使える。
3)関数固有などの領域に一時的に文字列をコピーしてそれへのポインタを返す。
→関数呼び出しごとに破壊されるので呼出し後にコピーしておく必要がある。スレッドセーフではない。
4)ヒープなどの領域からメモリを確保し、そこに文字列をコピーしてそれへのポインタを返す。
→自前で解放などする必要がある。
124デフォルトの名無しさん:05/03/04 13:38:52
5)引数で渡されたポインタをそのまま返す。(strcpy等)
125121を書いた者です。:05/03/04 15:03:15
ご返信ありがとうございます。

>>122
すみませんでした・・・
一応わからないなりに、MSDNとやらも見てみたのですが
それらしい記述を私が見つけることができずに、もやも
やしてしまっていました。。調べたのは下記URLです。。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpgdi/html/_win32_enumprinters.asp

>>123
>>124
ありがとうございます。
たくさん種類があるのですね・・
上記URLのAPIしか今のところわからない・・ので、
もし自前で解放しなければならない関数がでてき
たときはMSDN等のAPIリファレンスに記載されてい
るものなのでしょうか・・?(逆にいうとEnumPrinters
は何も記載が見つからないので何もしなくてもよい<123の1)にあたる>?)
126デフォルトの名無しさん:05/03/04 15:20:12
>>125
いろいろ問題があるなぁ。
・その関数はポインタを返さない。
返すのはBOOLだ。
・その関数が返してくれる情報は、呼び出し側が用意したバッファに格納される。
そのバッファをどう扱うべきかは呼び出し側が承知しているはずだ。
従って、>123→124のいずれのケースにも該当しない。
127123=126:05/03/04 15:22:43
ちなみに、その関数についてはあんたの提示したページからのみ情報を得た。
即ち、>122の言うようにヘルプを読みさえすれば>126で書いたような情報が得られるわけだ。
128121を書いた者です。:05/03/04 15:30:04
>>127
まだぜんぜん何もわかってないようです・・もう少し勉強してから
出直します・・
板汚しすみませんでした。
129デフォルトの名無しさん:05/03/05 00:13:36
>128
ま、「初心者歓迎」なので。
もう見てないかもしれんが、あんま落ち込まないようにな。
とりあえず Windows 云々の前に C/C++ 一般の勉強をした方がいいと思う。
ポインタとかメモリ確保とか。
未初期化のポインタ渡してメモリ破壊とかしてそうだぞ。
130デフォルトの名無しさん:05/03/05 00:26:33
まいどまいど言われる事だが、まともな入門書一冊仕上げればいいのに。
131デフォルトの名無しさん:05/03/05 14:27:15
下のようにenumにint値を入れたりintにenum値を入れるのって問題ありますか?


enum Keyname { keyShift, keyCtrl, keyAlt };
int k = 1;
Keyname optionkey = static_cast<Keyname>(k);
132デフォルトの名無しさん:05/03/05 15:03:07
>>131
かまわんけど普通は
 Keyname optionkey = Keyname(k);
133デフォルトの名無しさん:05/03/05 16:31:14
intにenumを代入するのは問題ないが、
enumに別の型を代入するのは設計が悪い。
134デフォルトの名無しさん:05/03/05 16:42:12
>>132-133
d

>133
設定ファイルやコントロールへの出入力で使ってるのですが‥‥
135デフォルトの名無しさん:05/03/05 17:11:07
>134
switch (k)
{
case 0:
opt = keyShift;break;
case 1:
opt = keyCtrl;break;
case 2:
opt = keyAlt;break;
}
もしくはenum型を使うことを諦めて、ただの整数型として保持。

enum型を使う以上、要素以外の値が代入される可能性を0にしなければ意味がない。
136デフォルトの名無しさん:05/03/06 11:48:36
柴田望洋著「明解C言語 入門編」のP.125、演習6-6での、
「画面に『こんにちは。』と表示して改行を行う関数
void hello(void){ /* … */ }
を作成せよ。」
という問題がいくら考えてもわかりませんorz
出来ればヒントを提示して頂けたらありがたいのですが…。
それ以前の問題は一応解けます。
携帯から書いたので記述が至らないところもあるかも知れませんがよろしくお願いします。
137デフォルトの名無しさん:05/03/06 12:00:14
>>136
単に標準出力に文字出すだけならprintfで十分じゃないか?
138136:05/03/06 12:39:49
>>137
無理ぽです。(つД`)
こんなに頭の弱い俺に解答お願いします。
139デフォルトの名無しさん:05/03/06 12:44:32
>>136 >>138
その本を最初から読みなおせ。
140デフォルトの名無しさん:05/03/06 12:46:06
台と棒があるのに天井に吊ってあるバナナが取れない
っていうレベルだな・・・
141デフォルトの名無しさん:05/03/06 12:46:41
void hello(void){printf("こんにちは。\n");}

……いくらなんでもこんなことがわからないはずあるか?たぶん別のことで悩んでるんだと思うけど
142デフォルトの名無しさん:05/03/06 12:59:38
>>135
enum型の値に、要素以外の値、例えば>>131の例では範囲:0-2以外の数値を代入しようとすると
型エラーが出るから、>>132の書き方で十分安全じゃないか?
さらには、
enum Keyname { keyShift = 1, keyCtrl = 2, keyAlt = 4 };
として、
Keyname optionkey = Keyname(keyShift | keyAlt);
といったことをする可能性もあるので、switch()だと苦しい気がする。

・整数系データ型の値は、明示的に列挙型に変換できる
・算術演算時には、列挙はデフォルトで整数に変換される
ことから、設定ファイルとの入出力においては、列挙型を整数値として取り扱ってもよいと思う。
enum型は、ユーザやコンパイラに、その変数の用途についてのヒントを与えることを目的としてるはずだし。
143デフォルトの名無しさん:05/03/06 13:08:31
>136
質問の仕方が悪い

普通「画面に『こんにちは。』と表示して改行を行う関数を作成せよ」
だったら質問は
・画面に表示する方法がわからない
・改行する方法がわからない
・関数をどうやって作るのかわからない
のどれかだろ?

>138
>こんなに頭の弱い俺に解答お願いします。
頭が悪いとかレベルじゃなくて、本を読む前からなげてるだろ
プログラム以前の問題だからちゃんと本読めばバカでもわかる問題だと思われ
これくらいも独力でできないならプログラムなんかするな、ムカつく

どうせ学校の授業の課題なんだろ
学校の授業なら単位落として、その授業二度と受けるな
必須科目なら、学校辞めちまえ
144デフォルトの名無しさん:05/03/06 13:55:10
multimap で 特定のkeyとvalueのペアを削除するにはどうしたらいいですか?
145デフォルトの名無しさん:05/03/06 14:05:49
>>144
equal_rangeで範囲を絞って、std::remove_ifで探索して、eraseで消す。
146デフォルトの名無しさん:05/03/06 14:10:25
>>144
multimap <string, int> mm;
size_t a = mm.erase((string)"apple");

a := 削除した要素数
147デフォルトの名無しさん:05/03/06 14:14:13
<特定のkey>とvalueのペア?
特定の<keyとvalueのペア>?
148デフォルトの名無しさん:05/03/06 14:20:59
>147
下です

forit ... {
 if ((it->first == key) && (it->second == value))
  mmap.erase(it);
}
っての作ってみた、やっぱり
>145さんみたいなことしたほうがいいのかな・・・
149デフォルトの名無しさん:05/03/06 15:45:09
>>148
そのコードは、multimapの要素がkeyによってソートされているという事実を
利用していないから、無駄が多い。
まずequal_rangeで範囲を絞って、それから、>>145のように標準アルゴリズムを使うなり、
手でループを書くなりして削除すると良いと思う。
150デフォルトの名無しさん:05/03/06 19:48:48
>>144
template <typename key_type, typename mapped_type, typename map_type>
void remove_kv(map_type& mm, const key_type& key, const mapped_type& value)
{
    typename map_type::iterator first = mm.lower_bound(key), last = mm.upper_bound(key);
    while (first != last)
        if (first->second == value)
            mm.erase(first++);
        else
            ++first;
}
151デフォルトの名無しさん:05/03/06 21:03:51
>>150 で答え出てるのに言うのもなんだけど以降のために念のため。
remove_if は multimap (連想コンテナ)には使えないでしょ。
152デフォルトの名無しさん:05/03/06 21:40:40
>>149
>>150
>>151
ご教授ありがとうございました
>>150さんソースありがとうございます!
153デフォルトの名無しさん:05/03/06 22:41:38
>>150 equal_range() 使えよ。
154150:05/03/07 01:13:59
>>153
あえて書くなら
template <typename key_type, typename mapped_type, typename map_type>
void remove_kv(map_type& mm, const key_type& key, const mapped_type& value)
{
    std::pair<typename map_type::iterator, typename map_type::iterator> kv = mm.equal_range(key);
    typename map_type::iterator first = kv.first, last = kv.second;
    // 以下略
}
ですが…equal_range()は本質的にstd::make_pair(lower_bound(key), upper_bound(key))
ですから、特別使う利点を感じませんでしたのであえて使いませんでした。first,lastを
使わずにループ内で何度もメンバ参照を行うのは効率的に論外ですし。もし何か上の
コードに特記すべき利点がありましたら、後学のため教えてください。
155デフォルトの名無しさん:05/03/07 01:24:12
禿本では
>2つの別個の演算で先頭と末尾を探索するのは、エレガントでも効率的でもない。
>そのため、両方を同時に取得する equal_range() が用意されている。
とのこと。効率悪から equal_range 使えって言いたかったんでない?
156150:05/03/07 01:31:16
iteratorのコピー回数的にも…理解できないです。多分私には禿の
高尚な考えは理解できないんでしょう。抜粋ありがとうございます。
これから禿本とEffective STL辺りと睨めっこしてきます…
157デフォルトの名無しさん:05/03/07 01:33:06
>>156
lower と upper では内部の処理がダブりに
ダブりまくってるんでしょう
158デフォルトの名無しさん:05/03/07 02:06:49
>>157
いや確かにそうなんですが、上述のようにequal_range()は本質的に
std::make_pair(lower_bound(key), upper_bound(key))と同じ…と言うか
他の実装が思いつきません。
当座おとなしくequal_range使っておきます。
159デフォルトの名無しさん:05/03/07 03:09:41
>142
型エラーって何?
>Keyname optionkey = Keyname(keyShift | keyAlt);
Keynameにとって範囲外の値「5」を代入するな。で、型エラーって何。
160デフォルトの名無しさん:05/03/07 03:12:13
割り込んで申し訳ないが
禿本ってよく出てくるけど,正式名称わかんないんだ
推薦図書・必読書スレでもよーわからんし…

誰か教えてちょ
161デフォルトの名無しさん:05/03/07 03:15:35
>>160
http://pc5.2ch.net/test/read.cgi/tech/1106527792/
このスレのテンプレを見れば納得
162デフォルトの名無しさん:05/03/07 03:24:17
(・3・) ぉぅぃぇぃ
     >>161dクスブラザー
163デフォルトの名無しさん:05/03/07 03:27:28
お前ら禿禿禿禿って…いい加減にしろよ?
164デフォルトの名無しさん:05/03/07 08:51:07
>>162
禿本ってなんでした?よくわからなかったので教えていただけないでしょうか
165デフォルトの名無しさん:05/03/07 10:15:14
>>159
1. 型エラーについて
型エラー : invalid conversion from `int' to `Keyname'
列挙子に対しては、「明示的」 にしか、整数系データ型の値を入れることはできない。
従って、直接数値を代入する書き方は違法であり、型エラーとなる。
Keyname optionkey = 5; // 型エラー
Keyname optionkey = Keyname(5); // ok

2. 列挙子の範囲について
例えば、
enum Keyname { keyShift = 1, keyCtrl = 2, keyAlt = 4 };
と定義したときの、Keyname型の上限値は 「7」 である。
これは、
> 列挙の上限は、列挙に含まれるすべての列挙子の値よりも大きい
> 2の累乗値マイナス1のなかでもっとも小さい値である。
による。

もし>>159がこれまで列挙子について誤解をしていたのなら、
文字通りの例が禿本(プログラミング言語C++ 第3版)の§4.8 列挙(手元の第一刷ではp.112)
に書かれているから、読み直して勉強するといい。
166デフォルトの名無しさん:05/03/07 10:41:34
Cの話かC++の話か、前提を一致させてから議論しようよ。
167デフォルトの名無しさん:05/03/07 10:48:57
リンクを上にたどって行くと、一番始めで  >>131
dynamic_castが出てくるからC++の話のはずなんだが。
168:05/03/07 10:49:42
×dynamic_cast
○static_cast
169150:05/03/07 18:21:24
何となく分かった気がしました。禿本の「効率」って、速度的な効率と
いうよりもコーディング労力的な効率ですね。
170デフォルトの名無しさん:05/03/07 23:07:28
構造体配列を引数とした使い方が良くわからない。
他のサイトを見てもほとんどが、広域変数として扱っているか、main関数内での使用例しか書いていない。

VC++6.0を使用しているけど、何処か参考になるサイトってあります?


171デフォルトの名無しさん:05/03/07 23:52:08
Cで、実数を表す文字列を long double に変換したいです。
sscanf や strtod を使用してみたのですが、ULONG_MAX の文字列を入れた時、
期待したものと違う値になってしまいます。
どのように変換するのがよいのでしょうか?
172デフォルトの名無しさん:05/03/07 23:56:26
>>171
自前で変換関数をかきなされ。
173デフォルトの名無しさん:05/03/08 00:00:29
>>172
どのような変換が正しいのでしょうか?
一文字ずつ変換して10かけて…、とかそう言うヤツですか?
174デフォルトの名無しさん:05/03/08 00:54:03
>>169 違う。
175デフォルトの名無しさん:05/03/08 01:04:33
>>165
enum E { A, B };
E e = static_cast<E>(2);

↑範囲外の数値を代入しようとしているが、型エラーは出ない。
これでも安全か?
176デフォルトの名無しさん:05/03/08 01:15:25
>>175
Pascalと混同するな。
C/C++のenumは範囲をチェックしているわけではありませんから。
177デフォルトの名無しさん:05/03/08 01:17:52
32ビット環境なら32ビット値が列挙型変数の記憶領域として割り当てられるだろ、普通。
2^n-1などという上限を設けるということは、任意のnビットの変数が存在できることにならないか?
それを実現させるメリットが現実問題としてあるかどうか・・・。
bool型でさえ8ビット変数だというのに。
178175:05/03/08 01:30:15
>>176
俺はそんなこと承知なんだが、
>142が範囲外の値の代入に対して型エラーが出ると言ってるんで、
>159と同じ疑問を抱いたんだが、自身たっぷりに返してる>165がどうにも気になったわけよ。
179デフォルトの名無しさん:05/03/08 02:15:45
>>178
ねー、>>165の2.についてなんだけど、これは俺も読んでて知ってるんだけど、
有名どころのコンパイラでエラーか警告になる例何かある?
180デフォルトの名無しさん:05/03/08 02:25:19
>>179
無い。っていうか、変数を static_cast で enum に変換するケースを考えると、ほとんど無理。
181デフォルトの名無しさん:05/03/08 05:36:55
「列挙型はコンパイル時文法チェックしか意味がない」に3000トルコ・リラ。
182デフォルトの名無しさん:05/03/08 07:49:31
質問です。

ダブル値を 例えば15単位までをとる方法を教えてください。
例えば a=b/c のaに1.12345678901234 のように全部で15個の数字で
保存されるようにしたいです。

よろしくお願いいたします!
183デフォルトの名無しさん:05/03/08 08:04:28
>>182
つ[練炭]
184デフォルトの名無しさん:05/03/08 08:05:42
>>182
× ダブル値
○ double型の値

× 15単位
○ 15桁

double型の値は数字で保存されているわけではないので、多分無理。
表示結果が15桁になるだけでいいのなら printf で可能。
185デフォルトの名無しさん:05/03/08 08:48:02
sprintf()で桁数制限して、atof()かsscanf()で再び実数化。
但し、誤差の取り扱いには注意。
186デフォルトの名無しさん:05/03/08 09:31:45
typedef の適応範囲をファイル内だけにする場合ってどうすればいいですか?
187デフォルトの名無しさん:05/03/08 09:39:12
>>186
typedefはファイル内でしか有効でない。(ブロック内に書けばブロック内だけが有効範囲になるけど)
共通のヘッダに書かなければいいだけ。
188186:05/03/08 09:39:21
そのファイルはヘッダーで読み込まれる先での typedef とバッティングしたくないので
define でいう undef みたいなのはないですかね
189デフォルトの名無しさん:05/03/08 09:41:49
>>187
レスありがとうございます
typedef を使わないで直接全部書けばいいのですか・・・
190デフォルトの名無しさん:05/03/08 09:42:44
>>170
intとかの基本型の配列の時とやり方は同じ。
struct hoge {/* 〜 */};
void f(hoge ho[]);
int main()
{
  hoge h[4];
  f(h);
  return 0;
}
191デフォルトの名無しさん:05/03/08 11:31:46
char** p=new (char*)[10];
みたいなことできないんですか
できないなら他にnewする方法ありますか
192デフォルトの名無しさん:05/03/08 11:48:14
char** p = new char*[10];

普通にできんか?
193デフォルトの名無しさん:05/03/08 11:52:58
あ、括弧がついてるからできなかったんですね。
194デフォルトの名無しさん:05/03/08 12:56:51
>>188-189
根本から間違ってる。
バッティングしない名前を使え。
195デフォルトの名無しさん:05/03/08 13:03:21
WINAPI関連の事で質問です。
ダイアログウィンドウにクラスや構造体のポインタを関連付けることはできますか?

通常ウィンドウは、RegisterClass()でクラス登録するときに
cbWndExtreにポインタサイズを設定し、SetWindowLongPtrで0を指定すれば関連付けられたのですが、
こういう事をダイアログでできるのでしょうか?

環境はVS.NET2003です。回答お願いします。
196デフォルトの名無しさん:05/03/08 13:06:44
>>195
SetWindowLong()のGWL_USERDATAではダメなのか?と(ry
197デフォルトの名無しさん:05/03/08 13:08:42
C++で二次元配列を操作して同じ大きさの二次元配列を返す関数を作りたいのです。
が、配列の大きさを引数で指定しても、関数の中での配列宣言時にエラーになりますよね?

エラーにならずに宣言する方法って無いんですか?
198デフォルトの名無しさん:05/03/08 13:10:09
>>188
C++ なら、namespace に閉じ込めてはどうか。
199デフォルトの名無しさん:05/03/08 13:11:32
>>195
SetProp/GetProp
200デフォルトの名無しさん:05/03/08 13:15:09
>>196 , >>199
ありがとうございました。うまくいきそうです。
201 :05/03/08 13:40:11
freadでn文字読みこもうとして、nより小さない文字数しか読み込めなかったときEOFかエラーかどっちか知る方法ありますか?

202デフォルトの名無しさん:05/03/08 13:43:46
>>201
feofかferrorで調べる
203197:05/03/08 15:50:16
なさそうですね....なんとかポインタでやりくりします。
204201:05/03/08 20:01:56
>>202
ありがとう!
205デフォルトの名無しさん:05/03/09 00:54:18
イテレータについて質問です。
ポインタと同じような扱い、というのはわかりました。
単純に要素をみたい場合は*をつければ(*pみたいにして)いいとは思うのですが、もし要素がクラスとか構造体の場合はどうすればいいですか?
*p->〜みたいにするとコンパイルエラー出ました。
詳しい方、教えていただけると光栄です。
206デフォルトの名無しさん:05/03/09 01:08:30
詳細はわからんが、*p.〜とすれば?
207デフォルトの名無しさん:05/03/09 01:54:09
>>205
要素が構造体テンプレートの場合の例。
#include <algorithm>
#include <vector>
#include <iostream>

int main()
{
std::vector<std::pair<int, int> > foo;
foo.push_back(std::make_pair(0, 1));
foo.push_back(std::make_pair(1, 2));
for (std::vector<std::pair<int, int> >::iterator it = foo.begin(); it != foo.end(); ++it) {
std::cout << it->first << '\n';
}
return 0;
}
斯くの如く、普通にアロー演算子を使うだけ。
208デフォルトの名無しさん:05/03/09 02:24:42
はじめまして。流れ無視の展開で質問すみません。

Java厨なんですが、C++はじめました。
Javaしか知らないのですが、Cから勉強すべきでしょうか。
それともC++からいきなり入ってよいものでしょうか。
ポインタのあたりが心配です。

当方スペックはJavaだとdeep copyとshallow copyがなんとなくわかる程度です。
209デフォルトの名無しさん:05/03/09 02:30:01
Cから
210デフォルトの名無しさん:05/03/09 02:30:04
>>208
C++からでヲケ。ポインタはいずれにせよ身につけないかんが。
211デフォルトの名無しさん:05/03/09 02:31:54
C++が目標なら、Cをわざわざ勉強するのは回り道以外の何者でもない。
212デフォルトの名無しさん:05/03/09 02:41:08
>>209-211
レスサンクスです。

独習C++で始めようと思ってるですが、
レス見た感じ、とりあえずC++からいっちゃっていいですかね。
んで、ポインタで煮詰まったらCをザックリやろうかな、と。

どうもでした〜。
213205:05/03/09 08:18:04
回答ありがとうございます。

>>206
そのようなメンバはありません、といわれます。

>>207
明示的なアドレス解決演算子が必要と言われます。

プログラム的には以下のような感じです。

class Class1{
public:
void f1();
void f2();
private:
int a, b;
}

class Class2{
public:
int f3{
vector<CCar>::iterator p;
p->f1(); //この部分でエラーになります。
private:
vector<Class1> hoge;
}
214205:05/03/09 08:19:19
すいません。イテレータを定義した後の1行に
p = hoge.bugin();
を追加してください。
215デフォルトの名無しさん:05/03/09 08:53:27
ブギン!
216デフォルトの名無しさん:05/03/09 08:56:25
>>213
int f3 はカッコが無いが、関数のつもりか?関数の中で private: ?
CCar ってなんだ?

エラーの出るソースをそのまま貼れ。馬鹿者。
エラーメッセージはコピペしろ。未熟者。
217デフォルトの名無しさん:05/03/09 09:05:59
>>216
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
218デフォルトの名無しさん:05/03/09 09:43:26
>>212
おーい、「独習C++」はC経験者向けの本だぞ。
こんなのいきなり読んで分かるわけないだろ。

C未経験者なら「標準講座C++」か「はじめてのC++」あたり。
219207:05/03/09 09:59:43
>>213
てめぇ、他人のソースに対する感想がそれかい。
藻前は>207を理解できたんかできとらんのかどっちやねん。
220デフォルトの名無しさん:05/03/09 12:09:31
おいおい、感想って何だよ。ここは品評会場か? w
>>213には>>216の回答で十分。
221デフォルトの名無しさん:05/03/09 12:35:12
>>219
礼儀を知らない質問者も迷惑だが、
傲慢な回答者も同じくらい迷惑だ。
222デフォルトの名無しさん:05/03/09 12:40:21
アホか
アホな質問者への態度など傲慢でもなんでもいいってことだろ
223デフォルトの名無しさん:05/03/09 13:03:22
質問です。
リソースで作ったダイアログをDialogBox()で表示する際
プロシージャにデータを送るにはグローバル変数使うしかないでしょうか?
224デフォルトの名無しさん:05/03/09 13:24:43
>>223
いいえ
225223:05/03/09 13:26:49
具体的に教えてくれませんか?
226デフォルトの名無しさん:05/03/09 13:27:39
嫌です。
227デフォルトの名無しさん:05/03/09 13:34:11
>>223
スレ違い。
自分の開発環境に合わせた適当なスレに移動汁。>>3
228223:05/03/09 13:37:45
すみません。書くの忘れてました。。。環境はVC++.NETです。
229223:05/03/09 13:42:32
え〜;リソース絡んでる時点でレス違いになってそうなので他で聞いてきます。
すみませんでした。
230デフォルトの名無しさん:05/03/09 13:49:49
>>228
メッセージでもイベントでも好きなもの使えばいいんじゃね?
231Aransk:05/03/09 14:17:59
「C++の進化と設計」立ち読みしました。
Javaの話が全然出て来ない?と不思議に
思ってたら、「1994年」の本を翻訳したもの。
我々日本のC++プログラマーは10年!以上
遅れているのか?10年前の情報が日本のC++界では
未だに役に立つのか?
232デフォルトの名無しさん:05/03/09 14:23:16
>>223
DialogBoxParam()
233223:05/03/09 14:38:33
ご回答ありがとうございます。

>>230
モーダルダイアログなのでその方法は無理そうでした。
説明足らずですみませんでした;

>>232
もっと他の方法で実装しようかと思ってましたけどこんな
便利な関数があったとは・・・。

ありがとうございました。
234デフォルトの名無しさん:05/03/09 15:28:01
リストクラスにNodeクラスのポインタをぶらさげてます。
これにtreeを作るために
class HyperNode : public Node {
リストクラスのポインタ;
etc.
}
のポインタをぶらさげようとしています。現状で
すべてのNode,HyperNodeの成分をvoid print_all(&cout)と
virtual void Node::print_node(&cout),
virtual void HyperNode::print_node(&cout){
Node::print_node(&cout);
ホニャラ->List::print_all(&cout);
}
でtreeをたどって出力することはできますが、似たような作りの関数で
各々のNodeの成分をいじると、rootのnodeやらリストやらがなくなって
しまい、treeをロストしてしまいます。
クラスの設計がまずいのでしょうか、それとも個々の関数のコーディング
ミスでしょうか。よろしくお願いします。
235デフォルトの名無しさん:05/03/09 15:47:15
俺語を使われて質問しても的確に回答できる人間はおるまいよ。
236デフォルトの名無しさん:05/03/09 16:00:17
ああ、ごめんなさい。
リストクラスではNodeポインタで保持すると定義しているところに
よりサイズの大きいHyperNodeポインタをぶら下げるとトラブルの
もとになるでしょうか。と訂正します。よろしくお願いします。
237デフォルトの名無しさん:05/03/09 16:13:00
ぶらさげるって何?m9(^Д^)プギャー
238デフォルトの名無しさん:05/03/09 16:29:05
>>236
あんたの拙い日本語を読解する努力するくらいならソースを見たほうがましだと思うよ。
239デフォルトの名無しさん:05/03/09 18:03:49
ソースを貼るには躊躇する長さだったので、概略を貼ります。
C++を使うのは初めてなので間違っている記述があればご指摘ください。
いちばんひっかっかっているのが、set_node()においてnew Nodeとして
領域を確保しているのに、HyperNodeをポインタをそこへ渡していることです。

class List {public:
Node *node_ptr;
void set_node(Node *nd) {(node_ptr=new Node)=nd;}};
class HyperNode : public Node {public: List *sublist;};

HyperNode *hnd_ptr; hnd_ptr=new HyperNode;
List::set_node(hnd_ptr);
240デフォルトの名無しさん:05/03/09 18:51:13
>>239
あんたの日本語同様支離滅裂で意味不明だな。
とりあえずアドバイスとしてはC++を一から勉強しなおせと。
241デフォルトの名無しさん:05/03/09 19:07:41
「コンピュータが理解できるコードなら誰でも書ける。
 優れたプログラマは人間が理解できるコードを書く。」
とは Martin Fowler の言だが、愚かなプログラマは
人間が理解できる文章すら書けないものなのだな。
242デフォルトの名無しさん:05/03/09 19:19:25
いや、>>239はコンピュータも理解できないw
コンピュータが理解できる部分は破壊的に不味い事してるし。

 ( node_ptr = new Node ) = nd;

243デフォルトの名無しさん:05/03/09 19:26:54
>>239
ポインタの理解が根本的に間違っているようなので、
C言語の教科書で勉強して下さい。

(node_ptr=new Node)=nd;
これって、どういうプログラム言語の影響なのかなあ?
244デフォルトの名無しさん:05/03/09 20:40:21
ビットが立っていることを確認し、まだ立っていないビットの最短位置を取得する方法で
ビットシフトと整数インクリメントで求める方法より高い効率を出せる処理ってありますか?
探索方向は昇順でも降順でもアトランダムでも構いません。
245デフォルトの名無しさん:05/03/09 20:50:29
>>244
まだ立っていないビットの最短位置、を説明してくれ。
246デフォルトの名無しさん:05/03/09 21:02:05
>>245
char型で10111011とあるとすると3番目(4)と7番目(64)がまだフラグが立っていないということです。

3番目が立っているか?ならば(ch & 0x0004)でいいと思うのですが、
そうではなくて、このケースでいうと8ビットあるうちのどの位置でもいいから、高速に位置情報を取得したいのです。
この場合は1がon、0がoffとして表現されていますが、逆でも構いません。
247デフォルトの名無しさん:05/03/09 21:29:13
>>246

8ビットで比較回数を必ず三回にする事は可能

if (ch & 0x0F) {
 if (ch & 0x03) {
  if (ch & 0x01) {
   // bit = 0;
  } else {
   // bit = 1;
  }
 } else if (ch & 0x0C) {
  if (ch & 0x04) {
   // bit = 2;
  } else {
   // bit = 3;
  }
 } 
} else {
 ・・・省略・・・
}



他は、アセンブラ命令でビットサーチ命令を使うとか・・・
248デフォルトの名無しさん:05/03/09 21:35:38
249デフォルトの名無しさん:05/03/09 21:57:49
>>234
ハゲワロス
250デフォルトの名無しさん:05/03/09 22:13:46
VC++ X86
入力した数の、立っているビット位置を表示
(0〜31 立ってない時は表示しない)

int main () {
{
       int n;

       printf ("input number: ");
       scanf ("%i", &n);

       if (n) {
              _asm {
                     bsr eax, n
                     mov n, eax
              }

              printf ("%d\n", n);
       }

       return 0;
}
251デフォルトの名無しさん:05/03/09 22:14:10
http://mukun_mmg.at.infoseek.co.jp/mmg/bncpp/09/145.html

body obj1,obj2(2.5,1.5,2.0);

このサイトのこの行で
クラス、構造体、共用体にデフォルト コンストラクタがありません。
とでるのですが、visualC++6.0の設定がおかしいのでしょうか?
252250:05/03/09 22:14:51
あ、int main () { の { は抜いて・・・
253デフォルトの名無しさん:05/03/09 22:20:46
>>251
そのリンク先、なんかものすごく異常なことになってないか?
254デフォルトの名無しさん:05/03/09 22:26:29
>>251
これは間違い探し?

本気で書いてるとしたらスゲェなw
255デフォルトの名無しさん:05/03/09 22:29:14
getメソッドで値を設定するのに感動した
256251:05/03/09 22:29:53
すいません、どこがやばいんでしょうか?
257デフォルトの名無しさん:05/03/09 22:33:27
>>247
64bitなら常に6回か。
ビット数が増えれば増えるほど威力を発揮しそうですね。
シーケンシャルにすれば利用状況が良くなるほど
探索回数が増大するからこっちのがお得ですね。

>>248
すごっ、比較すらしないのか。英語から勉強してみます。

>>250
ごめん、ほんとはJavaでやるつもりだったのでasmは使えません。
やっぱこういうのはCプログラマかなと思ってここで聞きました。

ありがとう大変参考になりました。>ALL
258デフォルトの名無しさん:05/03/09 22:33:31
>>256
真面目に勉強するつもりなら悪いことは言わんから購読止めろ。
それを書いてる奴はC++をほとんど理解してない。
259251:05/03/09 22:38:31
>>258
はい、分かりました。
すいませんが、どこかオススメのC++学習サイトはありませんか?
260デフォルトの名無しさん:05/03/09 22:42:17
>>259
サイトで勉強するのは全くお勧めできない。
本買え。>>218のどっちか本屋で立ち読みして選べ。
261250:05/03/09 22:54:33
あんまり使えない気もするけど、
n & (-n)で、一番小さい立ってるビットのみの値が帰る。
たとえば、0x42 なら 0x2

でも、どこぞの馬鹿がこれで特許とってるって話を昔聞いたw
262247:05/03/09 23:06:42
今見直したら、
} else if (ch & 0x0C) {

} else {
のみで良かった・・・;
263デフォルトの名無しさん:05/03/09 23:55:17
>>261
64bitなら32要素のテーブル用意すれば早く解決できるかも。
bitNum[(n&-n)];でいいなら、シンプルでいいよね。

> 特許
マジで?そんなの無効だと思うけどw
264デフォルトの名無しさん:05/03/09 23:56:47
>>261は中止。違うや、全然ちがう。
アホみたいに巨大なテーブルが必要じゃないか。
265デフォルトの名無しさん:05/03/10 10:43:07
>>256
正しい箇所の方が少ない。
266デフォルトの名無しさん:05/03/10 12:46:23
ちくしょう、>>251 のリンク先が見てみたいが
会社からだと「"_" が含まれる間抜けな URL です」とかいって
見られねぇ…っ!
267デフォルトの名無しさん:05/03/10 12:54:15
268デフォルトの名無しさん:05/03/10 16:21:59
コンストラクタの呼び出しワラタ
269デフォルトの名無しさん:05/03/10 16:36:30
こういう呼び出し方してよかったんだっけ?
270デフォルトの名無しさん:05/03/10 17:21:37
>>269
何の問題もなく、一次オブジェクトが生成されてその直後に破棄されるだけ。
決して、内部のコンストラクタを呼び直しているわけではない。
>267のソースをコンパイルして実行すると、デストラクタが4回走っていることでその様子がよく判る。
つまり、>267の記事は阿呆の書いたことを信用するな、自分の目で確かめろという教訓となっている。
271デフォルトの名無しさん:05/03/10 17:41:12
うわぁ、インライン関数の説明なんてもう、滅茶苦茶。
コピーコンストラクタはコンストラクタじゃないらしいし。
272デフォルトの名無しさん:05/03/10 18:44:04
printf()のほうが、ずっと使えると思うんですけど、
なぜC++っていうと>>にこだわるのですか?
273デフォルトの名無しさん:05/03/10 18:58:57
>>272
使いたきゃつかっても良いと思うけど。

printfは第一引数と後続の引数の整合性がコンパイル時に保障されないのが
いやだという意見はあると思う。
274デフォルトの名無しさん:05/03/10 19:06:53
sprintfはほとんどセキュリティホールそのものだから。
275デフォルトの名無しさん:05/03/10 19:20:07
(´-`)。oO(…snprintf…)

boost::format を使えばいいと思う。
276デフォルトの名無しさん:05/03/10 19:23:58
ヘー、boostでも穴はあるけどw、昨日booost見たけど
たいしたこと無いジャン。はぁだな,
フールプルーフじゃないよ。
277デフォルトの名無しさん:05/03/10 19:26:14
>>276
文才を感じる
278デフォルトの名無しさん:05/03/10 19:32:38
>>276
「穴」とは具体的に?
279デフォルトの名無しさん:05/03/10 19:38:44
boostに対応しているベンダーってどこ?
gccだけ?VC++6.0にどうやって入れたらいいのかわかんない
280デフォルトの名無しさん:05/03/10 19:48:33
6.0は捨てなさい。
281デフォルトの名無しさん:05/03/10 19:49:47
なんで?
282デフォルトの名無しさん:05/03/10 19:54:43
>>279
オフィシャルのGetting Startedを読んで理解できないようならプログラミングの前に英語の勉強をしなさい。
283デフォルトの名無しさん:05/03/10 20:39:12
テキストファイルへの上書きモードでの書き込みで、
例えば元にhogeとある所に、fooと書き込むと、
foohogeとなってくれるやり方がありましたら教えてください。
fopen("", "r+");でのだと、fooeとなりうまく行きません。
284283:05/03/10 20:42:23
すいません。環境はWindowsMe、コンパイラはVCかBCCです。
285デフォルトの名無しさん:05/03/10 20:57:10
>283
無い
286デフォルトの名無しさん:05/03/10 21:09:48
a
287283:05/03/10 21:30:37
>>285
分かりました。ありがとうございました。
288デフォルトの名無しさん:05/03/10 21:32:40
>>267
ネタにしかみえねー(w
289デフォルトの名無しさん:05/03/10 21:41:35
これはこれで、間違いを糾弾することで多くの知識が得られそうな、模範的な間違い事例ですね。
290デフォルトの名無しさん:05/03/10 23:55:29
間違い探しが簡単過ぎて問題にならんわw
291デフォルトの名無しさん:05/03/10 23:58:17
つか、サンプルコードの見せ方とか、確信犯っぽいよな。
292デフォルトの名無しさん:05/03/11 01:32:46
購読人数が2600人もいて誰からもつっこまれないんだろうか?
293デフォルトの名無しさん:05/03/11 02:05:08
みんな笑いながらヲチしてるに決まってるやン。
294デフォルトの名無しさん:05/03/11 04:55:11
>>267
別の意味ですごいな
295デフォルトの名無しさん:05/03/11 16:30:58
できませんでした
296デフォルトの名無しさん:05/03/11 16:56:35
質問させてください。

ifstream in;
string buf;

in.open("hoge.txt");
while(!in.eof()){
getline(in, buf);
cout <<++Count <<endl;
}

このようなプログラムを実行すると、3行のhoge.txtを
開いているのにカウントが、"4"と出て一行空白を読んで
きているみたいなんですが。やりかた間違ってますか?
とりあえず、
if(buf[0] == '\0')break;
というやつをgetline()の直後に書いて空白をカウントしない
ようなやりかたやったりしてます。
297296:05/03/11 16:57:31
一行読み込むのにgetline以外で良い関数、機能があったら
教えて下さい.
298デフォルトの名無しさん:05/03/11 17:32:17
>>296
 while( getline(in, buf) )
  std::cout << ++Count << endl;
299デフォルトの名無しさん:05/03/11 17:38:28
0L や 1L ってどういう意味ですか?
300デフォルトの名無しさん:05/03/11 17:50:20
>>299
L で long 型である事を表す。
つまり、1L で long 型の定数 1 を示す。
301デフォルトの名無しさん:05/03/11 17:51:54
>>300
thx
302デフォルトの名無しさん:05/03/11 18:01:17
>>297
fgets
303デフォルトの名無しさん:05/03/11 18:02:46
0.0ならdoubleで0.0Fならfloat
0ならintで0Lならlong
なんで0.0がfloatで0.0Dがdoubleじゃないのか不思議だ
304デフォルトの名無しさん:05/03/11 18:41:45
>>303
実数型の基準がdoubleだから。
305デフォルトの名無しさん:05/03/11 18:44:23
>>303
なんでそう思うのよ?
306296:05/03/11 18:48:01
>>298 >>297
ありがとうございます!
空行読み込まずにいけました、わざわざeof見なくても
いいんですね。
307デフォルトの名無しさん:05/03/11 18:48:24
>>304, >>305
単精度浮動小数点数ってことは、数学的にはxでしょ。
倍精度浮動小数点数ってのは、数学的には2xでしょ。
なんで二名さまからが基準になるのか不思議でしょうがない。
308デフォルトの名無しさん:05/03/11 19:01:07
数学なんかは全く関係ない。単精度とか倍精度なんて物は恣意的なもの。
単にintと同じビット数の実数をフォーマットを単精度と呼んでいるだけ。
309デフォルトの名無しさん:05/03/11 19:04:22
すみません、おしえてください。
VC++6.0 WinXPSp2です。
htmlを拡張子にしたファイルを量産したくて、
以下のようなコードを書いてます。
この関数がたくさん呼ばれます。

問題は、
fout.fail() でひっかかるのですが、なぜでしょうか?
errlは0になります。。
filepathは256Byte未満です。

// global
ofstream fout;
//---- 中略
void xxxxxx( char *foldername, char *set )
{
char filepath[MAX_PATH*2];
memset( filepath, 0, MAX_PATH*2 );
sprintf( filepath, "%s%s.html", foldername, set );
MakeSureDirectoryPathExists( foldername );
fout.open( filepath );
if( fout.fail() ){
unsigned long errl = GetLastError();
return;
}
fout << xxxxxxxxxx; // 略
fout.close();
}
どうかよろしくお願いいたします。
310デフォルトの名無しさん:05/03/11 19:08:54
>>308
だったらshort floatとfloatでいいのでは?
311デフォルトの名無しさん:05/03/11 19:41:54
>>307
その理論で行くと、整数系の基準は char でないと不思議だな(w
312デフォルトの名無しさん:05/03/11 20:00:56
>>309
> // global
> ofstream fout;
やい、やめろ!
313デフォルトの名無しさん:05/03/11 20:01:33
>>311
Integer = 整数
Character = 文字
不思議ではないね
314デフォルトの名無しさん:05/03/11 20:15:55
>309
判らんが
sprintf( filepath, "%s\\%s.html", foldername, set );
か?あと
// global
やめろ
315309:05/03/11 20:34:39
309です。
なぜか、特定の文字列のファイル名がだめみたいです。。
[email protected] はokだけど、
[email protected] はだめ。
ちなみに、↑後者もエラーで返ってくるもののファイルは作成されているが、書き込みができない。
( fout << xxxが反映されていない)

sprintf,グローバル変数の使い方に問題ありますか?
代替案あればお願いいたします。
316デフォルトの名無しさん:05/03/11 21:16:59
>>310
頑張って俺規格Cを作ってください。
型名はどうでもいいけど、
標準の浮動小数点型は、
標準の整数型以上の有効桁数を持つようにしてね。
317デフォルトの名無しさん:05/03/11 21:21:53
>>316
そんなことせんでも俺デコーダを作ればいいじゃないか
318デフォルトの名無しさん:05/03/11 21:26:31
     ミミ ヽヽヽヽリリノノノノ
    ミ   ,,、,、,、,、,、,、,、、 彡
     l  i''"        i彡
    .| 」   -‐   '''ー  |  
    ,r-/   ∧  く∧  |  
    l    ´゚  ,r "_,,>、 ゚' | プギャ━━━━m9(^Д^)━━━━!!!!
    ー'     ト‐=‐ァ'   |  
     ∧     |    |    l    
   /\ヽ    ` `二´'   /    
 /     ヽ.  `ー--一' ノ/ヽ   
/     r‐-‐-‐/⌒ヽ-─''   `、  
 ヽ、  |_,|_,|_,h( ̄.ノヽ>>1    ヽ
 ー-ヽノ| `~`".`´ ´"⌒⌒)    ヽ
 ノ^ //人  入_ノ´~ ̄      )

319309:05/03/11 21:33:10
解決しますた。
ありがとう!

シュタッ!
320デフォルトの名無しさん:05/03/11 21:38:37
int16とかint32とかint64、float16とかfloat32とかfloat64
これらの中でOSごとの得意精度がint,floatを襲名する
これが俺の理想
321デフォルトの名無しさん:05/03/11 21:52:28
>>309
せめてこれくらいにしろ。
DWORD hoge(const char *foldername, const char *set)
{
    std::string filepath;
    filepath += foldername;
    filepath += set;
    filepath += ".html";
    MakeSureDirectoryPathExists(foldername);
    std::ofstream fout(filepath.c_str());
    if (fout.fail()) {
        return GetLastError();
    }
    fout << xxxxxxxxxx; // 略
    return 0;
}
322デフォルトの名無しさん:05/03/11 21:59:08
あげまんこ
323デフォルトの名無しさん:05/03/11 21:59:30
あげたてすじ
324デフォルトの名無しさん:05/03/11 21:59:53
まんこ
325デフォルトの名無しさん:05/03/11 22:00:30
ちんこまんこ
326デフォルトの名無しさん:05/03/11 22:07:02
205はエバに乗った状態でセクースしろ。
327デフォルトの名無しさん:05/03/11 22:10:50
















いやだ。
328デフォルトの名無しさん:05/03/11 22:13:24
なにこの流れ
329デフォルトの名無しさん:05/03/11 22:18:00
春休み
330デフォルトの名無しさん:05/03/11 22:18:44


>>328
※sageは禁止です。

> 1 :デフォルトの名無しさん :05/02/21 03:38:48
> エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
> ただしその場合、質問者は必ず、環境を書きましょう。
> ※sageは禁止です。




331デフォルトの名無しさん:05/03/11 22:19:09
     ミミ ヽヽヽヽリリノノノノ
    ミ   ,,、,、,、,、,、,、,、、 彡
     l  i''"        i彡
    .| 」   -‐   '''ー  |  
    ,r-/   ∧  く∧  |  
    l    ´゚  ,r "_,,>、 ゚' | プギャ━━━━m9(^Д^)━━━━!!!!
    ー'     ト‐=‐ァ'   |  
     ∧     |    |    l    
   /\ヽ    ` `二´'   /    
 /     ヽ.  `ー--一' ノ/ヽ   
/     r‐-‐-‐/⌒ヽ-─''   `、  
 ヽ、  |_,|_,|_,h( ̄.ノヽ>>1    ヽ
 ー-ヽノ| `~`".`´ ´"⌒⌒)    ヽ
 ノ^ //人  入_ノ´~ ̄      )

332328:05/03/11 22:34:13
>>330
まあ*質問*には変わりないんだが……
333デフォルトの名無しさん:05/03/11 23:03:43
STLスレのが乗り移ってきたのだろう。
334デフォルトの名無しさん:05/03/11 23:05:28
ワロス
335デフォルトの名無しさん:05/03/12 22:59:35
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/252.txt
ちと上のプログラムを見てくださいませ。

erstyw42756857668o8o897098-p98@h
を入力したら

見つかりました。
rt756743t43f52q35s53feuiyuuyoiop
----------------------------------------------

と表示されるべきなのですが、

見つかりました。43f52q35s53feuiyuuyoiop
rt756743t43f52q35s53feuiyuuyoiop
----------------------------------------------

↑に書いたように
"見つかりました。"
の右側に変な文字列が表示されます。
原因は何なんでしょうか。

環境は
gcc version 3.3.3 (cygwin special)
winxp home(sp2)
です。
336デフォルトの名無しさん:05/03/12 23:17:41
>>335
BCCではなんともないが。
337デフォルトの名無しさん:05/03/12 23:19:31
>>335
文字列を全部シングルバイトにしてみれ
338デフォルトの名無しさん:05/03/12 23:25:09
>>335
Windowsの場合、改行コードは\r\nの2文字。
strの末尾の\nだけを\0に変えも\r(復帰)が残る。

shoukai内のprintf("0000 = %s", str);
では、行の先頭に戻るだけで、改行されない。
その後、その行を
mainのprintf("見つかりました。\n");
で上書きしている。
339デフォルトの名無しさん:05/03/12 23:31:22
なんでバイナリモードじゃないのにfgetsの中で\r\nは\nに置き換えられていないんだ?
340デフォルトの名無しさん:05/03/13 00:33:21
shoukai関数の30-33行目を以下のようにすることで解決しました。

if(str[len-1] == 0x0a){
str[len-1] = '\0';
if(str[len-2] == 0x0d){
str[len-2] = '\0';
}
puts("ahoaho");
}

ttp://www9.plala.or.jp/sgwr-t/c/sec17.html
こちらのページに0x0dと0x0aについての記述があり
0x0d 0x0aは>>339氏の指摘どうり
0x0aに変換されると思っていたんですが
cygwinでは違うのでしょうか。
341デフォルトの名無しさん:05/03/13 00:45:19
>>338氏ありがとうございました。
\rを消して無事に実行できました。
342デフォルトの名無しさん:05/03/13 01:18:50
>>340
cygwinの改行コードはLFのみだから。
343デフォルトの名無しさん:05/03/13 02:24:23
>>341
Cygwin gccでも、オープンモードを"rt"にすれば、
改行コードの変換をしてくれるようなので、
今後のことを考えるとそちらの方がいいかも。

UNIXとDOSで、テキストの定義が違うので、
気をつけないといけないね。
テキストモード ≠ CR/LF変換
344デフォルトの名無しさん:05/03/13 02:42:16
long double について質問です

現在の long double のサイズが
VC6〜7.1=8byte
MinGW=12byte
と、定まっていないのですが、今後どちらに収束するのでしょうか?
(それとも収束しない?)

あと、VC等で 12 byteの変数を扱いたい場合
どういった方法があるのでしょうか?

ご教授お願いします
345デフォルトの名無しさん:05/03/13 07:18:31
ちなみにかなり昔のVCや今のBCCのlong doubleは10byte
346デフォルトの名無しさん:05/03/13 11:57:17
char[3]
347デフォルトの名無しさん:05/03/13 13:03:22
>>346
12bitじゃないよ
348347:05/03/13 13:03:56
誤爆です
349デフォルトの名無しさん:05/03/13 15:26:04
こういうのも誤爆って言うのか
350デフォルトの名無しさん:05/03/13 17:41:06
>>347
うちのCharは4ばいとです
351デフォルトの名無しさん:05/03/13 18:13:23
>>344
収束していくかどうかは分からないが、現状64bitとしているコンパイラの方が
感覚的に多いように思われる(未確認)。

VC++で80bit使う方法は、以下の通りでいけるらしい(未確認)。
ttp://www.microsoft.com/japan/developer/library/vccore/_crt_floating.2d.point_support.htm
実際には処理はコプロセッサに任せているだけだから実際は80bitを処理して
いる。Borlandはlong doubleに80bitを採用しているらしい(未確認)。俺が使って
いるコンパイラはデフォルトが64bitで、コンパイラスイッチで80bitへ切替可能に
なっている。

【参考URL】
ttp://support.microsoft.com/default.aspx?scid=kb;en-us;129209
ttp://www.microsoft.com/JAPAN/developer/library/vccore/_crt_long_double.htm
ttp://www.microsoft.com/JAPAN/developer/library/vclang/_pluslang_fundamental_types.htm (←コレちょっと嘘が入ってるかも)
352デフォルトの名無しさん:05/03/13 18:28:49
>>351
BCB6Update4(bcc32 5.6.4)でlong doubleが80bitなのを確認しますた。

おまけ
> 3.1.2.5 各型の浮動小数点数値の表現とセット
> Intel 8086 で使用される IEEE 浮動小数点フォーマットは,すべての C++Builder 浮動小数点型で使用されます。
> float 型は 32 ビット IEEE リアルフォーマットを使用します。
> double 型は 64 ビット IEEE リアルフォーマットを使用します。
> long double 型は 80 ビット IEEE 拡張リアルフォーマットを使用します。
353デフォルトの名無しさん:05/03/13 19:37:59
大変申し訳ないのですが 10byte(=80bit) を求めているのではなく
12byte(=96bit) の方なんです…(´Д⊂ヽ

16bitCPUのころの名残で80bitが残されているけど
今後は80bitは使うべきではないと書かれています

それもこれも>>345が要らない薀蓄入れたせいだ。・゚・(ノД`)・゚・。
354デフォルトの名無しさん:05/03/13 19:46:25
struct bytes { unsigned char array[12]; };
基本コレで、sizeof(bytes)が12にならなかったら、
コンパイラ依存の機能(#pragmaとか__attribute__とか)を足せばできるだろう。
355351:05/03/13 19:47:03
>>353
それだったら多倍長浮動小数を使う。C++ならそういうクラスを、Cなら
そういうデータ型&関数群を使うことになる。組み込みの機能でって
言うのは、CPUとの兼ね合いがあるから無理がある。
356デフォルトの名無しさん:05/03/13 21:39:50
サーバのためにunion使うのは無謀?
357デフォルトの名無しさん:05/03/13 23:03:01
あまりにも初歩的なミスを犯しているのでしょうが、いくらやりなおしてもダメなので誰か助けてください。

http://www.kumei.ne.jp/c_lang/bcc/bcc_05.htm でBCCを使ったメニュー付きウインドー表示プログラム
のコンパイルを試しているのですが、

brc32 menu01.rc Release\menu01.exe

を実行すると

Error menu01.rc 4 11: Cannot open file: windows.h

というエラーが発生します。
ソースファイルを何度も書きなおしたり、このページまでのレッスンを全て始めからやり直したりしましたが
やっぱりダメでした。。

環境はWin98SEにBCC5.5です。
358デフォルトの名無しさん:05/03/13 23:04:51
359デフォルトの名無しさん:05/03/13 23:13:56
>>358
それはBCCのreadmeにあった内容とほぼ同じだと思うんですが、

bcc32.cfg
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"

ilink32.cfg
-L"c:\Borland\Bcc55\lib"

これ以外にも何か必要ということですか?
360デフォルトの名無しさん:05/03/13 23:17:01
WinAPIでの質問です。
HWNDから取り出したBitmap bm_fと、ファイルのBitmap bmを比較したいのですが
その比較の方法が分かりません。

BOOL chkimg(bm_f, bm, x, y)と言った感じで
bm_fのx,y地点からbmが同一であるかを取得したいです。
361デフォルトの名無しさん:05/03/13 23:23:46
HBITMAPでしたねBitmapは間違いです
362358:05/03/13 23:28:34
>>359
リソースコンパイラのほうか‥‥bcc32と勘違いしてた。

-iスイッチでインクルードパス指定すればいけるはず。
363デフォルトの名無しさん:05/03/13 23:32:48
>>360
C++と関係ない。APIスレへ。
364デフォルトの名無しさん:05/03/13 23:35:52
callocでメモリ確保して
strcatで書き込んだテキストが
メモ帳などで保存したファイルと異なってしまうのですが
なぜなんでしょう?

異なってる点は、strcatで書き込んだ最後は 000000000
メモ帳などで上書きすると 202020202020202020となるんです

メモ帳などで保存したと同じようにするにはどうすれば良いのでしょうか? 
365デフォルトの名無しさん:05/03/13 23:36:46
>>362
ありがとうございます。
でも、それは

ilink32.cfg
-L"c:\Borland\Bcc55\lib"
-I"c:\Borland\Bcc55\include"

としろという意味ですか? それともコンパイルするときに

-ic:\Borland\Bcc55\include

などとやればいいのですか?
試行錯誤すればいいのでしょううが、下手なことをしてパソコンを壊すと大変なので・・
何度もすみません。
366デフォルトの名無しさん:05/03/13 23:37:56
>>363
>>1にWinAPIもOKと書いてありますが?
マルチになりますが、そちらにも書かせていただきます。
367デフォルトの名無しさん:05/03/13 23:39:21
>>364 まさかとは思うが、 strcat でメモリに書き込んで、そのメモリをファイルに保存してるんだよな?
368デフォルトの名無しさん:05/03/13 23:43:25
>>365
brc32 -h
369デフォルトの名無しさん:05/03/14 00:14:29
>>367
そうとうりです
どうしてもおかしくなってしまうので
文字列を合わそうとしましたが、それもうまく行きません

A.txt B.txt を読み込んで
A と Bの間にstrcatで書き込んでるんです
それをC.txtに出力してます

追加する文字数は分かるので
ファイル内の文字数は、wSize = (size_t )filelength(fileno(fp));では
ダメなのでしょうか?
370デフォルトの名無しさん:05/03/14 00:23:07
>>368

brc32 -ic:\borland\bcc55\Include menu01.rc Release\menu01.exe

とやるくらいしか思いつきません…
諦める前にもう少し検索してみます。

どうもでした。
371デフォルトの名無しさん:05/03/14 00:34:28
>>370

そもそも windows.h は必ずしもインクルードしなくてもいいぞ。
windows.h を外してリソースのコンパイルが通るならばそれでOK。
372369:05/03/14 00:41:49
A.txtをfread()した後
strlen()で文字数を取得したら解決しました
373デフォルトの名無しさん:05/03/14 00:52:53
>>372
>fread()した後strlen()で

根本的に理解していない悪寒。
374デフォルトの名無しさん:05/03/14 01:07:05
>>372
かなりヤバくない?
fread()はそのままでは取得バッファの最後にヌルが付加されないので、
ヌル終端文字列として扱いたいなら、最低限、戻り値の位置に自分でヌルをセットする必要がある。
それでも実際には不完全だがセキュリティ上の問題は回避できる。
375デフォルトの名無しさん:05/03/14 01:11:54
>>369
「文字列を合わす」「うまく行かない」「AとBの間」「間にstrcatで書き込み」「それ」
「追加する文字数」「ので」「ファイル内の文字数」
以上、さっぱりわからん。
書き込む前に、自分以外にも伝わる文章かどうか読み直せ。
376デフォルトの名無しさん:05/03/14 02:04:29
>>375
お前には聞いてないからレスしなくていいよ
377デフォルトの名無しさん:05/03/14 02:24:02
いや、俺も何言ってるのかさっぱり分からん。
本人に日本語で説明させるより、
ソース晒させた方がはっきりするんだがね。
378デフォルトの名無しさん:05/03/14 02:37:29
copy a.txt + b.txt c.txt

で十分
379デフォルトの名無しさん:05/03/14 03:26:11
人に対して上手く説明出来ないのにCPUに対して上手く説明出来る訳ないだろ
380デフォルトの名無しさん:05/03/14 03:28:35
>>379
綺麗なコードが書けるお前に彼女がいないのは何故だ
381デフォルトの名無しさん:05/03/14 03:30:26
>>379
的を射た表現だな。my語録として貰いますよ。
382デフォルトの名無しさん:05/03/14 03:39:17
CPUに説明だって(プッ
CPUに説明すんのはコンパイラで十分だろ

それともアセンブラ信者ですかw?
383デフォルトの名無しさん:05/03/14 03:46:26
>>382 墓穴を掘るタイプ
人に対して上手く説明出来ないのにコンパイラに対して上手く説明出来る訳ないだろ
384デフォルトの名無しさん:05/03/14 04:01:17
墓穴の意味わかってる?
385デフォルトの名無しさん:05/03/14 07:57:12
藻前ら、もっとマターリ汁
386デフォルトの名無しさん:05/03/14 08:23:20
Cの隔離スレみたいだ
387デフォルトの名無しさん:05/03/14 10:43:08
ここで質問する人間のレベルだと、本人の説明と実際のソースコードが
食い違うなんてザラ。そもそもまともなコードが書けてないことも多々ある。
「うまく行きません」って質問は、まずソースを晒させる。これが鉄則。
388デフォルトの名無しさん:05/03/14 11:11:16
ここのスレタイに入ってる「初心者」ってのはプログラミング初心者のことなんだよ。
日本語の初心者は帰ってくれ。
389デフォルトの名無しさん:05/03/14 13:13:47
むしろコミュニケーションの初心者が多いよ。
回答者の中にもね。
390デフォルトの名無しさん:05/03/14 18:01:28
enum Hoge { HOGE_1 };
void WINAPI foo(Hoge);

というのがあった場合、Hogeのサイズは言語的にどう決まるのでしょうか?
というのは、fooはDLLからエクスポートする関数なのですが
EXE側の製作環境によってHogeのサイズが変わると困るのです。
また、列挙子が増えた場合にサイズが変わっても困ります。

DirectXでは
***_FORCE_DWORD = 0x7fffffff
という使わない列挙子を作って強制的に4byteにしてるようですが
これで4byteになるという保障は言語的にあるのでしょうか?
391390:05/03/14 18:02:56
言い忘れましたが、Win32環境での話です。
392デフォルトの名無しさん:05/03/14 18:38:43
boost::program_optionsて殆ど使われていないのですか?
393デフォルトの名無しさん:05/03/14 19:58:52
>>390
C++Builderだとコンパイルオプションで「enumをint型として扱う」ってのがあるんだがな
他のコンパイラだとどうだろう
394デフォルトの名無しさん:05/03/14 20:11:51
初心者だからというよりは質問者の”質”で流れに天と地の差があるな。

>>365
>>368
>>370
--------
>>378
>>379
>>380
>>382
>>383
>>384
395379:05/03/14 22:32:49
>>380
身に沁みます。
396デフォルトの名無しさん:05/03/14 23:01:09
>>390
Windows上のコンパイラは関数呼び出しのとき、みんな4バイト単位で引数を渡している。
つまりchar(1Byte)もshort(2Byte)もint型(4Byte)の引数と全く同じように渡される。
だからあまり気にする必要もないと思う。
397デフォルトの名無しさん:05/03/14 23:10:24
extern void WINAPI foo(DWORD Hoge);
398デフォルトの名無しさん:05/03/15 00:02:17
>>394
質問者の質ってか、質問者が最初から必要な情報を提示してるかどうかだな。
情報を小出しにされると話がグダグダするし頓珍漢な回答者も出てくるし
煽りも入るしで良いこと無い。
399デフォルトの名無しさん:05/03/15 00:03:08
>>390
enumを宣言した時点で無条件にsizeof(Hoge)==sizeof(int)ということはないみたい。

ISO/IEC 14882:1998 7.2 Enumeration declarations
-5
The underlying type of an enumeration is an integral type that can represent all
the enumerator values defined in the enumeration. It is implementation-defined which
integral type is used as the underlying type for an enumeration except that the
underlying type shall not be larger than int unless the value of an enumerator cannot
fit in an int or unsigned int. If the enumerator-list is empty, the underlying type
is as if the enumeration had a single enumerator with value 0. The value of sizeof()
applied to an enumeration type, an object of enumeration type, or an enumerator, is
the value of sizeof() applied to the underlying type.
-6
For an enumeration where emin is the smallest enumerator and emax is the largest, the
values of the enumeration are the values of the underlying type in the range bmin to
bmax, where bmin and bmax are, respectively, the smallest and largest values of the
smallest bitfield that can store emin and emax. It is possible to define an
enumeration that has values not defined by any of its enumerators.
400デフォルトの名無しさん:05/03/15 00:06:04
だらだら引用してんじゃないよボケ
401デフォルトの名無しさん:05/03/15 00:08:42
飲尿も即刻やめるべき。
402デフォルトの名無しさん:05/03/15 00:17:49
>>401
クソつまんね(゚听)
403デフォルトの名無しさん:05/03/15 00:18:22
女王様でふか?
404デフォルトの名無しさん:05/03/15 00:48:44
>>400
まあ、まとめる能力のない人間だからしょうがないでしょ
許してあげて
405デフォルトの名無しさん:05/03/15 02:00:43
グローバル変数でもローカル変数でもどっちでも良い場合
なるべくローカル変数で宣言した方がいいんですが?
406デフォルトの名無しさん:05/03/15 02:20:36
ケースバイケースだ
407マイク ◆yrBrqfF1Ew :05/03/15 07:09:32
当然。
わざわざグローバルなんて使うのはアホな2chネラくらいなものだ。
408デフォルトの名無しさん:05/03/15 11:39:08
すいません
質問

http://www.asahi-net.or.jp/~yf8k-kbys/newcpp6.html
の一番最後

>のように書くと、コンパイラが警告を出すかもしれません。たとえば、Borland C++ 5.6では、コンストラクタに関して

>「値でクラスを渡す引数を持つ関数はインライン展開されない」

>という警告が出ます。クラス定義内のコンストラクタの定義が

> Neko(string s){
> name = s;
> }

>でも同じです。これは、「このコンストラクタはインラインにできない」という意味です。

これは、どういう意味なのでしょうか?
どうして警告がでるのかわかりません。
409デフォルトの名無しさん:05/03/15 11:49:19
質問です。
class A {
public:
 static int a;
}
と書くのと、
class A {
 static int a;
public:
 int GetA(){ return a; }
}
と書くのは、なるべく下の方法で書いた方がいいんでしょうか?
410409:05/03/15 11:50:41
あ、int GetA(){ return a; } → static int GetA(){ return a; } です
411デフォルトの名無しさん:05/03/15 11:53:56
>>410
そりゃそうだ
あと GetA は inline にしちゃいかん
412デフォルトの名無しさん:05/03/15 11:56:35
>>405
一般的なプログラマが把握できる規模というのは限られており、グローバル変数を使ったほうが良い、
という状況に出会うのはとても難しいのです。
グローバル変数を使うと、プログラムのどこで参照したり書き換えたりしているか(プログラマが忘れて
しまって)把握できなくなり、バグを探すのにプログラム全体を見直さなければならなくなるからです。
また、貧乏性の人が同じグローバル変数を複数の箇所で別の用途に用いた場合にも、上記の理由で
問題が発生することがあります。
プログラムは極力「狭い視野」で見ても大丈夫なように作るべきなのです。
413デフォルトの名無しさん:05/03/15 12:01:20
>>411
なぜinlineにしてはいけないのですか?
414409:05/03/15 12:01:44
>>411
どうしてinlineにしちゃいけないんですか?
415409:05/03/15 12:03:17
>>411
レスありがとうございます。
inlineはだめの理由は、classAの宣言の外で、int a; と書く必要が出てくるからですか?
416デフォルトの名無しさん:05/03/15 12:09:30
メソッド名に大文字を使うと背筋がぞくぞくして気持ち悪くなるのは私だけですか?
417デフォルトの名無しさん:05/03/15 12:11:36
え?あなた全部小文字なんですか?
そっちのほうがゾクゾクしますけど。
418デフォルトの名無しさん:05/03/15 12:12:46
唯一、あなた、あります。
419デフォルトの名無しさん:05/03/15 12:15:10
私名前ジョンソン言います
420デフォルトの名無しさん:05/03/15 12:30:36
>>419
私の正面で見えなくなります。
421デフォルトの名無しさん:05/03/15 12:37:56
>>413-415
前にもこの話題があったけど、面倒くさいんで
C++ FAQ でも読んでくれ
422デフォルトの名無しさん:05/03/15 13:01:19
aimedatportrayingearthandspacesciencesinafunway.
423デフォルトの名無しさん:05/03/15 16:11:10
質問です。
Linux で Cを作っているのですが、よきデバッガありませんか?
gdb使おうかと思ったのですが、man 見てもさっぱりです…

よきデバッガもしくは gdb の基本的な使い方を教えてください。


ちなみにTeraTermで繋がっているので、コマンドライン上で叩けるやつがいいです。
漏れは時代遅れなのかな…
424デフォルトの名無しさん:05/03/15 16:13:36
>>423
man 見てダメ google なり yahoo なりで検索すればいいだろ
425デフォルトの名無しさん:05/03/15 16:25:04
Cを作ってるって処理系つくってんのか。すげーな
426デフォルトの名無しさん:05/03/15 16:27:37
TeraTermってふるいよな。
コンソール処理なんて簡単なんだから、
そろそろXP時代のUIにあったコンソールアプリが出来てもおかしくないんだが。

俺が作ろうかな?
427デフォルトの名無しさん:05/03/15 16:31:53
>>426
是非頑張ってくれ。

まあ普通にコピペとかできるし、必要な機能揃ってるからじゃないのかね>TeraTerm後継が出てこない
428デフォルトの名無しさん:05/03/15 16:39:49
>>425
それは別にすごくないが、Cでプログラミングしているだけだと思われ。
429デフォルトの名無しさん:05/03/15 16:40:24
処理系作るぐらい大学の授業でやる程度のことだよ。
430デフォルトの名無しさん:05/03/15 16:43:12
「処理系を作る」のは大したことはないが、
「C/C++ の処理系を作る」のは大したことだと思う。
431デフォルトの名無しさん:05/03/15 16:50:36
次のMS-VisualStudioを作ってるといわれたら驚くけどね。
432デフォルトの名無しさん:05/03/15 16:59:10
>>424
はぁ?
探したけど見つからないからここに来たんだYO!












だめもとでググったらあっさり出てきた。
前はどんなキーワードで探したんだ、俺…

 ∧||∧
(  ⌒ ヽ  ごめん、ありがとう。これで許して…
 ∪ c ノ
  ∪∪
433デフォルトの名無しさん:05/03/15 17:01:06
>>431
そんな香具師がこのスレで質問していることの方が驚きだYO
434デフォルトの名無しさん:05/03/15 18:05:29
classってグローバル変数使いたいがために作られた概念だろ
オブジェクト指向は建前で。
435デフォルトの名無しさん:05/03/15 18:41:27
>>434
そう思ってるのは低脳なお前だけだよ。
436434:05/03/15 18:43:21
ハァ?俺は天才だっての。
437デフォルトの名無しさん:05/03/15 19:34:20
あっ、マジで低脳だw
438デフォルトの名無しさん:05/03/15 20:11:08
グローバルなclassがいっぱいできて結局しっちゃかめっちゃか
JavaやRubyを見習って欲しい

439デフォルトの名無しさん:05/03/15 20:12:17
JavaはどうでもいからRubyを見習って欲しい
440デフォルトの名無しさん:05/03/15 20:13:11
↓Ruby!!!!!!!!!!!!!!!
441デフォルトの名無しさん:05/03/15 20:23:29
Rubyが最強

この訴えは毎日続けていくつもりです
442デフォルトの名無しさん:05/03/15 20:24:54
JITコンパイラが未だ0.1なのに?
443デフォルトの名無しさん:05/03/15 20:31:31
>>441
Rubyは既にNGワードに入ってますから!残念!!
444デフォルトの名無しさん:05/03/15 20:32:08
Ruby は、まずあの小汚い syntax から変えるべきだな。
ALGOL 調の syntax なんて、ダサくて可読性が悪すぎる。
445デフォルトの名無しさん:05/03/15 20:38:28
ひっそりOCamlと言ってみる…
446デフォルトの名無しさん:05/03/15 20:40:42
OCamlのネイティブはC++より速いし、ソースは簡潔。
C++で5000行だったソースが1500行で書けた。
447デフォルトの名無しさん:05/03/15 20:46:38
作った関数全てにinlineをつけたら速くなると思うのですが、何か悪いこととか起こったりしないでしょうか?
448デフォルトの名無しさん:05/03/15 20:50:05
Rubyを見習って欲しい
449デフォルトの名無しさん:05/03/15 20:50:38
>>447
Effective C++ だったか、More Effective C++ だったか、
C++ Faq だったか、Efficient C++ だったか、Exceptional C++
にのどれかに詳しく書かれてたんで書店で見て見るべし。
簡潔に言うとすこぶる良くないことになってると思われ
450デフォルトの名無しさん:05/03/15 20:51:12
なんかここ1週間くらい?このスレおかしな事になってるね
451デフォルトの名無しさん:05/03/15 20:52:40
春だもの・・・どこのスレも同じだよ
452デフォルトの名無しさん:05/03/15 20:53:17
Rubyを見習って欲しい
453デフォルトの名無しさん:05/03/15 20:59:31
>>438
クラスは大概グローバルですね。
インスタンスがグローバルだとちょっとアレですが。
454デフォルトの名無しさん:05/03/15 21:00:46
おまえのかーちゃんの作ったのプログラムバグだらけー
455447:05/03/15 21:21:22
>>449
ありがとうございました。
456デフォルトの名無しさん:05/03/16 01:22:33
>>421
前に同じ話題が出たときは、
規格の意図と「C++ FAQ」(本)の解釈にズレがあるのだろう
という説で終わっていますよ。

@Ver.12
http://pc5.2ch.net/test/read.cgi/tech/1101100031/400-401
457デフォルトの名無しさん:05/03/16 01:47:00
char* const foo();
てな感じでconstを付けた場合の動作を教えていただけませんか。
何故かconst char* foo();の場合と似たような動きになってる気がするんですが。
458デフォルトの名無しさん:05/03/16 01:50:09
char const * a;
char * const a;
const char a:
459デフォルトの名無しさん:05/03/16 02:03:16
>>458
?
自分も最初は普通の変数の場合と同じかと思ったんですが
どうも違うような気がするのですが。。

const char* foo(); の場合は普通の変数と同じなのですが、
char* const foo() ;の場合に
char *bar = foo(); とconst無し変数に代入すると、
このbarはconst char* bar;のような変数と同様の動きをしているような。。
460デフォルトの名無しさん:05/03/16 02:17:04
>>459
「ような気がする」でこっちに何か伝わってくるとでも思ってるのか?
期待した結果と実際の結果を書いてもらわなきゃわからん。
461デフォルトの名無しさん:05/03/16 02:46:59
>>458
の違いがわかれば、プロのプログラマだな
462デフォルトの名無しさん:05/03/16 03:01:17
変数の場合:
const char* hoge1;
char const *hoge2;
char* const hoge3;

hoge1とhoge2は同じ。constなcharへの非constポインタ。
hoge3は非constなcharへのconstなポインタ。

関数の場合:
const char* foo1();
char const *foo2();
char* const foo3();

foo1, foo2はともにconstなcharへのポインタを返す。
foo3はconst修飾が意味をなさない。返すのは非constなcharへのポインタ。
463デフォルトの名無しさん:05/03/16 03:08:35
>>462
> foo3はconst修飾が意味をなさない。

そんな事は無い。
っていうか変数の型でも関数の戻り値型でも const の効果は同じ。
464デフォルトの名無しさん:05/03/16 03:14:48
>>463
んじゃ、foo3のconstは何を修飾してるの?
465デフォルトの名無しさん:05/03/16 03:15:38
>>463
・・、あー違うでしょ、それ。
char* const 変数戻り値を char*変数に代入した時点で、
const の存在意義が消滅してるのは事実。
コンパイルエラーではない。

もし、const属性を維持したいのなら、
char* const ret = foo3(); 
として戻り値を受ける変数にconst属性を与える必要がある。
466デフォルトの名無しさん:05/03/16 03:22:59
const int Hoge();
という関数に意味があるかってのと同じことだな。
一時変数に過ぎない戻り値をconstにするのは無意味っちゃあ無意味。
467デフォルトの名無しさん:05/03/16 07:44:13
多次元forループでのことなんですが、C言語ってcontinue ラベル;が使えないのですか?
現在はcontinueしたいforステートメントの最後にnext: NULL;として、
goto next;で飛ばすという変な形になっています。

IDEはVC++6.0です。
468デフォルトの名無しさん:05/03/16 09:18:07
>>467
設計が悪い。
469463:05/03/16 10:28:23
>>464-465
↓のソースは char*& を foo3() の戻り値で初期化しようとしてエラーになる。

char* foo3() { return 0; }

template<typename T> T& ref(T& r) { return r; }

int main()
{
 ref(foo3());
 return 0;
}

このソースで char* foo3() を char* const foo3() にすると、エラーは出なくなる。
この const は確かに foo3() の戻り値を修辞しているのであって、「意味をなさない」とは言い切れない。

char* とかの組み込み型だと、違いの現れる状況が想定しにくいけど、
これが std::string だったりすると foo3().append("xxx") が通るか通らないかの違いにもなる。
470デフォルトの名無しさん:05/03/16 11:15:38
私って

if( エラー発生)
{
  //エラー処理
  ・・・
  goto END;
}
・・・
for(i=0;i<n;i++)
{
  if( エラー発生)
  {
    //エラー処理
    ・・・
    goto END;
  }
}
・・・
END:
//共通終了処理
・・・
return;

とか良くやるんですけど、これってDQNなのですか?
私としては単純でわかりやすいと思っていたのですが。。。
471470:05/03/16 11:17:36
>>470
つまり、goto文の使用法のことです。
それ以前に、使用是非ってこともあるんですけど。。。
472デフォルトの名無しさん:05/03/16 11:31:03
>>470
C++なら例外を使おう。でなければこれではだめかい?
void ending(){/*共通終了処理...*/}
void error(){
    /*エラー処理...*/
    return ending();
}
void func(){
    if(/*エラー発生*/) return error();
    // ...
    for(i=0;i<n;i++)
        if(/*エラー発生*/) return error();
    // ...
    return ending();
}
473デフォルトの名無しさん:05/03/16 11:33:15
>>470
ふたつの「エラー処理」に共通部分があるのなら、DQNと言われてもしょうがない。

ここで goto 使うメリットは共通エラー(終了)処理をまとめられることだから、
やるんなら徹底的にやらないと、 goto 自体を嫌う人に対して説得力が無い。

もし C++ 使ってるんなら、デストラクタ使って RAII に従えばこんな心配も無い。
474デフォルトの名無しさん:05/03/16 12:05:59
デストラクタは万能じゃ無いがな
475247:05/03/16 12:13:35
>>472

実際には、ローカル変数があるからな。

関数分けして、いちいちローカル変数渡すより、
goto使った方がシンプルだ。
476デフォルトの名無しさん:05/03/16 12:46:28
>>475
説得力が薄い。
477デフォルトの名無しさん:05/03/16 12:51:09
>>449
質問者と別者だけど、その解教えてほすぃ


せめて、どの本に書かれてあったか絞ってちょーらい(ノд`)
478デフォルトの名無しさん:05/03/16 14:57:14
C言語にはcontinue ラベルはあるの?ないの?
479デフォルトの名無しさん:05/03/16 15:02:51
int i,x,y;
for (i=0; i<max; i++) {
for (x=0: x<width; x++) {
for (y=0: y<height; y++) {
if (list[i][x][y]!=hoge) goto next;
}
}
next:;
}

こういうのが設計が汚いとは思わんけど
480デフォルトの名無しさん:05/03/16 15:12:59
>>479
汚いと思う。

多重ループにおける goto の使用は、とっくに議論され尽くしてる。
そういうのは最高に頭の悪い発言をするスレとかでやってくれ。
481デフォルトの名無しさん:05/03/16 15:14:12
gotoアレルギーな奴にとってどんなのが綺麗なんだ?
482デフォルトの名無しさん:05/03/16 15:14:27
原理主義かw
483デフォルトの名無しさん:05/03/16 15:15:02
>>476
ローカル変数はどう扱うのですか?
484デフォルトの名無しさん:05/03/16 15:24:49
>>480
古典だけどくぬーすの本読んだことある?
485デフォルトの名無しさん:05/03/16 15:26:28
ラベル付きステートメントが使えるのはJavaとかJavaScriptとかか
486デフォルトの名無しさん:05/03/16 15:27:44
こういう人って例外とか嫌いなんだろうな・・・
487デフォルトの名無しさん:05/03/16 15:30:57
>>484
今さら Knuth はねーだろ…。

>>486
goto と例外は違うよ。
488デフォルトの名無しさん:05/03/16 15:32:42
Javaがgotoを廃した変わりに
loop1: for(..
というのをcontinueやbreakで使えるのは

>>479が汚くないという証拠だろ
489デフォルトの名無しさん:05/03/16 15:33:47
>>473
ふたつの「エラー処理」に共通部分があっても、
共通終了処理の手前でやる必要があれば別にいい。
冗長になるなら、それ様の関数一個作って一行で済ませばいいんだし。
極端にコーディング効率を気にしすぎると、
ソースいじってるだけで時間が過ぎてっちゃうよ。
490デフォルトの名無しさん:05/03/16 15:34:51
>>488
「Java にあるから汚なくない」んだ?ふーん(´σД`)
491デフォルトの名無しさん:05/03/16 15:35:43
大工ストラの弊害
492デフォルトの名無しさん:05/03/16 15:36:13
例外使うと、カッコや行数が増えてあまり好きじゃない。
493デフォルトの名無しさん:05/03/16 15:36:27
>>490
そうだよ。何言ってるの?池沼?
494デフォルトの名無しさん:05/03/16 15:37:14
要はスパゲッティミートソースにならなければいいんでしょ?
gotoも捨てたもんじゃないよ。
495デフォルトの名無しさん:05/03/16 15:38:23
>>493
m9(^Д^)プギャー
496デフォルトの名無しさん:05/03/16 15:38:58
アレルギストの惨敗だなw
497デフォルトの名無しさん:05/03/16 15:39:31
gotoで飛べるのはローカルスコープ内だけでしょ?
他の関数に飛んでったりしないんだから、
使い方私大では例外よりシンプルにわかりやすくできる。
とても限った使い方に限定すればだけどね。
498デフォルトの名無しさん:05/03/16 15:40:00
try catchがない頃はエラーコード設定してgoto使いまくりだったよ
499デフォルトの名無しさん:05/03/16 15:40:45
>>498
ソースコード、きれいにかけます?
500デフォルトの名無しさん:05/03/16 15:42:17
gotoも例外も、結局書き方が違うだけで、
同じこと実現する意味では同じなんだよな。
実はアセンブラコードレベルでは似通ってたりして?
501デフォルトの名無しさん:05/03/16 15:42:33
矛盾してんだよなぁ。
スパゲッティコードだからgotoが必要だと主張するかと思えば、
スパゲッティコードはよくないから直すと今度はgotoの存在価値も低下する。

goto文とスパゲッティコードがセットになってることが多いので、
憎悪の対象がgoto文になってしまうことが多いけど、
実際には悪いのはスパゲッティコードであって、決してgotoではない。
不当に犯人扱いされるgoto文。
しかし、goto文は、犯人を擁護・育成するかような立場にある。
502デフォルトの名無しさん:05/03/16 15:42:46
>>499
エラーで関数の終了なので綺麗だよ
503デフォルトの名無しさん:05/03/16 15:43:19
なんだ。gotoって使ってる人、意外と多いのね。
安心した。これからもどんどん使おうっと。
504デフォルトの名無しさん:05/03/16 15:43:37
exception Hage;;
try
raise Hage
with
Hage -> print_string "sine";;
505デフォルトの名無しさん:05/03/16 15:44:21
>>500
チト違う、例外はcatchされるまでどこまでも飛んでいく
506デフォルトの名無しさん:05/03/16 15:44:48
OCamlは例外が使いやすい。関数型言語なのでgotoは意味をなさない。
507デフォルトの名無しさん:05/03/16 15:45:18
catch1:
goto finally;
catch2:
finally:

今とあまり変わらない?
508デフォルトの名無しさん:05/03/16 15:45:31
あまり冗長な関数をかかないのであれば、gotoも見通しが良くてイイ!!
goto使ってキタネーとか感じるのは、
そもそもコーディングからやり直しなさいってことでしょ?
もっときちんとわかりやすく簡潔にモジュール分割しなさいと。
509デフォルトの名無しさん:05/03/16 15:46:44
goto論議はいつの時代も花形だねぇ〜。
510デフォルトの名無しさん:05/03/16 15:46:47
例外処理と goto 同じ扱いにすんなよ…。まぁ初心者スレだしな。

>>501
矛盾してないよ。
スパゲティコードであるということと、goto を使ってるということは別問題。
511デフォルトの名無しさん:05/03/16 15:47:27
みなさん、代入型言語を使うとバグが増えます。特にgotoは追跡が難しくなりがちです。関数型言語を使いましょう。
512デフォルトの名無しさん:05/03/16 15:48:21
>>508
「goto を使わなければいけない」という時点で、すでに冗長な関数。
「goto を使っても尚汚ない」なんてのは論外。
513デフォルトの名無しさん:05/03/16 15:48:32
C言語に例外なんてないだろ?
514デフォルトの名無しさん:05/03/16 15:48:51
goto分は必ず下に飛ぶ、って決めるだけでもぜんぜん違うよ。
515デフォルトの名無しさん:05/03/16 15:50:23
>>513
初心者さんですか?ありますよ。
516デフォルトの名無しさん:05/03/16 15:50:34
C#はswitchのフォールスルーを禁止したくせにbreakしないと切れる。
そしてcaseラベルにgotoできる。 わけわからん。
517デフォルトの名無しさん:05/03/16 15:51:15
例外処理に比べてgoto分は理解するのに10分の一の時間で済むw
518デフォルトの名無しさん:05/03/16 15:51:23
>>514
そういうルールを設けないといけない時点で、何か間違ってると思わない?
519デフォルトの名無しさん:05/03/16 15:52:34
goto絶対否定派の人っているの?
そういう人の意見って聞きたいな。
520デフォルトの名無しさん:05/03/16 15:53:21
>>518
という人がコーディングルールには人一倍うるさいんだよね。
521デフォルトの名無しさん:05/03/16 15:53:59
>>515
try-catchが?
522デフォルトの名無しさん:05/03/16 15:54:47
  GOTO 5

  DO 10 I=1,10
5  HOGE = HOGE * I
   ・・・
10 CONTINUE

見たいな事は良くない
523デフォルトの名無しさん:05/03/16 15:54:50
お前らgotoは使わない、でいいじゃないか。初心者同士で下等でくだらん議論なんかしてんなよ。
お前らよりもはるかに賢い人達が考えたことに従っていればいいんだ。
524デフォルトの名無しさん:05/03/16 15:54:56
>>518
ルールなんだから間違ってないでしょ。
あなたは、何のルールも持たないでプログラム組んでます?
作る人の中できちんと守るからこそルールって言うんです。
525デフォルトの名無しさん:05/03/16 15:55:31
gotoのスパゲティを回避するために
例外とかラベル付きステートメントがあるんだろ
それらが無い言語仕様で同様の処理するなってアホだろ
526デフォルトの名無しさん:05/03/16 15:56:20
まあ、簡単なルール守れば、それによるご利益が大きければ、
ルールもいいんじゃない?
デメリットばかり叩いてちゃ、この世に使える言語なんてひとつも無い。
527デフォルトの名無しさん:05/03/16 15:56:33
意外とgoto使ってる人多いんだね。
俺、未だに使ったことないけど。
528デフォルトの名無しさん:05/03/16 15:56:34
アレルギストの求める説得力をアレルギストが持ってないんだから話にならない
529デフォルトの名無しさん:05/03/16 15:57:20
例外使っても、いくらでも汚いプログラムはかけますから。
要は書く人の問題。
530デフォルトの名無しさん:05/03/16 15:58:06
>>529
少なくともgotoの嵐よりはましになる傾向がある。
531デフォルトの名無しさん:05/03/16 15:58:29
>>525
だからgoto使えば必ずスパゲッティにならないんだって。
そう思うのは、あなたの技量がその程度だからそう感じるだけ。
532デフォルトの名無しさん:05/03/16 15:59:07
>>531
個人の技量の話じゃないんだよ。
533デフォルトの名無しさん:05/03/16 15:59:47
>>531
文盲?
534デフォルトの名無しさん:05/03/16 16:00:23
>>533
お前も本質とはまったく関係の無いつまらんレス付けるな。
535デフォルトの名無しさん:05/03/16 16:01:12
>>530
それも人による、スキルによる。
力ない人はすぐに言語のせいにする。
536デフォルトの名無しさん:05/03/16 16:01:33
>>534
日本語理解しろって。
例外やラベル付きステートメントは
用途が特定されたgotoの置き換えだろ。
537デフォルトの名無しさん:05/03/16 16:02:22
スパゲッチにならなければgotoを使ってもよい
538デフォルトの名無しさん:05/03/16 16:02:41
>>535
経験的な傾向だよ。それに言語機能が成果に影響するのは自明だろう。
539デフォルトの名無しさん:05/03/16 16:02:52
例外支持の人、もっと説得力のあるレスを!!
540デフォルトの名無しさん:05/03/16 16:03:47
>>539
例外不思議な奴はいないだろ
例外処理できない言語で等価の処理をするなって奴がいるだけ
541デフォルトの名無しさん:05/03/16 16:04:06
>>535
池沼?
あと sage ろよ、馬鹿。
542デフォルトの名無しさん:05/03/16 16:04:10
例外不思議ってなんだ。例外不支持だ・・・orz
543デフォルトの名無しさん:05/03/16 16:04:47
goto支持も説得力にかけると思うが。
そもそも初心者同士で不毛で下等な議論は無意味。
おとなしくgoto使わないようにしとけ。偉い人はそういうだろ。
544デフォルトの名無しさん:05/03/16 16:04:56
goto使って簡潔に書ければ、これほどいいものは無いのに、
なぜにそんなに例外に固執する?
別に例外が悪いと言ってるわけではないのだが、
こういう議論になると、ごく一部の例外支持派が、
徹底してgotoを叩くのはなぜ?
545デフォルトの名無しさん:05/03/16 16:05:17
>>543
もう釣りはいいよ。
546デフォルトの名無しさん:05/03/16 16:05:48
>>539
俺はむしろgoto支持の人にもっと説得力のある例を示してほしい。
毎回この手のframeになる度に聞くんだけど、
「あぁ、こりゃGOTO使った方がイイですね」って例を見た事がない。
もちろん、try-catchのないC言語でもね。
547デフォルトの名無しさん:05/03/16 16:06:04
>>543
今のフジテレビみたいだ。
若い者は黙ってろ、みたいなw
548デフォルトの名無しさん:05/03/16 16:06:33
だから一人のアレルギストに釣られるなってw
549デフォルトの名無しさん:05/03/16 16:06:45
例外処理はコストが大きいので速度が大事な場合はgotoだな。
ユーザーインターフェースなら例外だな
550デフォルトの名無しさん:05/03/16 16:06:46
俺は完結に書ければ、gotoを使っても良いと思ってるが、
gotoを使った完結なコードというものを見た事がない。
551デフォルトの名無しさん:05/03/16 16:07:36
>>546
gotoで十分ならgotoを使う。
無理に例外使わないってだけ。
552デフォルトの名無しさん:05/03/16 16:08:26
>>550
そりゃあんたが欠けないだけでIWUH('X$YJ'$#&#S)I"$#&J()#
553デフォルトの名無しさん:05/03/16 16:09:09
>>544
gotoは自由にいろいろな処理に飛ぶことができるが、半面、追跡が難しくなる。
例を挙げるが、googleなどで希望のWEBページを検索するとき、一般的な一つの単語だけで検索にかけると
数万ページという膨大なページがヒットしてしまい、そこから希望のページを探すのは極めて困難になる。
そこで、我々は複数の単語などを検索にかけることで前以上の制約を与え、絞りこむことをする。
時には制約を与えて自由を奪うことも大切なんだよ。
554546:05/03/16 16:09:53
>>551
俺は別に例外に拘ってるわけじゃないんだけど、
別関数にしたり、データ構造を練れば(というか、まともに作ってれば)gotoを使う必要がないと思う。
無理にgotoを使わないってだけ。使う必要性が感じられない。
555デフォルトの名無しさん:05/03/16 16:11:01
>>552
>>550
> gotoを使った完結なコードというものを見た事がない。
日本語読めよ。
556デフォルトの名無しさん:05/03/16 16:11:21
>>553
飛ばなきゃイイだけの話。
無理やり悪いところだけ拾い出して叩くのはどうかな。
それにgotoで飛ぶ場所ってどこでもいけると思ってる時点でダメダメさんです。
関数は一画面内に納まるくらいで書くようにしたほうがいいですよ。
557デフォルトの名無しさん:05/03/16 16:11:39
用法用量を正しくお使いください。
正しく使えないガッコのセンセあたりは原理主義的に否定しまくります。
SEやゲームプログラマはそんなこというとハァ?と言ってくれます。
558デフォルトの名無しさん:05/03/16 16:11:44
なんか良く分かりませんが、ここにURL置いときますね…

http://fw8.bookpark.ne.jp/cm/ipsj/search_test.asp?flag=6&keyword=IPSJ-JNL4503013&mode=PRT
559デフォルトの名無しさん:05/03/16 16:13:02
>>558
小遣い稼ぎのにおいがするからいかない。
560デフォルトの名無しさん:05/03/16 16:13:36
>>557
> ゲームプログラマ
m9(^Д^)プギャー
561デフォルトの名無しさん:05/03/16 16:14:07
ごるぁ、CPUからjamp命令なくせよ。とか言いそう
562デフォルトの名無しさん:05/03/16 16:14:11
ここでgoto使うとスパゲッティ?になるって主張している人は、
一関数に何行使ってるんだ?と聞いてみたい。
例えば40〜50行程度の関数にgoto分を使ってスパゲッティにするのって、
意図して書くほうがずっと疲れると思うのだが。
563デフォルトの名無しさん:05/03/16 16:16:01
>>560
そいつら以上にコード突き詰めるサラリーマンプログラマがいたら教えて欲しい
564デフォルトの名無しさん:05/03/16 16:16:23
みんな構造化プログラミングに染まりすぎ、こだわりすぎ、とらわれすぎ。
それなりのプロなんだから、goto使っても
わかりやすくかける人たちばかりでしょ?ここの中の人は。
565デフォルトの名無しさん:05/03/16 16:16:44
566デフォルトの名無しさん:05/03/16 16:18:32
>>562
関数は基本的に2〜3行。
OCamlのような関数型言語なら本質的にgotoを必要としない。
しかも代入文や副作用が少ないのでC/C++と比べて、コンパイルに成功すれば極めてバグが少ないプログラムになる。
ちなみに関数型言語なら関数をかなり細かく分割しても最適化されて、関数のオーバヘッドはほとんどない。
567デフォルトの名無しさん:05/03/16 16:18:48
>>562
多分例外支持の人はスパゲッティがかけるんでしょう。
それを自慢したら先輩や上司に大目玉食らって、
それ以来、goto大嫌い人間になったのかと。。。
568デフォルトの名無しさん:05/03/16 16:19:06
>>563
コードを突き詰めるのと読みやすいコードを書くのは違うスキル.

>>564
gotoを使っても書ける局面とgotoを使うべき局面は違う.
俺が知りたいのはgotoを使うべき局面. そんな局面, あったら教えて欲しい.
569デフォルトの名無しさん:05/03/16 16:19:11
>>564
プロだって?
どうせ業務アプリ作成しているような素人だろ。
570デフォルトの名無しさん:05/03/16 16:19:58
>>568
もう出てるだろうに、文盲か?
571デフォルトの名無しさん:05/03/16 16:20:22
>関数は基本的に2〜3行。

???関数名とreturn文で終わり???
572デフォルトの名無しさん:05/03/16 16:20:47
>>567
> 1. 事実に対して仮定を持ち出す
573デフォルトの名無しさん:05/03/16 16:20:53
>>571 俺も思ったw
574デフォルトの名無しさん:05/03/16 16:21:33
>>571
がんばれば一行でかけるけど、汚いので。
575デフォルトの名無しさん:05/03/16 16:21:34
>>570
提示された例はgotoの必然性を語るには説得力にかけるよ.
576デフォルトの名無しさん:05/03/16 16:21:35
>>563くどいねー。gotoで済むならgotoでいい。ただそれだけ。
577デフォルトの名無しさん:05/03/16 16:22:11
関数型言語って使ったことないが
xyzzyってLispスクリプトだっけかが使えるよな
578デフォルトの名無しさん:05/03/16 16:22:49
>がんばれば一行でかけるけど、汚いので。

ワラタ
コンパイラが悲鳴あげそうだw
579デフォルトの名無しさん:05/03/16 16:23:04
>>575
お前の理解力不足を説得力不足に置き換えるなって
580デフォルトの名無しさん:05/03/16 16:23:16
>>576
逆。gotoを使わないで済むなら使わない。
581デフォルトの名無しさん:05/03/16 16:23:45
>>578
お前らだってmainに再帰かけてどこまで出来るかで遊んだだろ?
582デフォルトの名無しさん:05/03/16 16:23:57
>>575
簡単に処理できるのにそんなに必然性が重要とは思えん。
583デフォルトの名無しさん:05/03/16 16:24:43
>>574
ここのスレ住人に関数型言語布教するのはムダ
584デフォルトの名無しさん:05/03/16 16:25:01
必然性に悩み仕事がぜんぜん前にすすみません。。。
585デフォルトの名無しさん:05/03/16 16:25:10
>>581
Cで再帰なんてとんでもない!
586デフォルトの名無しさん:05/03/16 16:25:39
所詮、バイナリーコードに落ちるんだから、
どっちだっていいだろ。
587デフォルトの名無しさん:05/03/16 16:26:01
>>579
お前の説明力不足を理解力不足に置き換えるなって.

>>582
そもそもgotoを使って処理する必要がないのに, gotoが必要だとは思えん.

>>586
m9(^Д^)プギャー
588デフォルトの名無しさん:05/03/16 16:26:49
そうだ、食えば一緒理論。
589デフォルトの名無しさん:05/03/16 16:27:17
別にgoto使って悪いってわけで無いのに、
一部gotoを食わず嫌いな人がいるみたい。
使ったら楽チンだよ。使ってみなよ。
590デフォルトの名無しさん:05/03/16 16:27:52
>>587
例外やラベル付きステートメントの無いC言語ではどのように書けばよいのですか?
教えてください。
591デフォルトの名無しさん:05/03/16 16:28:21
>>587
gotoを例外に置き換えても、そのまま成り立つねw
592デフォルトの名無しさん:05/03/16 16:28:34
>>590 だからgoto使ったコード持ってきてみろよ。goto使う必要がないコードばっかりだから。
593デフォルトの名無しさん:05/03/16 16:28:51
>>583
ほんのちょっぴり興味もった。
xyzzy使う機会があったら勉強してみる。
594デフォルトの名無しさん:05/03/16 16:29:26
>>581
スタックサイズのパラメータを1Gバイトぐらいにしないとなw
595デフォルトの名無しさん:05/03/16 16:29:44
>>592
とりあえず>>479をgotoなしに置き換えて。
596デフォルトの名無しさん:05/03/16 16:30:21
>>592
gotoを例外に置き換えても、そのまま成り立つねw
597デフォルトの名無しさん:05/03/16 16:31:22
forループが3重くらいになったらgotoで脱出したいけど
598デフォルトの名無しさん:05/03/16 16:32:01
>>592
gotoを例外に置き換えられるから、ってだけじゃ、
それこそ説得力無いと思うが。
599デフォルトの名無しさん:05/03/16 16:32:30
>>597
例外で脱出
600デフォルトの名無しさん:05/03/16 16:32:39
>>592は例外信者だから何言っても無駄でしょ。
601デフォルトの名無しさん:05/03/16 16:33:57
無理にgoto使うことも無いよね。
無理に例外使うことも無いよね。

両方とも同レベル。
602デフォルトの名無しさん:05/03/16 16:34:14
>>598
どこに飛ぶか知るのにルーチン全体を見直さないといけない。
これって面倒だよね?(エディタの検索で一発か…)
603デフォルトの名無しさん:05/03/16 16:35:00
goto => 例外って言ってる goto 信者は馬鹿?
604デフォルトの名無しさん:05/03/16 16:35:09
>>601
だから私はgoto使います。以上!!
605デフォルトの名無しさん:05/03/16 16:35:35
>>604
非国民!!!!
606デフォルトの名無しさん:05/03/16 16:35:46
>>602
関数の中でしか飛べないんだけど
607デフォルトの名無しさん:05/03/16 16:36:30
>>606
関数の中身はルーチンです。
608デフォルトの名無しさん:05/03/16 16:36:36
>>602
あなたも一関数を何百行にも渡って書いちゃう人ですね。
一関数で何度もスクロールしないと見渡せない関数は
書かないほうがいいですよ。
609デフォルトの名無しさん:05/03/16 16:38:31
結局、例外支持してる人って、main関数だけでプログラム組んでる、
って構図が鮮明になってきたわけで。
これじゃあgoto使うの、俺だってやだよw
610デフォルトの名無しさん:05/03/16 16:38:40
goto文が一つだけ含まれるだけなら簡単だけど、2つ以上になって複雑になると行数が少なくてもだめ。
611デフォルトの名無しさん:05/03/16 16:39:37
>>610
まさかループ制御もgoto使ってると信じてるの?
612デフォルトの名無しさん:05/03/16 16:40:23
>>609
妄想狂?
613デフォルトの名無しさん:05/03/16 16:41:37
goto叩いてる人って、最悪の場合しか考えてないんだよね。
でも、gotoを実際に使ってる人は、実に上手に使ってる。
別に必然性とかそんな隔たった話じゃなくてね。
例外使ったっていいけど、それがgotoはダメという理由にはなりえないよ。
614デフォルトの名無しさん:05/03/16 16:42:58
>>613
大学を出たてでプログラムがまともに組めない新入社員がどんなプログラムを書くか。
goto禁止にしないととんでもないことになるぞ
615デフォルトの名無しさん:05/03/16 16:43:20
>>612
少なくてもCのgoto使って必ずスパゲッティになるって言ってる人は、
それに近いよ。どうなったらスパゲッティになるのか不思議で仕方がない。
616デフォルトの名無しさん:05/03/16 16:43:37
ここ見てわかったこと、
gotoを否定しない派−−−例外もバランス良く使っている
gotoを否定する派 −−−無駄に例外使ってわかりにくくしてる
617デフォルトの名無しさん:05/03/16 16:44:07
>>479 って
for (int i = 0 ; i < max ; ++i) {
if (! contains_hoge_only(list[i])) {
continue;
}

// ...
}

でイイんじゃないの?俺ならそうする。goto 使う必要性が感じられないが。
618デフォルトの名無しさん:05/03/16 16:45:04
>>614
孫なのは論外だろ。あ、ここ初心者スレかw
でも、gotoを有効に使う方法は、教えるのに10分もあれば十分。
大卒ぐらいならそのくらいの頭は持ってるでしょ?
619デフォルトの名無しさん:05/03/16 16:46:01
>>616
自作自演ですか。
620デフォルトの名無しさん:05/03/16 16:46:51
>>617
そりゃgoto使わないようにコーディングしましたっていう練習問題じゃんw
必然性など微塵も感じんぞ。
621デフォルトの名無しさん:05/03/16 16:47:34
>>617
x,yが取得できんがな。
622デフォルトの名無しさん:05/03/16 16:47:53
例外が複雑ってどんな目玉ですか?改造手術必要ですか?
はっきりいいましょう。例外は簡単です。
623デフォルトの名無しさん:05/03/16 16:48:24
>>617
あなたの言う必然性って、自分のコーディングスタイルに
合っているか否かだけの基準のような気がするね。
別にそれはそれでいいけどさ、goto否定の理由にはなりえんな。
624デフォルトの名無しさん:05/03/16 16:48:28
#include <stdio.h>
#include <malloc.h>
main(togo,toog)
int togo;
char *toog[];
{char *ogto,   tgoo[80];FILE  *ogot;  int    oogt=0, ootg,  otog=79,
ottg=1;if (    togo==  ottg)   goto   gogo;  goto    goog;  ggot:
if (   fgets(  tgoo,   otog,   ogot)) goto   gtgo;   goto   gott;
gtot:  exit(); ogtg: ++oogt;   goto   ogoo;  togg:   if (   ootg > 0)
goto   oggt;   goto    ggot;   ogog:  if (  !ogot)   goto   gogo;
goto   ggto;   gtto:   printf( "%d    goto   \'s\n", oogt); goto
gtot;  oggt:   if (   !memcmp( ogto, "goto", 4))     goto   otgg;
goto   gooo;   gogo:   exit(   ottg); tggo:  ootg=   strlen(tgoo);
goto   tgog;   oogo: --ootg;   goto   togg;  gooo: ++ogto;  goto
oogo;  gott:   fclose( ogot);  goto   gtto;  otgg:   ogto=  ogto +3;
goto   ogtg;   tgog:   ootg-=4;goto   togg;  gtgo:   ogto=  tgoo;
goto   tggo;   ogoo:   ootg-=3;goto   gooo;  goog:   ogot=  fopen(
toog[  ottg],  "r");   goto    ogog;  ggto:  ogto=   tgoo;  goto
ggot;}
625デフォルトの名無しさん:05/03/16 16:49:00
>>622
俺の例外は簡単だと思う。
ブロックでひとつネストが深くなるのがむかつくけどね。
626デフォルトの名無しさん:05/03/16 16:49:05
continueだって十分思考を中断させる威力もってるぞ
括弧を探すのめんどい
627デフォルトの名無しさん:05/03/16 16:49:27
>>620
gotoを使う必然性もないよね?

>>621
じゃー、
for (int i = 0 ; i < max ; ++i) {
int x, y;

if (! contains_hoge_only(list[i], &x, &y)) {
continue;
}

// ...
}
…にでもすれば?(´Д`)
628デフォルトの名無しさん:05/03/16 16:49:28
>>622
例外をgotoに置き換えてもそのまま成り立つねw
629デフォルトの名無しさん:05/03/16 16:49:56
この辺の話題は初心者にはちょうどいいレベルかな。
630デフォルトの名無しさん:05/03/16 16:50:26
俺の例外?俺も例外は簡単って言おうとしたのにorz
631デフォルトの名無しさん:05/03/16 16:50:29
>>625
むかつくのかよ。ただ事じゃないよなw
632デフォルトの名無しさん:05/03/16 16:51:20
>>627
参照渡しまくってまでやる価値ないだろ
633デフォルトの名無しさん:05/03/16 16:51:29
>>627
>gotoを使う必然性もないよね?

何言っても例外マンセーじゃ話にならんぞ。
634デフォルトの名無しさん:05/03/16 16:51:40
>>617
それをやると複雑だっていうのは偉い人もいっているぞ。
むしろgoto使った方が簡単だとも。
第3の方法として、例外が挙げられるがtry catchで囲んでしまえば、その範囲だけをみればいいわけだから、簡単だ。
単純なのはgotoだけど、例外は気をつけないといけない範囲が決まっているので楽かもしれない。
635デフォルトの名無しさん:05/03/16 16:52:20
>>627
>gotoを使う必然性もないよね?

だからどっちだっていいじゃん。
そこまでこだわる理由がわからん。
引っ込みが付かなくなっただけだろうけど。
636デフォルトの名無しさん:05/03/16 16:53:44
>>633
いや、俺、例外なんて一言も言ってないんだけど…。

>>634
偉い人のドキュメントへのポインタきぼんぬ。
あとここで例外使っちゃいかんでしょ。

>>635
gotoを使う必要性がない→gotoを使うと可読性が低くなる「可能性が高い」→使わない方が良い
637デフォルトの名無しさん:05/03/16 16:54:18
だから、使い方を限定すれば、例外だってgotoだってどっちでもいいだろ。
goto見ただけでアレルギーおこすのは、おかしいって。
638デフォルトの名無しさん:05/03/16 16:54:23
>>631
あと関係ないけどswitchのcaseラベル。
あれインデントはswitchと揃えたほうが見やすい。
実処理が2段下がってるって悲しいよホント。
走りたくなる。
639デフォルトの名無しさん:05/03/16 16:55:38
>gotoを使う必要性がない→gotoを使うと可読性が低くなる「可能性が高い」→使わない方が良い

ぜんぜん論理になってないんだけど。。。
640デフォルトの名無しさん:05/03/16 16:56:46
これだけ頑張って書いてるのに
内容が例外なく百番煎じなのが哀しいね。
君たちの存在ってそんな程度。
641デフォルトの名無しさん:05/03/16 16:56:56
>>636
>gotoを使う必要性がない→gotoを使うと可読性が低くなる「可能性が高い」→使わない方が良い

使わないほうが良いことがなぜ使うなになるのか?
642デフォルトの名無しさん:05/03/16 16:57:37
gotoを使うと可読性が低くなる「可能性がある」
gotoを使うと可読性が高くなる「可能性がある」

可読性教育しないのが悪いだけだろ。
ハンガリアンまんせーですか?
643デフォルトの名無しさん:05/03/16 16:57:52
>>640
そのままあなたにお返しします。
644デフォルトの名無しさん:05/03/16 16:58:36
まあ、同等の処理ができるのならどっちでもいい。
それだけのこと。
645デフォルトの名無しさん:05/03/16 16:59:09
ハンガリアンは6年前に卒業しました。
646デフォルトの名無しさん:05/03/16 17:00:05
LPなんたらはわかりやすいけどそのごのSZがわけわかめ。
647デフォルトの名無しさん:05/03/16 17:00:12
結局、gotoで済んじゃうからgotoでいいやと、
私の頭の中では結論が出ました。
どうもありがとうございました。
648デフォルトの名無しさん:05/03/16 17:01:11
>>646
String terminated by Zeroだっけ?
649デフォルトの名無しさん:05/03/16 17:02:25
スレに活気がなくなってきたら、この話題いいかもね。
650ヽ(´ー`)ノ ◆.ogCuANUcE :05/03/16 17:02:29
お前らこっち行け(;´Д`)すげースレが伸びててビビったじゃねーか
http://pc5.2ch.net/test/read.cgi/tech/1021364372/
651デフォルトの名無しさん:05/03/16 17:03:29
別にgoto文を恐れなく使っていませんから。
一部、勘違いしてる人がいるだけです。
652デフォルトの名無しさん:05/03/16 17:04:05
>>649
freeの話題もね。
653デフォルトの名無しさん:05/03/16 17:05:06
>>740みたいなシンプルな使い方、どう思います?
これも完全否定します?
654デフォルトの名無しさん:05/03/16 17:05:44
>>740 までつっぱしって行きたいと思います。
655デフォルトの名無しさん:05/03/16 17:05:44
>>648
\0で終わる文字列って意味なんだ。
656デフォルトの名無しさん:05/03/16 17:06:02
>>652
詳しく!!
657デフォルトの名無しさん:05/03/16 17:06:57
>>656
どうせ OS が開放するんだし、別に free しなくてもイイんじゃねーの的な話じゃない?
658デフォルトの名無しさん:05/03/16 17:07:46
>>654
>>470ですた...orz
659デフォルトの名無しさん:05/03/16 17:08:13
>>657
そりゃやばい罠w
660デフォルトの名無しさん:05/03/16 17:09:16
>>657
初心者ってメモリリーク気にしないのかね。こわぁ〜。
661デフォルトの名無しさん:05/03/16 17:09:19
>>643
現実を見ようよ。
662デフォルトの名無しさん:05/03/16 17:09:59
さあ時よ、私のために止まりなさい
663デフォルトの名無しさん:05/03/16 17:10:07
無意味なgotoネタはよそでやってよ
内容ウスいから読むだけ無駄だしさあ
664デフォルトの名無しさん:05/03/16 17:10:17
>>657
MS-DOSとかWin3.xとかならそうもいかないんじゃね?
665デフォルトの名無しさん:05/03/16 17:11:13
>>663
もうfreeの話題に移ってますよ。
666デフォルトの名無しさん:05/03/16 17:11:46
毎朝リセットするからfreeしなくても良いんだよ
667デフォルトの名無しさん:05/03/16 17:12:13
でもfreeってことは確保はmallocだっけ?
今はnew、deleteしか使わんから使い方忘れたw
668デフォルトの名無しさん:05/03/16 17:13:12
deleteの場合は、配列のときdelete [ ]ってやんなきゃなんないから
めんどいけど。
669デフォルトの名無しさん:05/03/16 17:13:55
>>593
たぶんLispで関数型を体験すると、「なんだ、関数型って何にも出来ないじゃないか」
っていうふうになってしまうかもしれないので、OCamlを推奨。
SDL使えるよー 例外使えるよー 困った時は手続きで書くこともできるよー いろんな機能満載!
さぁ、みんなもOCamlを使おう!!!
670デフォルトの名無しさん:05/03/16 17:14:13
deleteだけで済むように仕様変更しないかな?
671デフォルトの名無しさん:05/03/16 17:15:15
>>669
Emacs Lisp を使えばいいよ(´ー`)
672デフォルトの名無しさん:05/03/16 17:15:16
Lispって数式処理でちょっと使ったぐらいだから、
あまり良くわからないや。
673デフォルトの名無しさん:05/03/16 17:16:25
>>653
if (エラー発生) goto exception1;
//処理
for(i=0;i<n;i++) 

  if( エラー発生) goto exception2;
    //処理

//処理

finally:
//処理
return;

exception1:
//処理
goto finally;

exeption2:
//処理
goto finally;

どっちがみやすいかな?
674デフォルトの名無しさん:05/03/16 17:19:28
>>657
freeしたところでメモリコンパクションまでしてはくれないというのはあったはず。
GC付きOSがないのはなんだかなぁとD言語の人が言ってました。
675デフォルトの名無しさん:05/03/16 17:19:29
>>673
同レベル。よって引き分け。
676デフォルトの名無しさん:05/03/16 17:20:53
OSのGCに頼るのは心配で心配で胸が張り裂けそうです。
677デフォルトの名無しさん:05/03/16 17:21:00
例外はスタックをガリガリ巻き戻しながら呼び出し元に伝播していくものでしょ
それが何でgotoと比較されるのかわからん
678デフォルトの名無しさん:05/03/16 17:21:02
>>673
goto使うのでもその程度の使い方だから、
gotoであることのデメリットは感じません。
だからと言って例外がいけないとも思いません。
679デフォルトの名無しさん:05/03/16 17:21:49
>>677
goto 厨が何故か例外に固執するから。
680デフォルトの名無しさん:05/03/16 17:22:23
>>470のコードがスパゲッティには見えない。
逆立ちしても斜めから見ても見えない。
折れの目がどうにかなっちゃったのか?
681デフォルトの名無しさん:05/03/16 17:24:41
共通部分は関数化しましょう。そうすればgoto使わなくても良くなります。
682デフォルトの名無しさん:05/03/16 17:24:48
>>679
どう見てもあんたが固執しすぎだよw
私は例外ノーなんていってないもんね。
gotoだって使い方を考えれば有効でしょ、
とは何度も言ってるけど、そのたびに
必然性が無いとか訳わからんこと言ってくるのは
必ずあなた。
683デフォルトの名無しさん:05/03/16 17:26:10
共通部分は関数化して、gotoうまく使えばネストも少なくなっていいね!!
684デフォルトの名無しさん:05/03/16 17:26:34
>>677
例外の特殊さは戻り値が(Exceptionを含めると)複数あるところだよね
そして例外大前提プログラミングとか変なことが始まってしまう
685デフォルトの名無しさん:05/03/16 17:26:49
>>681
まだ言ってるよwガンガレーww
686681:05/03/16 17:26:52
もうしわけないけど、>>470のコードについての感想ね。
687デフォルトの名無しさん:05/03/16 17:28:14
>>681
使わなくても良くなるだけで、使いたければ使ったっていいんでしょ?
688デフォルトの名無しさん:05/03/16 17:28:31
>>683
PG言語界でむやみにネストを増加させる奴らは巨悪だよな。
689デフォルトの名無しさん:05/03/16 17:28:58
なんか、ひとりに釣られちゃってる感があるw
690デフォルトの名無しさん:05/03/16 17:29:25
>>687
使いたければ使っても別に強制はできないけれど、どちらかというと>>470の場合はgotoは不要だと思う。
691デフォルトの名無しさん:05/03/16 17:30:19
>>690
「どちらかというと」って単なるあなたの主観じゃんw
もう何言ってもダメそうなのがわかってきたよ。
692デフォルトの名無しさん:05/03/16 17:31:09
>>691
もともとスタイルなんていうのはそういうものだが。
693デフォルトの名無しさん:05/03/16 17:31:12
次の話題。
gotoよりfreeより巨悪なのはネスト。

694デフォルトの名無しさん:05/03/16 17:31:13
>使いたければ使っても別に強制はできないけれど、どちらかというと>>470の場合はgotoは不要だと思う。

自分の考えを一般論みたいに言うのはやめて。
初心者が迷惑するから。
695デフォルトの名無しさん:05/03/16 17:32:17
>>694
構造化の観点から言えば関数化する方がいいんじゃないの?
696デフォルトの名無しさん:05/03/16 17:32:46
>>692
つまり、gotoもあり、例外も然り、ってことでお開きにしましょうか。
697デフォルトの名無しさん:05/03/16 17:33:10
>>696
だが経験豊富な俺の方が正しい。
698デフォルトの名無しさん:05/03/16 17:33:52
俺の方がちんぽがでかいので俺が正しい
699デフォルトの名無しさん:05/03/16 17:34:27
そろそろ秋てきたんだけど、帰っていい?
700デフォルトの名無しさん:05/03/16 17:34:53
一名様お帰りで〜す
701デフォルトの名無しさん:05/03/16 17:35:07
>>697
経験何年?
702デフォルトの名無しさん:05/03/16 17:35:38
>>695
ひとつの関数からしか使われない共通サブ関数を用意するのは好き嫌いだろ
703デフォルトの名無しさん:05/03/16 17:35:44
おっと、上司から残業要請だ...orz
暫くロムってる。。。
704デフォルトの名無しさん:05/03/16 17:36:05
>>701
えと、3ヶ月くらいです… 今年大学入学なんです^^
705デフォルトの名無しさん:05/03/16 17:36:34
お前らもしかしてネストが好きなの?(´・ω・`)
706デフォルトの名無しさん:05/03/16 17:36:40
>>702
うわ、きたこれ
707デフォルトの名無しさん:05/03/16 17:36:45
>>704
ネタならよしてくれw
708デフォルトの名無しさん:05/03/16 17:37:34
ネストは4つまで。深いかな?
709673:05/03/16 17:37:44
>>675
ええ・・・鼻差で俺が勝ってない?
710デフォルトの名無しさん:05/03/16 17:37:55
>>707
マジレス。
711デフォルトの名無しさん:05/03/16 17:39:07
>>704
すべてがわかった。もういいよ。これまでのことは許すw
演習が終わったら早く家に帰りなさい。
712デフォルトの名無しさん:05/03/16 17:40:03
>>704
今年ってまだ3月だが1月入学の大学とか?
713デフォルトの名無しさん:05/03/16 17:40:07
>>711
大学は4月からです。みなさん、プログラミング教えてあげてもいいですよ。
714デフォルトの名無しさん:05/03/16 17:41:20
>>709
単に例外習いたてで、とにかく使いたいって時期なんだと思うので却下。
715デフォルトの名無しさん:05/03/16 17:42:09
>>713
そういう典型的なDQN的発言は計算?
おっと、また喜んじゃうか。
716デフォルトの名無しさん:05/03/16 17:43:09
学生成りすまし?
717デフォルトの名無しさん:05/03/16 17:43:45
>>716
別に高校生でもプログラミングぐらいするでしょ。
718デフォルトの名無しさん:05/03/16 17:44:19
すべてが明らかになったところで、終了としたいと思います。
この話題は少なくても向こう6ヶ月は凍結ということでお願いいたします。
719デフォルトの名無しさん:05/03/16 17:44:32
>>714
エラーの無い処理は一画面に収まるし
エラーが発生してもすぐ下に処理が発見できる
Trueルートに専念できる最強最高のコーディングだろ?
そこらへんどうよ?
720デフォルトの名無しさん:05/03/16 17:45:01
わかった。さよならー
721デフォルトの名無しさん:05/03/16 17:45:38
>>718
凍結終わるまで、安心して他スレにいってていいよ
722デフォルトの名無しさん:05/03/16 17:46:04
よーし、今夜もじゃんじゃんgoto文使いまくるぞー。
仕事の効率アップで、来週は一週間休んじゃうぞー。
723713:05/03/16 17:46:25
俺はOCamlスレ行ってきます
724デフォルトの名無しさん:05/03/16 17:49:03
>エラーが発生してもすぐ下に処理が発見できる

gotoなら同じスコープ内に発見できる。

>Trueルートに専念できる最強最高のコーディングだろ?

ひと目で見渡せるコード上じゃ大差ねーな。
725デフォルトの名無しさん:05/03/16 17:49:39
はい終わり〜
726デフォルトの名無しさん:05/03/16 17:50:17
exit(0);
727デフォルトの名無しさん:05/03/16 17:51:35
#quit;;
728デフォルトの名無しさん:05/03/16 17:51:36
>>724
嫉妬か。やはりgoto使い3級の俺は最強だったな。
729デフォルトの名無しさん:05/03/16 17:52:20
>>728
3級なのか最強なのかはっきり汁
730デフォルトの名無しさん:05/03/16 18:01:13
>>728
ただの粘着だったか。
731デフォルトの名無しさん:05/03/16 18:02:41
>>728
他スレに行ってたはずが、相当このスレ気になってるんだなw
今夜はこのスレで徹夜ですか?
732デフォルトの名無しさん:05/03/16 18:03:47
>>728
このくらいの会話になってくると、明らかに学生ってのが良くわかる。
733713:05/03/16 18:05:06
>>723以降は一度も発言していません。
734最強の3級:05/03/16 18:06:04
なんだこの連投 >>730->>733
735713:05/03/16 18:06:13
ちなみに私はgoto禁止スタイルです。
736デフォルトの名無しさん:05/03/16 18:06:52
もう聞いてねーよ
737デフォルトの名無しさん:05/03/16 18:07:09
自作自演が過ぎます!
738デフォルトの名無しさん:05/03/16 18:07:22
>>736
だまれ!この淫乱メスブタ!
739デフォルトの名無しさん:05/03/16 18:08:09
>735
ご勝手に。
740デフォルトの名無しさん:05/03/16 18:08:43
自作自演と騙りが混ざってて、誰が誰なのかまったく分からない(;´Д`)
741デフォルトの名無しさん:05/03/16 18:08:48
あぁー、そういうことだったのか。
確かにな。まったく気づかなかった。
742デフォルトの名無しさん:05/03/16 18:08:49
>>738
うっさい禿げ
743デフォルトの名無しさん:05/03/16 18:08:53
この早さなら言える!!!!!!!!!!!!







744デフォルトの名無しさん:05/03/16 18:09:18
気づけ世w
745デフォルトの名無しさん:05/03/16 18:10:09
例外をマスターした上でのgotoマンセー
746デフォルトの名無しさん:05/03/16 18:10:38
ま・た・か・?
747デフォルトの名無しさん:05/03/16 18:11:09
gotoをマスターした上での例外マンセー
748デフォルトの名無しさん:05/03/16 18:11:43
マタカと書いて勇と読む。
749デフォルトの名無しさん:05/03/16 18:12:20
後藤先生が気分をわるくされました
750デフォルトの名無しさん:05/03/16 18:12:29
お前ら偉い人の言うこ(ry
751デフォルトの名無しさん:05/03/16 18:12:52
>>748
2人目の男の子にはちょうどいい名前。
2人目の女の子の時は、勇子もおすすめ。
752デフォルトの名無しさん:05/03/16 18:13:42
正直gotoは使ったことないのだけれど、
find boost_1_32_0 -name "*.hpp" -print | xargs grep goto
ってすると結構ヒットした。
753デフォルトの名無しさん:05/03/16 18:13:48
>>751
お淑やかな女の子になって欲しいからダメ。
754デフォルトの名無しさん:05/03/16 18:14:01
gotoを毛嫌いすると、とんでもないことになる








かもしれないよ。
755デフォルトの名無しさん:05/03/16 18:14:29
boostのインストール手順を教えて。
756デフォルトの名無しさん:05/03/16 18:14:43
gotoはお前ら初心者にはまだ早い。
757デフォルトの名無しさん:05/03/16 18:14:55
勇子と結婚した俺の立場は...orz
758デフォルトの名無しさん:05/03/16 18:15:19
ベテランの折れにはいい伴侶。
759デフォルトの名無しさん:05/03/16 18:15:37
>>755
ダウンロードして展開して任意のディレクトリに置く。
使うときはインクルードパスを設定するだけ。
760デフォルトの名無しさん:05/03/16 18:15:56
gotoがベストパートナー。
761デフォルトの名無しさん:05/03/16 18:16:35
boostってめちゃ遅いって聞いたことあるけど。
762デフォルトの名無しさん:05/03/16 18:17:38
goto使ってそんなに遅いんじゃ、例外使った日にゃ。
763デフォルトの名無しさん:05/03/16 18:17:43
早いけどでか過ぎるの間違いだろ?
764デフォルトの名無しさん:05/03/16 18:17:59
>>761
コンパイルはね。実効速度は使う機能による。単純なものは、力業でdefineして定義しただけの機能もある。
765デフォルトの名無しさん:05/03/16 18:18:45
gotoって最適化の対象になるの?いろいろ飛び回ったら最適化できなさそうなんだけど。
766デフォルトの名無しさん:05/03/16 18:23:04
っていうか、最適化しようがあるの?
767デフォルトの名無しさん:05/03/16 18:23:46
>いろいろ飛び回ったら

無理やり悪い印象植え付けようとしてますねw
768デフォルトの名無しさん:05/03/16 18:24:06
gotoを使って作った手続きは最適化されるの?
769デフォルトの名無しさん:05/03/16 18:26:16
されうる。
770デフォルトの名無しさん:05/03/16 18:26:34
コンパイラの挙動知らないやつはこれだから困る。
771デフォルトの名無しさん:05/03/16 18:28:48
いかにも知ってるふうにいうやつはもっと困る。
772デフォルトの名無しさん:05/03/16 18:29:56
ちょっとyaccとlex使ったぐらいで、
コンパイラマスターしたと勘違いしてる香具師は、
日本全国ごまんといるから。
773デフォルトの名無しさん:05/03/16 18:30:29
オートマトンも然りw
774デフォルトの名無しさん:05/03/16 18:31:38
何にもやってないやつよりまし
775デフォルトの名無しさん:05/03/16 18:31:38
>>769
賢いコンパイラでないかぎりほとんどされないよね。
それでいてどうしてgotoを使うのか。
確かに型にはまった使い方なら最適化されうる可能性もあるが、それ以外ならどうだろう。
gotoを良く使う人はその辺はどう考えているのかな。
それとも、型にはまった使い方以外はしないというのかな。
776デフォルトの名無しさん:05/03/16 18:33:04
>>775
> 型にはまった使い方以外
それをスパゲティコードというのではないのですか?
777デフォルトの名無しさん:05/03/16 18:34:34
>>776
逆にいうとスパゲッティプログラムを書いてしまう危険性も秘めている訳だよね。
つまり危険と非効率がgotoの本当の姿だ。
778デフォルトの名無しさん:05/03/16 18:35:51
>>777
( ´_ゝ`)フーン
779デフォルトの名無しさん:05/03/16 18:41:58
もう俺にわかりやすけりゃそれでいいよ
780デフォルトの名無しさん:05/03/16 18:43:16
>それをスパゲティコードというのではないのですか?

またまたはちゃめちゃな論理ですねーーー
781デフォルトの名無しさん:05/03/16 18:44:23
>>780
もういいから。うざいお。
782デフォルトの名無しさん:05/03/16 18:44:24
単に話がループして終わらないだけということに
気づいているのにやめないのはなぜ?
783デフォルトの名無しさん:05/03/16 18:44:54
>>782
お前もうざい。
784デフォルトの名無しさん:05/03/16 18:44:57
だって論理的でないんだものさーーー
785デフォルトの名無しさん:05/03/16 18:45:39
>>783
ループ推奨派は2チャンネルの敵ですw
786デフォルトの名無しさん:05/03/16 18:46:15
>>781
論理的に話ができない人は、いつまで経っても負け犬ですよ。
787デフォルトの名無しさん:05/03/16 18:46:16
>>782
このスレでgotoの最適化について検討されたことがあるか?
788デフォルトの名無しさん:05/03/16 18:46:45
>>784
動かないコードをスパゲティコードとはよばない。
可読性の悪いgoto主体のコードをスパゲティコードと呼ぶ。
型にはまったコードは可読性が高い。

ゆえに。どこが非論理的?
789デフォルトの名無しさん:05/03/16 18:46:47
もう秋田、次の燃料下さい
790デフォルトの名無しさん:05/03/16 18:46:50
gotoの最適化なんて議論するようなことじゃないだろw
791デフォルトの名無しさん:05/03/16 18:47:52
NOTの勉強を推奨します!!!
792デフォルトの名無しさん:05/03/16 18:48:21
>>789
ではfreeの必要性について同思いますか?
793デフォルトの名無しさん:05/03/16 18:49:09
揚げ足とろうとかき回すことしか頭にない時点でアンチgotoは釣り。

↓ここからはextern(C)するとどうなるのという話題
794デフォルトの名無しさん:05/03/16 18:49:49
gotoの最適化なんて意味の無い議論を持ち出すことにより、
goto叩きに持っていこうとしてるのは見栄三重。
795デフォルトの名無しさん:05/03/16 18:49:51
↑extern(C)って何?
796デフォルトの名無しさん:05/03/16 18:50:10
>>790
速いプログラムはいいプログラムだ。 最適化は重要だ。
797デフォルトの名無しさん:05/03/16 18:50:10
なかなかageる勇気がありませんが何か?
798デフォルトの名無しさん:05/03/16 18:50:17
>>792はfreeの必要性についてどう思いますか?
799デフォルトの名無しさん:05/03/16 18:50:20
>>794
邪魔するな!
800デフォルトの名無しさん:05/03/16 18:51:09
__declspec( dllimport)と__declspec( dlleximport)の違いを教えてください。
801デフォルトの名無しさん:05/03/16 18:51:38
>>799ずぼしでしたかwスマソwww
802デフォルトの名無しさん:05/03/16 18:53:04
例外信者はgoto文見るだけで発狂するんだってね。
goto文見るだけで、これはミートソースだってきかないんですってね。
803デフォルトの名無しさん:05/03/16 18:53:45
>>799の野望は打ち砕かれましたw
804デフォルトの名無しさん:05/03/16 18:53:58
>>800
なにかとexなんだよ。
805デフォルトの名無しさん:05/03/16 18:54:10
こうなったら、今夜の飯はナポリタンにするしかないな。
806デフォルトの名無しさん:05/03/16 18:55:08
間違えました。
__declspec( dllimport)と__declspec( dllexport)の違いを教えてください、
でした。スマソ
807デフォルトの名無しさん:05/03/16 18:55:11
すっぱいからあまり好きくない
808デフォルトの名無しさん:05/03/16 18:55:49
折れは天津丼にするから大丈夫。
809デフォルトの名無しさん:05/03/16 18:56:08
なぜ最適化を重要と思っていないのか疑問だ…こいつら本当にプロか?
810デフォルトの名無しさん:05/03/16 18:56:13
なんで飛鳥でレタスチャーハンと餃子やめちゃったんだ?
811デフォルトの名無しさん:05/03/16 18:57:02
>>806
exportじゃないとdllが作れない
importじゃないとdllが使えない(ヘッダでリンクって意味ね)
812デフォルトの名無しさん:05/03/16 18:57:49
>>809
gotoの最適化がどれだけご利益あるのか行ってみて。
ヴァかな折れでもわかるようにね。

813デフォルトの名無しさん:05/03/16 18:58:36
>>811
マジレスサンクス ノシ
814デフォルトの名無しさん:05/03/16 18:59:26
815デフォルトの名無しさん:05/03/16 19:00:38
>>809
すいませんねー。おかげで儲けすぎちゃって困ってるくらいです〜。
816デフォルトの名無しさん:05/03/16 19:01:20
まあ、金もらっている以上、
興味が有ろうと無かろうと、プロはプロだなー。
817デフォルトの名無しさん:05/03/16 19:02:17
>>809
プロといえばgoto文を駆逐できるとでも思っていたのか?
わけわからん。
818デフォルトの名無しさん:05/03/16 19:04:09
まあ、今の時代は相当クソプログラム組まない限りは、
処理速度でそんなに苦慮することもなくなってるし。
その分、10年前より楽させてもらってますけどね。
819デフォルトの名無しさん:05/03/16 19:04:55
まだやってんのかよ。
820デフォルトの名無しさん:05/03/16 19:05:43
関数型言語糞。何これ。
821デフォルトの名無しさん:05/03/16 19:07:13
結局、gotoの最適化を語れる香具師はいないんじゃん。
それを材料にgoto叩こうったって意味無いことがはっきりした。
822デフォルトの名無しさん:05/03/16 19:07:56
>>821
だって、ただのジャンプ命令ですからw
823デフォルトの名無しさん:05/03/16 19:10:49
本当のプロは例外もgotoも柔軟に使います。
gotoはクソ、なんて言ってるのはそれこそ例外です。
824デフォルトの名無しさん:05/03/16 19:12:53
(´-`).。oO( スレがのびてると思ったらこれか…
825デフォルトの名無しさん:05/03/16 19:15:25
スレが伸びるって、いつもこんなんでしょ。
826デフォルトの名無しさん:05/03/16 19:28:38
>>821-822は何も分かってない気ガス
827デフォルトの名無しさん:05/03/16 19:31:16
>>820
糞はお前だよ、この淫売
828デフォルトの名無しさん:05/03/16 19:32:14
説明できない>>826はもっとわかってないのねw
829デフォルトの名無しさん:05/03/16 19:33:21
>>820は何やら根本的な勘違いをしているようだ
830デフォルトの名無しさん:05/03/16 19:33:33
とりあえず風呂でも入って臭いからだ洗って濃いよ。
831デフォルトの名無しさん:05/03/16 19:34:05
貧乏で安アパートで風呂付いてないんですー
832デフォルトの名無しさん:05/03/16 20:01:31
祭は終わりですか?
833デフォルトの名無しさん:05/03/16 20:02:36
あとの祭り
834デフォルトの名無しさん:05/03/16 20:03:05
        , ' /:::::::/!::::::l:::l l:::::::::ハ::::::::::i!:::::`ヽ、
       , ' /::::::::::/ |:::::l|::l  l::::::/ !:::::::| !:::::ハ:::::\ ' ,
         /イ:/|::::/  !i::l l|  |:::/  l::::::! l::::i l:::::::⊥
       / '::::/ |::/  |l:| l|   、|/_,. -!:::| !/  l:::(__ )、' ,
       , ' /::::/、」ムノ   !| !   手咋≧=、|  ノ ( l::(_ )::\ ' ,
        ; i:ハl 7》示气      }l込_タ冫 ⌒ |:::フ´ヽ::::::\
       ; _」| リ 戈ワュ′r 、     ゙≠宀⌒ヽ\   レ' /⌒ヽ:::::::::ヽ
      /:::::|   し´ ̄    ハ _  -‐ へ、//U //  !   !ヘ:::::::::::ヽ
    /:::Y´! ///// 「 ̄ ̄ | |___  -‐ ´ ヽ  ハ    l   l ハ::::::::ヘヽ
    ,::::::ハ l  U   l ̄ ̄ | |          ゙、 し   ヽ- ' ノ }:::::/ヽノ(
    l::::::| ヽヘ       !    J           i    ィー冖ー一^″    -イ
    l::::::|  `゙、U     l             } U、┴’             {
    ヽ:::|  ' , ト 、   l         __ノ イiハ     )  あ  ぶ  }
      ヽ!     U ` ‐- 二  ̄ ̄ ̄ ∪    /  \   (    あ  ぁ  |
             ' '  ' _ -7¨´     /    _」    )   あ  か   、
                 仄´  /    r ニ       \  (    あ  あ  〉
             | ヽ /  __  //  ヽ      / } !!  あ  あ  (
             |  ヽ`¬┌''´ノ     \  / 亅           冫
835デフォルトの名無しさん:05/03/16 20:03:25
この程度を祭とよんだら非難をあびる人に失礼だ
836デフォルトの名無しさん:05/03/16 20:03:50
>>826
837デフォルトの名無しさん:05/03/16 20:06:44
●●●●●●●●●●●●●●●●●●●●●
●              ●              ●
●              ●              ●
●              ●              ●
  ●            ●            ●
    ●         ●           ●  エーデルワーイス エーデルワーイス
      ●       ●         ●           _( "''''''::::.
        ●    ● ●      ●__ ____,,,... --‐'''^~   ヽ   ゛゛:ヽ
         ●  ●    ●  ●:::::::::....:""""  ・    ・  . \::.   丿
          ● ●    ● ●:::::::::::::::::::       ・  ....:::::::彡''ヘ::::/
           ●       ●:::::::::::::::::::::::::::::;;;;;,, ---‐'' "^~
            ●●●●●-‐‐ ''^~
838デフォルトの名無しさん:05/03/16 20:45:31
みんなデスマってるかー
839デフォルトの名無しさん:05/03/16 22:20:31
思うんだけど対立点を探すからいつまでたってもまとまらないのであって、
「無制限な goto は危険」を共通認識として後は各自好きにすればいいんじゃないの?
840デフォルトの名無しさん:05/03/16 22:23:22
>>839
空気読め
841まともに動いてない ◆/8LpUMqVAk :05/03/16 22:23:36
>>838
やってるよー
842デフォルトの名無しさん:05/03/16 23:19:23
助けてください。
環境 Linux
#include<stdio.h>

#define MAX 100

struct student {
int no;
};

main()
{
struct student *p;

p->no = MAX;
printf("%d\n",p->no);

return;

}
コンパイルはとおるんですが、実行すると落ちます。
教えてください。
843デフォルトの名無しさん:05/03/16 23:21:39
>>842
平気
844デフォルトの名無しさん:05/03/16 23:22:04
>>842
main()
{
  struct student s;
  struct student *p = s;

  p->no = MAX;
  printf("%d\n",p->no);

  return 0;
}
845デフォルトの名無しさん:05/03/16 23:22:32
struct student *p = &s;だな。スマン
846まともに動いてない ◆/8LpUMqVAk :05/03/16 23:24:16
>>842
struct student p;

p.no = MAX;
printf("%d\n",p.no);
847デフォルトの名無しさん:05/03/17 00:00:31
>>842
構造体使う前にポインタちゃんと理解しろ
848デフォルトの名無しさん:05/03/17 00:02:04
>>847
無駄口はいらん
849デフォルトの名無しさん:05/03/17 01:01:36
>>842ってネタじゃないの?
だって、あまりにもわかりやすいミスだから。。。
850デフォルトの名無しさん:05/03/17 01:02:15
>>849
無駄口はいらん
851デフォルトの名無しさん:05/03/17 01:04:53
>>842
コンパイル通るの?
main()って何もつけないと戻値ってintじゃなかったっけ?
852デフォルトの名無しさん:05/03/17 01:06:42
ばれちゃったねw
853デフォルトの名無しさん:05/03/17 02:08:36
>>851
ISO/IEC 9899:1999 Foreword -5により、暗黙のintは許されなくなりました。
854デフォルトの名無しさん:05/03/17 02:56:55
VC++6.0だとintだ。
855デフォルトの名無しさん:05/03/17 02:57:52
>>853
ふーん、そうなんだ。
じゃあ、暗黙はvoidなのかしら?
856デフォルトの名無しさん:05/03/17 03:14:42
暗黙は許されナインでそ?
857デフォルトの名無しさん:05/03/17 03:44:59
>>856
そういうこと。
858デフォルトの名無しさん:05/03/17 12:23:18
じゃあいずれにしても>>842がコンパイル通ったって嘘じゃん。
釣り決定!!
859デフォルトの名無しさん:05/03/17 12:47:31
>842 がコンパイルしたときのオプションが解らんのでは
「本当にコンパイル通ったのか」は不明だろう。
860デフォルトの名無しさん:05/03/17 12:57:06
>>858
は?あんたばか?コンパイラによるだろ。
861デフォルトの名無しさん:05/03/17 13:13:33
#include <stdio.h>

main()
{
  puts("Hello, world.");
  return;
}

少なくともCとしてコンパイルする分にはVC++6.0,gcc-2.95.4@Debian stableのどちらでも通る。
gccは-Wallとかつけないとwarningすら出ない。
862デフォルトの名無しさん:05/03/17 13:15:45
>>861
std=c99は?
863デフォルトの名無しさん:05/03/17 13:29:25
>>862
cc1: unknown C standard `c99'

gcc-2.95.4だし。
864デフォルトの名無しさん:05/03/17 13:37:40
基本的な質問ですいませんが、

配列で
int arg[5][10];
というものがあるとします。

その配列argに、
(1)変数名に演算はできるのか?
int* pName=arg+1;
(2)変数名に加算・減算できるのか?
arg++;arg-=5;
(3)変数名にアスタリスクをつけて、定数または変数の代入が出来るのか?
*arg='A';*arg=78;
int val=8;*arg=val;
865デフォルトの名無しさん:05/03/17 13:54:18
return で二つの値を返して
それを二個の変数に入れるにはどうすればいいのでしょうか

こうですか?
int a,b=return();
866デフォルトの名無しさん:05/03/17 13:57:26
>>864
「変数」そのものを勉強し直せ

>>865
return では一つの値しか返せない
867デフォルトの名無しさん:05/03/17 14:01:57
>>864
できるかどうかやってみりゃ済むことだ。
868デフォルトの名無しさん:05/03/17 14:05:20
>>864
変数ではないので、ここでは配列名でいいと思います。

(1)できます
(2)できません
(3)できません

あくまで配列の先頭ポインタを参照することしかできません。
代入をしたければ、別にポインタ変数を作りそれにアクセスしましょう。

int* ptr=ary;
*(ptr+3)=777;
869デフォルトの名無しさん:05/03/17 14:11:00
多次元配列の場合、
あなたが示した配列では、int arg[5][10];

(第一次添え字 * 第二次要素数) + 第二次添え字

がポインタ演算のさいの加算値となりますのでご注意を!
arg[3][7]; の場合、
(3*10)+7
となります。
870デフォルトの名無しさん:05/03/17 14:15:46
>>869
sizeof(int)の考慮が抜けてるぞ
871デフォルトの名無しさん:05/03/17 14:18:19
>>870
int* としてポインタ変数を作るからsizeof(int)はいらない
ばか
872デフォルトの名無しさん:05/03/17 14:25:07
ポインタのポインタってハンドルってことでおーけー?
873デフォルトの名無しさん:05/03/17 14:26:34
>>872
「ポインタのポインタ」は「ポインタ」だ。
874デフォルトの名無しさん:05/03/17 15:04:01
関数とAPI。
業界的にはどっちで呼んでるの?
意味合いは同じだとおもうけど。
875デフォルトの名無しさん:05/03/17 15:05:09
SQLiteをBorlandC++から使いたいのですが、組み込み方がいまひとつ
分からないので、助言をお願いします。

SQLiteのソースコードをダウンロードして、以下のようなテストを書きましたが
Error: 外部シンボル '_sqlite3_open' が未解決
とのエラーが発生しました。確かにヘッダファイルしか読み込んでないので
その通りだと思いましたが、如何せんこの先どうすればよいのか分かりません。

sqlite3.dll, sqlite3.defをどうにかリンクすれば良いのかとも思っているのですが
LoadLibraryで読み込むのも違うような気がして悩んでいます…。

======
#include <stdio.h>
#include "sqlite/sqlite3.h"

void main(void)
{
  sqlite3 *db;

  int result = sqlite3_open("test.db", &db);
  if(result){
    printf(sqlite3_errmsg(db));
  } else {
    // ここで sqlite3_exec() などの処理
  }
  sqlite3_close(db);
}
====

環境はWindowsXP + BorlandC++5.5 + SQLite3.1.6です。
876デフォルトの名無しさん:05/03/17 15:26:27
DLLの引数にクラスのポインタを使う場合、どの様に定義すれば良いのでしょうか。

DIBをまとめたクラスをDLLと受け渡したく、DLLはLoadLibraryでロードし、
typedefで定義した型に代入と言う形で呼び出したいのですが、何をどう
定義すれば良いのかさっぱり解りません。
877デフォルトの名無しさん:05/03/17 15:31:25
>>875
http://sqlite.org/capi3.html
これをよくよめぇ
878デフォルトの名無しさん:05/03/17 15:32:08
>>875
implib.exeでインポートライブラリ作れ
879デフォルトの名無しさん:05/03/17 15:39:28
>>874
うまい例え話が思いつかないが違うぞ。
880875:05/03/17 16:03:25
>>877
ありがとうございます。
一応そのURL(の日本語訳)も読んでいたのですが、それ以前に
DLLの使い方というか根本的なところから分かっていなくて…orz

>>878
ありがとうございます。
以下のようにインポートライブラリを作成してみたのですが、やはり
未解決とのエラーになってしまいます。インポートライブラリの使い方を
間違っているんでしょうか。

> implib sqlite3.lib sqlite3.dll
> bcc32 test.cpp sqlite3.lib
881デフォルトの名無しさん:05/03/17 16:15:43
>>880
-aオプション入れても駄目?
882デフォルトの名無しさん:05/03/17 16:33:26
質問させてください。WinHomeで、VC++6.0を使っています。
配布・改変が許可されたCのソースを落として、まずそのままビルド、実行したら通りました。
しかしソースに手を加えてビルド、実行を繰り返しているうちに、
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
が出るようになってしまいました。コンソールではなくWin32APPなのですが・・・。
ファイルが壊れたのかと思って、元のファイルに、改変したいくつかのcソースを上書き
していくと、いつの間にか同じエラーが出てしまいます。。どうしてなんでしょうか・・・
883デフォルトの名無しさん:05/03/17 16:36:44
>>882
ソース作った奴に聞くのが先だろ
884875:05/03/17 16:40:53
>>881
ありがとうございます。できました!
implibのオプションを見た限りでは、エラーに「_sqlite3_open」と先頭にアンダースコアが
付いているから「-a」オプションが必要だった…という解釈でいいのでしょうか。
(DLLの関数だからアンダースコアが付くんでしょうか??? もう少し勉強します…)

> implib -a sqlite3.lib sqlite3.dll
885882:05/03/17 16:42:41
>>883
あ、すいません。VC++の設定上の問題かと思ったので・・・
886デフォルトの名無しさん:05/03/17 16:49:13
どうしてかって、改変したからに決まってるだろ。
ビルドが通らなくなるような変更を加えたお前の責任としか。
887デフォルトの名無しさん:05/03/17 17:06:21
windowsで画像ビューア作ってみたいのですが、ビットマップを扱うAPIはあるようですけど
JPEGとかはどうやってるんでしょうか?
888デフォルトの名無しさん:05/03/17 17:18:42
889デフォルトの名無しさん:05/03/17 17:35:19
>>887
それくらいも調べられないなら、作るのをやめたほうがいい。
890デフォルトの名無しさん:05/03/17 17:44:23
>>887
Independent JPEG Group
ttp://www.ijg.org/
891デフォルトの名無しさん:05/03/17 17:49:54
c++
グローバル変数ばかっかり使っていたので、できる限り使わないように組み直しています。
WndProcで何かのキーを押したらそのキーに対応したフラグ(変数)を1にするようにしていました。
そのフラグは別の関数内で使用しています。
WinMainの中で変数の宣言をしているのですが、WndProc内でどういう形で呼び出せばいいのでしょうか?
892891:05/03/17 17:50:21
ばかっかりになってるしorz
893デフォルトの名無しさん:05/03/17 17:59:00
そういうのはグローバル変数でいいんじゃないの
894891:05/03/17 18:13:45
レスありがとうございます。
何か違和感がありますがここだけはそのままグローバル変数を使ってみます。
895デフォルトの名無しさん:05/03/17 18:24:31
質問してもよろしいでしょうか。

オーバーロードしてある関数のうちのひとつを派生クラスで
オーバーライドしたのですが、オーバーライドしてない方の
関数を呼び出そうとしたときにコンパイルエラーになってしまします。
Javaでは出来るようなのですがC++は出来ない仕様なのでしょうか?
896895:05/03/17 18:25:28
エラーメッセージ
'Read' : 関数が不正な 1 個の実引数をともなって呼び出されました。

コンパイラ
VC6.0SP5, BCC

class CReader{
public:
 virtual ~CReader(){
 }

 virtual void Read(){
 }

 virtual void Read(int a){
 }
};

class CExtendedReader : public CReader{
public:
 void Read(){
 }
};

int main()
{
 CExtendedReader reader;
 reader.Read(0);

 return 0;
}
897デフォルトの名無しさん:05/03/17 18:27:05
while (1) {} と for(;;) {} ってどっちが高速ですか?条件判定がない分forのが有利ですか?
898デフォルトの名無しさん:05/03/17 18:28:03
>>897
コンパイラの最適化を信じろ。
899デフォルトの名無しさん:05/03/17 18:29:42
>>898
そうだね。心の汚い人間になるところでした。
900デフォルトの名無しさん:05/03/17 18:29:54
>>896
CExtendedReaderの定義の中に、using CReader::Read;と書け。
901デフォルトの名無しさん:05/03/17 18:32:50
C++にパッケージ内パッケージってあったのか。
ちょっと驚き
902デフォルトの名無しさん:05/03/17 18:34:31
パッケージなんてものはない。
903デフォルトの名無しさん:05/03/17 18:34:57
>>901
何の話?namespaceの事?
904895:05/03/17 18:36:23
>>900
無事にコンパイル出来ました!
ありがとうございました。
905デフォルトの名無しさん:05/03/17 18:38:15
>>903
うんそれそれ。でも良く見たら>>900にnamespaceって書いてないね。
Javaのimportとの違いを知りたくなったので調べて見ます。
906デフォルトの名無しさん:05/03/17 18:42:28
>>905
何を見るの?
907デフォルトの名無しさん:05/03/17 18:43:05
>>906
"C++" using でぐぐる
908デフォルトの名無しさん:05/03/17 18:52:11
C++ : Java / using と importの比較

using namespace hoge; : import hoge.*;
using hoge::Writer; : import hoge.Writer;
エイリアス有り : エイリアスなし
909デフォルトの名無しさん:05/03/17 19:09:51
Java と違って良いのは、

using fbar = namespace foo.bar;

とかできる点だな。
910デフォルトの名無しさん:05/03/17 19:14:57
namespace netque = torutk::network::que;
これはつまり netque と torutk::network::que を同時に宣言してるってこと?
911ヽ(´ー`)ノ ◆.ogCuANUcE :05/03/17 19:31:26
>>909
それ C# じゃねーか YO!

>>910
alias.

#include <boost/program_options.hpp>

int main(int argc, char const * argv[])
{
namespace bopt = boost::program_options;

bopt::options_description a = ...;
}

…とか。エディタの補完機能使えばいいだけの話なんだけどね(´Д`)
912デフォルトの名無しさん:05/03/17 19:38:43
>>911
= の右辺値は既存のネームスペースのみなのか。
そっちのが安全でいいけどね。
913デフォルトの名無しさん:05/03/17 19:41:34
D言語のaliasはすごいぞ。
Dのalias = Cのtypedef
Dのtypedef = 型独立

namespaceとまるで関係ない
914デフォルトの名無しさん:05/03/17 19:41:56
そんなことより、namespace foo::bar::hoge {} したい。
915デフォルトの名無しさん:05/03/17 19:45:18
namespace foo::bar::hoge; はできるの?
出来るならファイル分ければいいだけさ。
916デフォルトの名無しさん:05/03/17 21:22:28
例えば4つのBMPファイルを扱う場合、
あらかじめ4つのHBITMAP型を宣言して、それぞれに
LoadImageしておいた方がいいんでしょうか?
それともその場その場で一つのHBITMAP型を使いまわしたほうが良いですか?
917デフォルトの名無しさん:05/03/17 21:25:28
ここは質問する人はおろか、答える人までも初心者でがんばってるんだね。
918デフォルトの名無しさん:05/03/17 21:29:46
>>916
同じサイズのBMPならひとつ読み込んでBitBltでどうにかするとゲーム風。
そうじゃねなら普通別々に読み込むわな。
919デフォルトの名無しさん:05/03/17 21:31:20
>>876
言いたいことはさっぱりわからないが、とりあえずvoid */const void *をやり取りすればいいんじゃないか?
920デフォルトの名無しさん:05/03/17 21:42:30
>>916
ケースバイケース
921sage:05/03/17 21:50:50
(今回入力したx−前回入力したx )/(今回入力したy−前回入力したy)
を求めるプログラムを教えてくれないでしょうか?
お願いします。
922921:05/03/17 21:51:41
↑あげてすいません
923デフォルトの名無しさん:05/03/17 21:55:13
strcpy(before,current,strlen(current));
cin >> current;

なんてな。
924デフォルトの名無しさん:05/03/17 22:03:41
>>921
意味がわからん
925デフォルトの名無しさん:05/03/17 22:09:13
>>921
マルチは氏んでね
926デフォルトの名無しさん:05/03/17 22:09:19
if 2回目以降 then
  答え =(今回入力したx−前回入力したx )/(今回入力したy−前回入力したy)
927デフォルトの名無しさん:05/03/18 00:13:43
なんでこんなスレ進むの早いんだ?春休み?いいなぁ学生は
928デフォルトの名無しさん:05/03/18 01:32:42
やっぱりUNICODE使ってやってます?
929デフォルトの名無しさん:05/03/18 03:10:00
>>927
学生でつ(´ω`)
そもそも調べて分かるようならここで質問しないのですが、検索しても自分のケースとは違うので結局答えに至らないという場合があります。
本の説明は難しかったり、ある程度知識がないと分からなかったり。

自分もここ(の板)で聞きたかったことがあるのですが、ソースを公開しないと説明できない量なので自力でやってました。
4日間1日12時間以上1文字変えてはデバックという作業を繰り返して、さっき上手くいったときの快感は寝るまで忘れません。
まだこういう体験をしていない人はたくさんいると思いますが、くじけず頑張ってください。
では寝ますノシ
930デフォルトの名無しさん:05/03/18 05:51:05
デバッグと言うより拷問だな。
931デフォルトの名無しさん:05/03/18 07:07:34
向いてなさそう
932デフォルトの名無しさん:05/03/18 12:16:02
そろそろE言語が出る時代かな。
良い言語。
933デフォルトの名無しさん:05/03/18 12:16:55
>929はどんなプログラム書いてるんだろう
見てみたいようなそうでないような…
934929:05/03/18 12:43:40
単車で滑って2マソのMP3プレイヤー大破(ノ∀`)

>>933
フライトシューティングでつ。
タイムラグがあるけど一応WAN内なら対戦可能・・・に何とかなりました。
相手の座標と描画(座標がおかしければ当然変な位置に描画)がおかしく、
エラーが出るわけでもないので原因が特定できませんでした
メッセージの欠損か描画関数がおかしいのかもしくは別のところか。
バックアップもとらずに不審点をひたすら変えていったら何とか成功。
結局どこをどう弄って直ったのか把握できず。
できるだけ修復しやすいプログラムにしていますが、
音楽を流したり他のPCと通信するとなると一気に何行も書かないと駄目なのでしょうがないといえばそれまでなんですが。
935デフォルトの名無しさん:05/03/18 14:16:55
E電みたいでやだ!
936929:05/03/18 14:21:10
WANじゃないや、LANだ(´・ω|
937477:05/03/18 15:30:35
おーし、なにやら毎度結の出ない話題がまたぶり返してたようだけどもう一度聞いちゃうぞ〜?
inline 使いまくるとダメな理由 or それ書いてる書籍の情報キボン(`・ω・´)
938デフォルトの名無しさん:05/03/18 15:33:11
>>937
全部嫁よ
Efficient C++ 以外は全て良本だ
939デフォルトの名無しさん:05/03/18 18:46:33
ヘタレな学生なもんで、すぐにすべてを読破するのは難しいんでつ…(´・ω・`)

まぁ良本という噂はかねがね伺ってますので(Efficientは初見だけど)
まったりと読んでいくつもりですが…
940デフォルトの名無しさん:05/03/18 19:25:46
学生が一番そういうの読み込める時期じゃないかなぁ。
941929:05/03/18 19:35:26
>>939
本を読んでも理解できなくても、自分の必要とする関数を使っていくだけで勝手に覚える。
一定期間続ければ途中の短期間で一気に本の内容が理解できるようになる。
ダイエットみたいなものかね、したことないけど。
942デフォルトの名無しさん:05/03/18 20:25:19
>>941
おまえはセンス無いから
アドバイスに説得力がない
943デフォルトの名無しさん:05/03/18 21:01:52
今Effective C++読んでるんだけどほかの良本おしえてください
一応全部読んでみたいので
944デフォルトの名無しさん:05/03/18 21:04:27
>>943
ここには必読書のためのスレとかあるだろ?
945デフォルトの名無しさん:05/03/18 21:42:28
最終的にはC言語風味のスクリプトを作ろうと思ってるわけですが、
文字列処理に関しての知識が足りないため現在修行中です。

とりあえず、ある文字列から
タブ、スペース、リターン、キャリッジリターンをデリミタ文字にして
トークンごとに文字列を取得するクラスを作れるところまでいきました。

次はCSVファイルあたりでもよみこんでみようかと、
デリミタをタブ、スペース、リターン、キャリッジリターン、コンマにして挑んだところ、
ダブルコーテーションで囲まれた範囲のリターンやスペースがデリミタ文字にならないらしく
おかしなことになっております。
こういった場合はどんな手法を使うのが定石なのでしょうか?
強引にダブルコーテーションがきたら、その中の文字をデリミタ文字jでのチェックを行わないと
してしまっていいのでしょうか?
アドバイスお願いします。
946デフォルトの名無しさん:05/03/18 21:43:32
>>944
ありがとう、スレあったんだな!
947デフォルトの名無しさん:05/03/18 21:43:46
>>945
http://pc5.2ch.net/test/read.cgi/tech/1106129164/
先人の知恵を受け入れてからでも遅くは無い
948デフォルトの名無しさん:05/03/18 21:46:46
それと、ttp://www-ccs.ucsd.edu/c/
ttp://www-ccs.ucsd.edu/c/syntax.html を見るとわかりやすいだろう
949デフォルトの名無しさん:05/03/18 22:25:30
>>945
その方法でなんら問題ない。
最も綺麗な解法だと思う。
950デフォルトの名無しさん:05/03/18 22:28:34
>>937
inlineばっかりしてるとサイズが爆発するぞ。
んでキャッシュが効かなくなるしロードに時間がかかるようになって結局遅くなる可能性がある。
どのへんまでが高速化の分岐点かは環境によって違う。

マクロの代わり程度の小さな関数に限っておいた方が無難。
951デフォルトの名無しさん:05/03/18 22:32:36
>>947-948
リンクの紹介ありがとうございます。
色々と奥が深そうですね。

最終的にC言語風味のスクリプトを作りたいと書きましたが
実はC言語風味のスクリプトを作ってそれをどうやってプログラム側で処理したらいいのかとか
その辺からわかっていなかったりします。(スクリプトの本を買っても言語仕様はのっているのですが)

ちなみに「処理したらいいのか」というのは構文解析がどうとかいう問題ではなくて
構文解析まできたとしてその後、どうやってプログラム側にスクリプト側の値を渡すのかといったものです。

例えばいまは
NAME = "佐藤 太郎";
とかやるとNAMEというプログラム側であらかじめ決めたキーワードに値が入ってきますが、
スクリプトで作った場合だとどのようにしてプログラム側に値を渡すのでしょうか?
実は一番知りたいのはこんな部分だったりするのですが何かオススメ書籍とかないでしょうか?
952デフォルトの名無しさん:05/03/18 22:37:29
>>951
その質問をこのスレでするのか?ふさわしいスレまで紹介してもらって?
953デフォルトの名無しさん:05/03/18 22:38:29
>>950
実行コードのサイズと、消費メモリサイズを混同する痛い人は、あなたですか?
954デフォルトの名無しさん:05/03/18 22:42:39
>>949
ところがですね。
会社にあるソース(誰が書いたかわからない)では
ダブルコーテーションからダブルコーテーションまでを
1つのキーワードと認識できているようでフォーマット定義ファイル(?)と
キーワード定義ファイル(?)をいじるだけでC言語みたいな複雑なものから
CSVみたいな簡単なものまで解析できてしまっています。
(ソースが複雑過ぎて&私の文字列処理の知識が貧困過ぎてコメントの用語からいってわかりません(笑))
なにか自分のやり方と根本的に違うような気がするので書籍をあさっているのですが、
一朝一夕では理解できないと考え地道に勉強しております。
955デフォルトの名無しさん:05/03/18 22:45:33
画面を分けるためだけに儲けたsub関数と
1〜3行のif文が存在しない関数をinlineにするって基準はダメ?
956デフォルトの名無しさん:05/03/18 22:45:57
>>954
正規表現の本でも買って来いや
957デフォルトの名無しさん:05/03/18 22:52:51
>>952
もうしわけございませんでした。

>>956
ありがとうございます。
とりあえず、紹介してもらったリンク先と
拾ったキーワードに関する本を片っ端から調べてみます。
958デフォルトの名無しさん:05/03/18 23:06:33
>>953
実行コードのサイズが増えても消費メモリが増えないとでも?
コードの長さ分だけはどうやっても増えるだろうが。
959デフォルトの名無しさん:05/03/18 23:10:05
>>955
サイズはわかるがif文はなぜ?
何か根拠あるのかな。気になる。
960デフォルトの名無しさん:05/03/18 23:14:18
>>954
文字解析や構文解析は似たようなコードがひたすら並ぶことも多いのでソース見てもわからんのはあたりまえ。
ためしにソースコードを圧縮してみると明らかに圧縮率が高かったりする。
それだけ冗長度が高いってこった。

アルゴリズムのレベルで理解しないと既存のソースなんて参考にはならんよ。
あるいはパーサジェネレータの挙動を見る方がためになるくらいだ。
961デフォルトの名無しさん:05/03/18 23:15:03
ifがあるとinline化出来ないとか・・・勘でいってみる
962デフォルトの名無しさん:05/03/18 23:16:24
inline付けても必ずinlineされるとは限らないんだけど
それでも爆発する程サイズ増えるもんなの?
今時のコンパイラならその辺上手くバランス取ってくれそうだけど。
963デフォルトの名無しさん:05/03/18 23:21:00
>>956
正規表現では対応関係を記述できない。
964デフォルトの名無しさん:05/03/18 23:22:53
>>959
制御文やstatic変数・関数がコードの中にあるとinlineは無効じゃなかった?
どうせコンパイラが無視するから関係のないことかも知れんけど。
965デフォルトの名無しさん:05/03/18 23:24:38
mbstowcsしてから解析してる?
マルチバイト文字だと解析が難しくなるよ。
966デフォルトの名無しさん:05/03/18 23:35:00
>>962
「今時のコンパイラがその辺上手くバランスを取って」
くれるなら、手作業でinlineをつけまくるより、
最初からコンパイラの自動inline化にまかせればいい。
967デフォルトの名無しさん:05/03/18 23:52:41
inline【淫ライン】
女性のウナジからフトモモにかけてのライン。

                              妄想百科辞典【中国民萌書房】
968デフォルトの名無しさん:05/03/18 23:52:53
>>958
なるほど。
コードの長さ分増えることでキャッシュが足りなくなるほどの
メモリ消費が発生するといいたんですね。

しつこいですが、ファイルサイズと消費メモリサイズを混同しないように。

あなたが、入門書・解説サイトなどを読んでるうちに
脳内で誤解が生じてしまった痛い人なのは、同情します。
でも間違いは間違いです。

チンケな自尊心を捨てて、反省してください。
969デフォルトの名無しさん:05/03/18 23:55:14
コンパイラはinlineを無視する権限がある
コンパイラは勝手にinline化する権限がある
最適化オプションで傾向を変えられないならinlineって無駄では?
とも思ってしまう今日この頃
970デフォルトの名無しさん:05/03/19 00:15:33
>>968
あのなぁ。
キャッシュのサイズってどんだけか知ってるか?

それと最初は実行コードのサイズがどうとか言ってたのにこんどはファイルサイズかよ。
実行コードが増えればファイルサイズも消費メモリも増えるだろうが。ボケ。
(そりゃ例外がないとまでは言わんよ。でもまさかここでそんなことを持ち出さないだろうな?)
971デフォルトの名無しさん:05/03/19 00:32:04
キャッシュにも一字と二字があるよね。
972デフォルトの名無しさん:05/03/19 00:32:31
システムによっちゃ3字もあるって聞いたことある。
973デフォルトの名無しさん:05/03/19 00:35:57
例えば、

int main( void)
{
 int* mem = new int[ 4ギガバイト];
 delete [ ] mem;

 return 0;
}
ってやったら、この数行のプログラムでさえも、
一瞬でもメモリサイズ4ギガバイト逝きますよね(細かいことは抜きで)。
974デフォルトの名無しさん:05/03/19 00:36:15
もうそっとしといてあげようよ、、、
975デフォルトの名無しさん:05/03/19 00:42:39
>>973
バイト単位ならせめてcharで。
976デフォルトの名無しさん:05/03/19 03:18:17
>>973
やってみたがメモリ使用量に変化無し?!
ただし、配列要素にアクセスするコードを入れたとたんに
スワップが始まったw
これって正しい動きなのか?
ちなみにOSはWinXP。
977デフォルトの名無しさん:05/03/19 03:48:07
メモリを確保するという処理にスワップファイルを作るという仕様はないしな。
978デフォルトの名無しさん:05/03/19 05:32:27
>>976
タスクマネージャーで確認したところ、
スワップが始まったとたんにメモリ消費量グラフ増大。
979デフォルトの名無しさん:05/03/19 05:41:49
>>976
タスクマネージャの表示項目を増やすべし。
メモリ使用量だけでなく、仮想メモリサイズも注視しないといけない。
NT系のメモリ管理機構はUnixのそれより優れている(とされる)。
プログラマが意識しなくていい部分で色々やってくれる。

ためしに、メモリ書き込みした巨大バッファを数分間Sleepなどで保持した後、
アクセスしてみると・・・・。どうなるか、とりあえず、やってみれ。

デスクトップOSだからこういうことするんだろうと思うが、
余計なお世話にも感じる。
980デフォルトの名無しさん:05/03/19 05:49:49
仮想メモリを体感できて感動した。
981デフォルトの名無しさん:05/03/19 08:47:26
つーか4GBも確保できんだろ。アドレス空間が足りない。
982デフォルトの名無しさん:05/03/19 10:24:01
>>962
関数一つinlineにしただけで、実行ファイルのサイズが700KB増えたことはある。
これが爆発する程かどうかは知らないけど。
983デフォルトの名無しさん:05/03/19 10:29:13
C/C++ってダサ
984デフォルトの名無しさん:05/03/19 10:32:14
挫折したからって泣くなよ
挫折したからって泣くなよ
985デフォルトの名無しさん:05/03/19 10:41:49
好き嫌いしてちゃろくな大人になれませんよ
986デフォルトの名無しさん:05/03/19 10:44:52
どのコンパイラだったかは忘れたけど、グローバルな名前空間に属する関数を
inline指定するとグローバルリンク用に非inline版の関数とinline展開したコードの
両方が生成された記憶が。
それでも精々30KBくらいしか増えなかったけどなぁ。
#streamとstringが絡むとどっちみち増えるし。
987デフォルトの名無しさん:05/03/19 12:34:11
>>973
ちなみにインテルコンパイラは配列は2GBまでだよ。
なんで、コンパイラによって制限あるんじゃない?
988デフォルトの名無しさん:05/03/19 12:41:03
コンパイラっていうかWIN32だとアプリが使えるメモリ空間は2GBまで。
まぁ、4GB超のメモリにアクセスする手段がないではないが。
989デフォルトの名無しさん:05/03/19 12:41:06
>>973
32bitOSの場合、確保しない。できない。
例外をスローする。
new(nothrow)をした場合、ヌルを返す。
それだけ。つまらん。
990デフォルトの名無しさん:05/03/19 16:13:51
>>984
ざせつ? なにいってんの このひと アホですか しんでいいですよ
きっと きみ の まわりには ざせつしたひとが いっぱい なんでしょうね
991デフォルトの名無しさん:05/03/19 16:26:55
超図星
992デフォルトの名無しさん
まず挫折する要因が解からない。
ただのプログラミング言語だろ。