1 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:35:36 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/
2 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:52:06 ] これはポニーテールがなんちゃらかんちゃら
3 名前:デフォルトの名無しさん [2009/05/14(木) 21:15:47 ] std::invalid_argument は「意味的に正しくない引数に対する例外」ということなのですが、 この「意味的」という意味が分かりません。 具体的にどのような場合が「意味的に正しくない」のでしょうか?
4 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 21:36:12 ] 例えば引数で何月かという値をもらうとする。 1-12以外が渡されたら、意味的におかしいだろ?
5 名前:3 [2009/05/14(木) 21:48:32 ] >>4 ありがとうございます。 1-12以外が渡されたら、それは想定範囲外だから std::out_of_range であると思っていました。
6 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 02:32:50 ] 刀、 , ヘ /´ ̄`ヽ /: : : \_____/: : : : ヽ、 ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : } /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : / ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/ /: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/  ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/ /: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、 . /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\ /: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \ / / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :} l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : / |: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ !: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ V ヽ| }/// r‐'⌒ヽ イ〉、 ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは>>1 乙じゃなくて ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね! /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
7 名前:すげーどーでもいい質問 mailto:sage [2009/05/15(金) 03:23:23 ] class Hoge { private: int h; public: Hoge(int h) : h(h) {} }; 俺、上みたいなとき、いつも仮引数の名前とメンバ変数の名前同じにしてるんだが、 (特に問題なく動くので)そういうコード見たことない。混乱するから?それともたまたま 動いているだけで何か問題あるの? 俺にとっては毎回変数と違う名前を思いつく方がよっぽど紛らわしいんだが。
8 名前:デフォルトの名無しさん [2009/05/15(金) 03:24:23 ] 始めて3日の初心者です。 初項1、公比1/3の等比数列の4項までの和を求めたいのですが (もちろん普通に計算すればできますが) どうにも上手くいかなくて困っています。助けてください。 自分が書いたのはこんな感じです。 #include <stdio.h> #include <conio.h> int main(void ){ int l; double m,n; l=0; m=0; n=0; for(l=0;l<5;l++) { m=1/3^l; n=n+m; } printf("%f",n); getch(); return 0; } どこがいけないのかさっぱりわかりません。どなたかご指摘お願いします。
9 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 03:38:03 ] >>8 C言語ではべき乗演算子はない ^はXOR演算子 だから m = 1 / pow(3, l); とすればいいはず
10 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 03:40:57 ] あ、#include <math.h> を忘れずにな powがdouble型を返す事を前提にしてるんで そうしないと整数÷整数という意味のない事をする事になってしまう
11 名前:デフォルトの名無しさん [2009/05/15(金) 04:09:31 ] >>8 問題あるよ。 その問題とはお前が低脳ってこと 普通の脳なら、int m_h;とかする。
12 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 04:50:04 ] >>11 おまえ番号ちがうくらいだからもっと低能だな
13 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 04:52:48 ] m_って何の略?
14 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 05:25:09 ] staticの意味を調べコードを書いたのですがコンパイルエラーになります どこがおかしいのでしょうか #include <iostream> class Test { public: static int x; int y; Test() {} ~Test() {} void show(); static void s_show(); }; void Test::show() { std::cout << "y=" << y << std::endl; } void Test::s_show() { std::cout << "x=" << x << std::endl; } int main() { return 0; }
15 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 05:28:03 ] int Test::x; が抜けてる
16 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 05:45:40 ] #include <iostream> class Test { public: static int x; int y; Test() {} Test(int i = 0) : y(i) {} ~Test() {} void show(); static void s_show(); }; int Test::x = 1; void Test::show() { std::cout << "y=" << y << std::endl; } void Test::s_show() { std::cout << "x=" << x << std::endl; } int main() { Test t(2); t.show(); t.s_show(); }
17 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 06:05:17 ] えっグローバル変数とstatic変数は宣言と同時に自動的に0に初期化されるのではないのでしょうか? 例) #include <iostream> int global; int main() { static int staticint; int local; std::cout << local << std::endl; std::cout << global << std::endl; std::cout << staticint << std::endl; return 0; } (結果) -1881141193 ←ゴミ 0 ←きちんと0で初期化されてる 0 ←きちんと0で初期化されてる
18 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 06:09:29 ] >>17 クラスのstatic変数は例外です というのもクラスのインスタンスを複数作ってもstatic変数の 実体は一つしか作られない上にコンストラクタでも初期化不可能 なため、どこかで定義してやる必要があります。 もちろん = 1 を省略すれば 0 で初期化されます。
19 名前:17 mailto:sage [2009/05/15(金) 06:23:33 ] >>18 わかりやすい説明ありがとう。
20 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:03:13 ] >>7 メンバー変数と仮引数と局所変数を区別するプリフィックスをつければいいんじゃないかな。同じ意味で記憶クラスが異なる変数を人目で見分けられるし、名前を増やさなくて済む。 例えば、メンバーはm、仮はkとか何とか class Hoge { private: int mh; public: Hoge(int kh) : mh(kh) {} };
21 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:08:37 ] >>7 私は小さいコンストラクタに限り、同じ名前でやってるよ。まぁ、別に問題ないな。 >>10 解釈がおかしい。プロトタイプ宣言のないpow()を使った場合、引き数のそれぞれがintのまま引き渡されてしまいおかしなことになる。 又、戻り値もdouble値として戻されるのにintとして受け取ろうとするからやはりここでもおかしなことになる。 x86みたいにintとdoubleで格納するレジスタが異なるような環境の場合、一見巧く動くから厄介だ。
22 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:14:13 ] 等比数列で前の数を使わないでいちいちpowするような間抜けなやり方なんてどうでもいいだろw
23 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 12:22:26 ] 自作のヘッダファイルは二重にインクルードしてしまうと再定義のエラーになりますが、 よくよく考えると<iostream>のような標準ヘッダはインクルードガードしないで何度もインクルードしているような 気がしますが、なぜエラーにならないのでしょうか?
24 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 12:29:45 ] >>23 標準ヘッダもインクルードガードしてるだろ。
25 名前:23 mailto:sage [2009/05/15(金) 12:43:11 ] >>24 あ、そっか。独自のヘッダファイルでインクルードガードするんじゃなくて、 標準ヘッダ側にインクルードガードが書かれてるのか。ところで標準ヘッダファイルを見た事がないのですが、 標準ヘッダってどこのディレクトリにあるんでしょうか?iostreamでCドライブ検索したけどヒットしませんでした。 Visual Studio2008使ってます
26 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:13:44 ] includeの下。
27 名前:23 mailto:sage [2009/05/15(金) 13:19:27 ] やっぱりなかった。iostreamもistreamもostreamも。 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include ですよね!?
28 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:24:30 ] #include <iostream>で右クリックして ドキュメントを開くを選んで 開いたらタブで完全パスのコピー
29 名前:23 mailto:sage [2009/05/15(金) 14:09:23 ] こんな機能あったんだ。。 ヒットしなかったのは違うドライブにインストールしてたからだった。。 大変失礼しやした。ありがとー
30 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 14:39:22 ] ttp://www.geocities.jp/ky_webid/cpp/language/021.html ここにインライン関数はソース側に記述できないと書いてあるのですが(ヘッダに書けってことですよね)、 試したらソースファイル(cpp)にインライン関数を書いてもエラーになりませんでした。 僕の読み違いでしょうか?
31 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:08:38 ] >>30 >僕の読み違いでしょうか? いいえ、間違いです。
32 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:33:30 ] >>31 どっちなんだよww
33 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:48:14 ] 「インライン関数はソース側に記述できない」のは正しいが、「エラーにならない」のも事実。 従って「読み違い」ではなく、「検証方法の間違い」だ。
34 名前:デフォルトの名無しさん [2009/05/15(金) 17:22:25 ] 共用体ってどんな時に使うのでしょう? メンバの値がどれも同じになるなら、変数と同じ気がするんですが…
35 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 17:37:31 ] メモリが足りない時等にに変数を共有してメモリ節約したい時
36 名前:デフォルトの名無しさん [2009/05/15(金) 17:44:56 ] すいません、わかりません…。 同じデータだけどデータ型が頻繁に変わるゆうな時に使う、という認識ですか?
37 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 17:50:18 ] 変数で考えるな メモリで考えろ
38 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 17:52:37 ] >>36 >同じデータだけどデータ型が頻繁に変わるゆうな時に使う、という認識ですか? データ型が変わるという認識は間違い。 例えば 2つの変数char cとint iに対して同時にアクセスしないなら それをunionにすれば同じメモリ上に配置できるから節約できるでしょ? ただしそのunionの値を読み出す時は どちらの値が入っているかに気を配りながら使う手間が必要。
39 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 17:53:06 ] #include <stdio.h> typedef struct { int sampling_rate; }AAC; typedef struct { int sampling_rate; }AC3; typedef struct { union{ AAC aac; AC3 ac3; }u; }SOUND; int main(void) { SOUND sound; // なにかの処理 } みたいな?
40 名前:38 mailto:sage [2009/05/15(金) 17:53:18 ] >>36 これでもわからなければ諦めろ つーかググれ。
41 名前:デフォルトの名無しさん [2009/05/15(金) 17:56:48 ] ありがとうございます!よくわかりました
42 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 18:17:13 ] こんなのはありそうだね。 typedef union { struct foo { int x; int y; } s; int array[sizeof(struct foo)]; } coord_t;
43 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 18:28:25 ] C99のソースを書く奴は単なるオナニー
44 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 18:45:31 ] unionは二分木の実装で見かける気がする。
45 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:16:52 ] 通信では、普通に使う
46 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:23:11 ] クラスを配列にすることはできますか?
47 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:42:34 ] できます
48 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:50:55 ] C言語で、linux のioポートのアクセスを行う実装を行いたくて #include <linux/types.h> #include <linux/config.h> #include <asm/system.h> include <asm/io.h> これらのファイルがないと怒られます、どうしたらいいのでしょうか?
49 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:03:31 ] Redhat系なら、kernel-headersとかその辺のパッケージを入れる。 それ以外なら Linux板で聞け。
50 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:15:04 ] >>49 Thx slacklwareなんでlinux板で聞きます、因みにkernel-headersはインストールしているのですが カーネルを 2.6.29.3に上げているためだと思います、 2.6.29.3用のkernel-headersをインストールしないといけないのでしょうかね?
51 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:15:52 ] >>47 ありがd クラス覚えた手だけどこりゃ便利そうだ
52 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:18:50 ] プログラム板から、誘導されました C言語で、linux のioポートのアクセスを行う実装を行いたくて #include <linux/types.h> #include <linux/config.h> #include <asm/system.h> include <asm/io.h> これらのファイルがないと怒られます、どうしたらいいのでしょうか? 因みに、鳥はslacklware12.2でkernel-headersはインストールしているのですが カーネルを 2.6.29.3に上げているためだと思います、 2.6.29.3用のkernel-headersをインストールしないといけないのでしょうか?
53 名前:デフォルトの名無しさん [2009/05/15(金) 22:52:38 ] C言語で一つの処理?を終えるまでにかかる時間を計算する方法ってありますか? CPUが100Mhzだとすると、 たとえば、*buf = 1000 とか一つ処理するのにどれくらいかかりますか?
54 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 22:54:14 ] 1/100000000秒じゃね?
55 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 22:57:17 ] >52 J 釣りか ? それくらい解決できないようではC言語を使わないでもらいたい。 昔の人は考えた、無ければ作ればいいと。 findでgrepのviだろjk.
56 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:01:31 ] >>53 コンパイルしてアセンブラのコードを見ないと。 最近のCPUは複雑だから、それでも難しいと思うけど。
57 名前:デフォルトの名無しさん [2009/05/15(金) 23:10:21 ] >>56 アセンブラのコードみたらわかるというわけでもないのですね そういうのって計算できないものなのかな おおよその計算ができるプログラムなりあったりしないのでしょうか? CPU作ってる人たちはそういうの計算してるんですよねやっぱり
58 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:20:43 ] 大体は判るよ。CPUが指定されているのならね。 アセンブラの判る人間なら、この処理はこんなコードに落ちるから、何クロックとか推測出来る。 同じ周波数でもCPUによってかかる時間が違うから単に100MHzとか言われても答えようがない。 もっと問題なのは *buf = 1000; なんてのはコンパイラの最適化でどうなるか判らないことだ。
59 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:22:09 ] >>57 10年くらい前に読んだアセンブラの本にはVTuneってツールで プロファイルしながら、アセンブラのコードを最適化する例が 乗ってたよ。 ググったら、今でも売ってるみたいなんで、そういうツールを 使えばわかるんじゃないの?
60 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:22:27 ] 最速のケースと、最悪のケースは計算できるだろうけど。 あとは、CPUのシミュレータがあるからね。
61 名前:デフォルトの名無しさん [2009/05/15(金) 23:24:21 ] >>58 Mhz以外に何がわかればいいのでしょうか? 計算方法としては Cのソースをコンパイル→アセンブラ見る→CPUから計算? という感じでしょうか
62 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:26:20 ] >>58 たとえ同じCPUでも、その前のコードによってキャッシュやパイプラインの状況が 異なってくるから何とも言えないというのはある。
63 名前:デフォルトの名無しさん [2009/05/15(金) 23:28:09 ] >>62 大体はわかりませんか? たとえば10000回ループさせたとして これくらいだと、100ms〜200msかかるとか
64 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:28:58 ] >>63 それかなりの精度の読みを要求してるなw
65 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:29:43 ] あと、いい加減sageろ
66 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:32:08 ] >63 大体は判るって言ってるだろうが。 日本語に不自由してるのか? アセンブラ勉強しろ。その範囲で判る範囲の推測は出来る。 それより実測した方が早いがな。
67 名前:デフォルトの名無しさん [2009/05/15(金) 23:36:45 ] 大体は判る その大体すら教えてくれないのにそういわれても
68 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:39:53 ] >>67 CPUすら教えてくれないのにそう言われても。
69 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:40:42 ] >>63 実測するのが早い。 実測できないのなら、MIPS値がわかれば一秒間に実行できる大体の命令数がわかる。
70 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:42:36 ] 環境によって変わり過ぎる ハードウェア等の動かない前提のものならともかく、 OSやサービスパックの有無、画面のサイズなどの描画関係やアンチウィルスソフトなんかも走ってればかなり差も出る ってか、実測すれば??
71 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:47:19 ] そのためのプロファイラだろ
72 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:50:22 ] アセンブラで局所的にパフォーマンスどうこうって話をしてるのに、 サービスパックの有無とか安置ウイルスソフトどうこうとかって話はないだろ。
73 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 23:54:23 ] だよねw
74 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 00:01:32 ] 例えアセンブラでも、>>67 の書いた情報だと、 「全フットプリント合計の最悪値以下」しか答えようがないでしょ。 キャッシュやらパイプラインやら環境要因/外的要因が多すぎる。 組み込み用のMMUもないCPUを割り込み禁止で使えば、 好きなだけアセンブラから完全な精度で値を割り出せるよw
75 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 00:50:28 ] みんなわかりきってて言及を控えた事だから書かなくていいよ
76 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 01:15:54 ] unionの話ちょっと前に出てるけど unionをどんな時に使ってるんだ?
77 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 08:09:09 ] 上にも出てたが、最有力はネットワークのパケット関連だろ。 あとは特定のファイル形式のヘッダとか。 俺は組み込みやらんから知らないけど、メモリの制約が大きい環境では勿論メモリ節約の意味で使うだろうし。
78 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:17:22 ] インストール完了して、ライブラリなどの参照先を全て設定してあるのですが コンパイルで3回ほどやったら固まったり ビルドですぐに固まったりして 何度も強制終了して困っています。 何か解決策はありますでしょうか? 使用 VC++6.0 OS WindowsXP Proffesional メモリ 4GB CPU Core2 Duo 3GHz です。
79 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:50:07 ] それは C/C++ の質問とは言わん。が、まあいい。 >使用 VC++6.0 これを新しくするか >OS WindowsXP Proffesional これを古くする。
80 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:14:42 ] >>レスありがとうございます。 新しくするというのは VC++ 2008にするという事ですか?
81 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:40:06 ] VC++6.0は時代の遺物じゃね。 もう使い物にならん。
82 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:21:57 ] 小林健一郎さんの、「これならわかるC++」と 矢沢久雄さんの「C++クラスの継承」を読み終わって 平山尚さんの「ゲームプログラマになる前に覚えておきたい技術」を読んでみたのですが 最初のプログラムって、初心者が思いつくようなものなのでしょうか?orz 初心者向けと聞いて開いてみたのですが、難しくて挫折しそうです・・・。 平山さんの本を読むために、読んでおくべき本があったら教えてください・・・。
83 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:26:42 ] 読むだけじゃだめ、何か作っていかないと
84 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:29:36 ] 追加、本読めば作れるようになれっると思うのはひじょーーに甘い。 簡単なものからで良いから、数を作ることが必要。 例えば、マラソンの本を1万冊読もうがマラソン選手になれるわけではない。
85 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:35:44 ] >>83-84 即レスありがとうございます。 プログラムも自分なりに作ってはいるのですが x軸やy軸などの基本書に書いてなかった概念が出てきて 何か足りない知識があるのだろうか、と思っています。
86 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:37:50 ] まて、それは数学の知識や物理の知識で、2Dなら中学程度でOKだけど。 本当に知りたいのはなに?
87 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:47:14 ] >>86 数学の知識があればいけるのでしょうか? 私の単なるプログラムの経験不足でしょうか・・・。 目にしたことない単語が多く出てきたので、難しく感じています。 数学は大学センター試験で1A,2B両方とも80点取れる程度です。
88 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:53:15 ] >>87 なんとなくスレ違だが、>>85 の例題が悪い。 >私の単なるプログラムの経験不足でしょうか・・・。 これが答え。 易しく言うと、ある現象、キャラガX軸方向に歩いていきます。とした場合。 あなたなら、簡単に計算式が予想できると思う。しかしだ、 それをプログラムとした場合のモデル化が予想できない状態である。 この解決策は、ずばり、経験だけ。あなたなら経験すればすぐ作れるようになる
89 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:54:24 ] ゆとりの理想像にだいぶ近いな
90 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:56:46 ] >>88 レスありがとうございます。 やはり経験不足なのですね。 色々なプログラムに触れて勉強したいと思います。 どうもありがとうございました。
91 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 18:10:06 ] 宿題スレの問題を自分の力だけで解けば、糸口が見えてくると思う。 解けない時は、他の人の回答を 手打ちで入れる。 コピペは駄目ぜったい
92 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 18:40:04 ] ゲーム作りたいのなら、HSPあたりがいいんじゃない?
93 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:41:39 ] 誕生日を祝ってくれるプログラムを作りましたが何も表示されません。 やはり誰も祝ってくれないのでしょうか。 int main(void){ int i; for(i=0;i>100;i++) printf("お前、お誕生日おめでとう。\n"); return 0; }
94 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:43:28 ] >>93 釣り?マジ?コマンドラインからそのプログラムを起動しろ
95 名前:94 mailto:sage [2009/05/16(土) 23:46:16 ] >>93 その前に i>100 この停止条件がおかしいじゃん。
96 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:48:54 ] 俺が祝ってやる int main(void){ while(1) { printf("お前、お誕生日おめでとう。\n"); return 0; }
97 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:49:54 ] あーーーーーーーっ } 何も言うな orz やはり祝えなかった
98 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:51:05 ] ありがとうございます。 しかしこういうエラーが出るんです。 'int' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
99 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:53:37 ] まじで、コマンドプロンプトなのか? ちょっとOS何か言ってみ
100 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:57:08 ] OSはウインドウズです。 もしかしてウインドウズだとできないんですか?
101 名前:93 mailto:sage [2009/05/17(日) 00:01:30 ] 解決しました。 一年後よろしくお願いします。
102 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:01:36 ] >>100 んなわけがない まさかソースを直接実行してないよね? コンパイルはしてるよね?
103 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:10:25 ] コンパイルはコマンドラインでするんですよね? ちゃんとプログラムを打ち込んでるつもりなのですが・・・
104 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:12:42 ] DOS窓でコンパイルか、なにC使ってるか疑問だ
105 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:13:03 ] >>98 拡張子はcだぞ。batじゃ無いぞ
106 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:14:41 ] おまえら全力で釣られてていいの?
107 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:15:50 ] int main(void){ printf("今日、僕ね、万個からこんにちはしたんです。\n"); main(); return 0; }
108 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:24:22 ] コマンドラインで int main(void){ って入力するとそのエラーになるなw
109 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 09:24:08 ] >>107 関係ないけど >万個からこんにちはしたんです 「中に誰もいませんよ」を思い出した。
110 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:59:56 ] C++にて unsigned x=10; と言ったらxの型は何になるんでしょうか? unsigned intですか?
111 名前:デフォルトの名無しさん [2009/05/17(日) 12:04:29 ] yes
112 名前:110 mailto:sage [2009/05/17(日) 12:09:42 ] >>111 unsigned intと書かずに unsignedとだけ書くメリットは短い以外に何かありますか? 今後の互換性とか何か?
113 名前:デフォルトの名無しさん [2009/05/17(日) 12:12:59 ] なんのメリットもない気がする
114 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:32:51 ] 省略かっこいい 俺すげー(゚∀゚)神のヨカーンな気分にひたれる
115 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:39:46 ] ギャル語みたいなもんか
116 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:48:36 ] R&K を厨二病だなんて言ってやるな。
117 名前:110 mailto:sage [2009/05/17(日) 12:56:34 ] まあ確かに long intと書かずにlongで済ませたりしますが、そんな感じですか。 ありがとうございました。
118 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 13:07:04 ] ポインタ → 整数型(64bit) → ポインタの変換って仕様的に保証されていますか? C で確保したリソースを他システムにハンドル値として渡し、他システム側からの 解放命令やセッション中断で解放したいんですが。
119 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:23:34 ] >>118 reinterpret_cast
120 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:28:23 ] thankyou
121 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 16:44:31 ] 整数型への相互変換自体は保証されているが、それが64bitというのは保証されて無い というのが建前で そのためにわざわざintptr_tとかUINT_PTRとかが用意されているんだけど まあC以外との通信なら仕方ないかな。 既に環境依存だし、64bitってのも問題ないんだろう。 キャストの方法(構文)はどうでもいい。
122 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 21:41:16 ] テキストの改行コード \r \n を削除して バイナリファイルとしてファイルに出力後 メモ帳でみると1024文字目で改行されて表示されるのです バイナリで開くと改行コードは取り除かれているのですが これはWindowsのメモ帳の仕様でしょうか?
123 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 21:45:45 ] コマンドプロンプトから type [ファイル名] で改行されていなかったらメモ帳の仕様
124 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 23:03:54 ] 質問です。 ・・・ 俺:「RSA暗号で暗号化されているので安全です」 上司:「RSA暗号とは?」 俺:「素数を使った暗号なのですが・・・要するに解読しようと思ったら何万年もかかってしまうから、 実際には解読しようと試みる人はいないだろうという意味で安全な暗号なのです。」 上司:「高速なコンピュータを使ったら解けてしまうのではないか?」 俺:「TOP500という世界で一番速いコンピュータのリストがあるのですが、その上位のコンピュータでも私たちが生きている間には解けませんよ。 まぁ、量子コンピュータなんかがあれば一瞬で解けてしまうと聞いたことがありますが、幸か不幸か量子コンピュータをまだ誰も完成させていません。」 上司:「でもお前が知らないだけかもしれない」 俺:「いえいえ、量子コンピュータなんかができたらすごいニュースになりますよ」 上司:「ほかの企業や組織が秘密裏に作っていたりしたらお前にわかるのか?」 俺:「・・・」 ↑の「俺」がRSA暗号が安全だと上司を説得するにはこの後どのように続ければ良いでしょうか? 正論でお願いします。
125 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 23:09:04 ] 「他の企業でも積極的に使われていますよ」
126 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 23:09:34 ] >>124 100%開かない鍵のかかった扉は、もはや誰にも明けられない扉だと思わなければなりません。 それと同じで、正当な手順で暗号を解除して元に戻すことが出来るようにしておく以上、 100%の確率で不正な解除を防げるようなことはありえません。 現行の規格で利用可能な現実的な意味で安全な暗号なんです。 これでどうだ? つーかスレちがいじゃね?
127 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 23:42:44 ] >>124 2048ビット値の素因数分解してもらえ もしくはできるプログラムを書いてもらえ
128 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 23:45:49 ] 上司:「でも俺が書けないだけかもしれない」
129 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 23:48:41 ] つい最近始めた者です。 知り合いのサンプルコードをみてみると グローバル変数に OBJ gPlayer; という欄があったのですが、これはどういう変数なのでしょうか?
130 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 23:52:56 ] OBJ型のgPlayerという名前の変数です
131 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 23:56:48 ] OBJ型っていうのが本に書いてないんですが どういう型なんですか?
132 名前:デフォルトの名無しさん [2009/05/19(火) 00:00:44 ] 学校でUNIXでC++やってるんですが、 どうやってプログラム書く画面開くんですか? lsとか色々入れてたんですが、どこに何を入れればテキストエディタ開けますか。 どうすれば、コンパイルかけれますか?
133 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:03:12 ] >>124 おまえは本当に俺の上司なのか?
134 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:06:35 ] >>132 先生に聞け。
135 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:06:52 ] >>131 サンプル内で定義されてる型だろ
136 名前:デフォルトの名無しさん [2009/05/19(火) 00:15:47 ] >>134 教えてくださいよorz
137 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:22:26 ] >>136 プログラムを書く画面はviで開くよ。
138 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:22:45 ] >>135 なるほど 探してみます ありがとうございましたー
139 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:22:47 ] >>132 lsとか打ち込む画面で、viと打ち込めばエディタが立ち上がる。 プログラム打ち込んだら、 cc プログラム でコンパイルできる。
140 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:39:19 ] >>124 「見つけた人はCIAとFBIから消されますので、公的には発表できません。ですから安心です」 とでも言っておけ。
141 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:49:46 ] つまんね
142 名前: ◆ZtXjKqCmiQ mailto:sage [2009/05/19(火) 05:38:02 ] >>132 % vi hello.c (プログラム)と打ち込めばviエディタが立ち上がる。 [a]または[i]プログラム main(){} と打ち込んだら、 [Esc][:][w][q][Enter] でエディターを終了する。 % cc hello.c (プログラム)でコンパイルできる。
143 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 10:11:12 ] バカな上司は持ちたくないですな
144 名前:デフォルトの名無しさん [2009/05/19(火) 15:41:16 ] DOS窓に出力したいんですが、どうすればいいのですか?
145 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 16:05:40 ] >>144 = >>132 か?何処まで出来た?
146 名前:デフォルトの名無しさん [2009/05/19(火) 20:14:59 ] AllocConsole
147 名前:デフォルトの名無しさん [2009/05/19(火) 20:16:41 ] HTMLを解析するライブラリはないでしょうか? 言語はC/C++です
148 名前:デフォルトの名無しさん [2009/05/19(火) 20:38:47 ] 久しぶりにプログラムを行ったらすごく基本的なところで躓きました double x; x=2/5; printf("%f\n",x); この結果が0.0000になります もちろん0.4000にしたいのですが何が悪いんでしょうか?
149 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 20:54:59 ] >>148 x = 2.0 / 5/0;
150 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 20:55:41 ] >>149 まちがえた。 x=2.0/5.0;
151 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 21:53:51 ] 今ゲームや単純な練習用プログラムを作ってるんですが、 どこからどこまでクラスを使うべきか、等がよくわかりません ○○の場合は△△を使うのが良い、というようなことを書いてあるサイトなどはありますか?
152 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 21:57:26 ] >>151 デザパタの本でも読めばいいんじゃね? って思ったけど、本読んでも試行錯誤した経験がないとピンとこないかもしれない。
153 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 21:59:32 ] OOPで作るなら、全部オブジェクトでつく霊
154 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:10:05 ] >>152 ありがとうございます 作りながらそういう分野も勉強してみます
155 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 00:50:51 ] float型の変数の値をRS-232で送りたいので8bitずつに分けたいんですが、どうすればできますか? ビットシフトや論理積とろうとしてもエラーがでてしまいます。
156 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 00:52:50 ] union { flaute fdat struct { char cdat[4]; } } udat;
157 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 01:28:14 ] ありがとうございます。unionで出来ました。unionってこう使うものだったんですね でも、何故structでchar cdat[4]を括ってるのか分かりません。何故ですか?
158 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 03:47:29 ] IDAという解析ツールのver5.2の体験版が欲しいんですが、誰か持ってませんか?
159 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 04:17:27 ] 製品版買え
160 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 09:08:34 ] >>157 別に括りたくなければ括らなくていいよ。それと、unionを使うことは環境依存という修羅の道に進むことだと言うこともお忘れなく。 # 尤も、float値をバイナリのままシリアル伝送しようと言う時点で既に修羅の道だけど。
161 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 09:41:13 ] >>155 memcpyでいいじゃん
162 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 09:42:14 ] int i = *(int*)&f;
163 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 09:45:50 ] >>161 このケースでどのようにmemcpy()を使うのか、詳しく。
164 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 09:54:42 ] できた unsigned char c[sizeof(float)]; float f; f = 10000000.0f; memcpy(c, &f, sizeof(f)); for (int i=0; i<sizeof(c);i++) { printf("%#x,", c[i]); }
165 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:13:59 ] memcpyしなくてもできた float f; f = 10000000.0f; for (int i=0; i<sizeof(f);i++) { printf("%#x,", ((unsigned char*)&f)[i]); }
166 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:21:42 ] >>124 団塊世代の上司ってそんな感じのやつが多いよなあ。 解りもしないくせに説明しろだの言ってくるから困る。 解るためには自分で理解しようという努力が必要なのにその努力もせずに、 自分が理解できないのは説明しているやつが悪いからだ、と責任の押しつけまでしてくることもある。 んで結局は他の何人かが良いと思うか悪いと思うか聞いて直感で判断するわけなんだが、 解らないなら最初からそうしろ、と思うわけなんだよ。 結局のところ、団塊世代は対抗意識が非常に強くて教育者あるいは指導者しての能力が致命的に欠落していると言わざるを得ない。
167 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:25:30 ] ろくに説明もできないのに何言ってんだか。 内容が知りたいわけじゃなくて、当人がちゃんと理解してるか判断するために 説明させてるんだよ、たぶんw。
168 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:33:30 ] 新しい暗号技術でも開発しろというのか?
169 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:45:23 ] >>167 つまり部下を信用していないということか。 社内にまで敵を作って大変ですね。 どうせムズカシイ理論とかは理解できないんだから、せめて成果で判断すりゃいいのにね。 最初は小さいことから成果を積ませて、だんだん大きいことをやらせれば良いのに。
170 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:08:12 ] >>164 >>165 わざわざコピーする理由は? 元質は転送が目的なんだから、コピーしなければいけないなんて要件ないよね。
171 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:12:52 ] >>170 だからコピーやめたやーん
172 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:13:57 ] わざわざunionにする理由は? 元質は転送が目的なんだから、unionにしなければいけないなんて要件ないよね。
173 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:17:51 ] で、コピーするコストを掛ける理由は?
174 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:18:39 ] 頭悪いな
175 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:21:20 ] またメモリ節約厨か
176 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:22:11 ] >>173 charの配列にコピーすれば取り出せるんじゃね? って思ったけど、じゃあcharにキャストすればいいんじゃね? という具合に思考が遷移したんだよ。 ごめんよ。
177 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:05:38 ] >>167 いや、技術的に正確かどうかなんてどうでもいいんだよ。 納得させられるかどうかだけが問われる。
178 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:08:56 ] >>177 だから、単に自分の権威を見せつけたいというのと対抗意識の現れでしかないんだよ。
179 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:12:13 ] 団塊世代は技術もなければ精神性も低い。 社会のゴミですね。
180 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:14:42 ] >>178 うん、そうかもね。 だから?w それで出世あきらめるの?
181 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:17:26 ] >>180 技術盗んだら海外におさらばするつもり
182 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:18:53 ] もう俺が悪いって事でいいからけんかはよせ
183 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:26:22 ] あーあ 団塊世代のせいでまた人材が日本から流出していく。 さすが社会のゴミ 国賊 団塊世代は日本をつぶす気か
184 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:30:53 ] 何でも他人のせいにするところはどっかの民族とそっくりだな。
185 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:40:46 ] >>183 団塊世代が悪いかどうかは知りませんが、うちの会社でも団塊世代の天下りを受け入れない方針になったみたいですよ。 まぁ、最近の世論的に天下りはまずいからでしょうが。
186 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 16:43:34 ] Windows上でLinuxを起動させたいのですが VMwareソフトウェアのどのシリーズを選んだらいいのでしょうか?
187 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 16:44:38 ] vmware serverをダウンロードしてインストールしる
188 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 17:14:03 ] ようしゃなく英語やったorz
189 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 17:18:15 ] 日本人のくせに英語もできないのか
190 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:17:16 ] 敵性言語として長く使用を禁じられていたので…
191 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 19:13:14 ] じゃぁ なでしこでWMwareと同レベルのものを作ってください
192 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 19:15:49 ] 今は属国なんだからしっかりしる!
193 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 22:47:50 ] #include <iostream> using namespace std; int main(){ int tmppl; cin>>tmppl; int const pl=tmppl; int php[pl]; return 0; } あらかじめ数字を入力して変数tmpplに入れておき const plの初期化の際にtmpplを使おうと思ったのですがコンパイルエラーが出ます これは無理なんでしょうか? また配列の要素数をキーボードで入力した数字で決めたいのですが、どうすればよいでしょうか?
194 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 22:54:38 ] >あらかじめ数字を入力して変数tmpplに入れておき >const plの初期化の際にtmpplを使おうと思ったのですがコンパイルエラーが出ます >これは無理なんでしょうか? 無理です >また配列の要素数をキーボードで入力した数字で決めたいのですが、どうすればよいでしょうか? std::vector
195 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 22:58:06 ] int *php=new int [pl];
196 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 23:07:30 ] >>194 >>195 ありがとうございます! 初期化と代入の違いが何となく分かりました
197 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 00:31:36 ] それは初期化とか代入の話じゃなくて 配列の添え字はコンパイル時定数でなければならないという仕様の話じゃないのかい? っていうか、前にもまったく同じ回答をした気配がする。
198 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 03:35:38 ] extern就職誌というのを知らなかったので試してみたら疑問がでました。 (main.cpp) #include <iostream> int global = 100; extern void func(); //ココをexternとっても動作する int main() { std::cout << ::global << std::endl; ::func(); return 0; } (another.cpp) #include <iostream> extern int global; void func() { std::cout << ::global << std::endl; } 俺の理解している範囲ではexternをつけると「この変数もしくは関数はグローバルだ。ただし定義自体はこのファイルでなくて 別のソースファイルでしているから気をつけろ。」ということなのだが、上記のソースではどうも動作が違う。 最初にメイン関数内でグローバル変数のglobalを表示するのはいいだろう。 次にグローバル関数のfuncに突入するのだがfuncはexternがついているので別ファイル、すなわち another.cppで定義されている。それで実行は可能なのだが試しにメインのextern void func()からexternをとってみた。それでも 動作したのだが、なんで動くんだ?
199 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 03:57:19 ] >>extern就職誌 素晴らしい
200 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 03:59:50 ] で、とりあえず、externは、「この名前がグローバルだ」とするためのもの。 そのコンパイル単位で定義されているかどうかは関係ない。 それと、関数はデフォルトでextern。 つまり、staticを付けないで宣言(定義も)されたものは、全てexternと同等となる。
201 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 04:00:00 ] 海外転職誌みたいだな。
202 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 04:00:17 ] 本題に答えろ
203 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 04:07:44 ] eow.alc.co.jp/extern 通勤医師の就職誌か。
204 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 04:12:30 ] おまえ、辞書引いたのか。。
205 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 08:10:30 ] >>200 んー、よくわからんのですがとりあえず関数はおいておいて変数については 「この変数はグローバルだ。ただし定義自体はこのファイルでなくて 別のソースファイルでしているから気をつけろ。」 この定義は間違っていますか?それとも合っている?今、同じソースファイルで宣言だけでなく定義もしたらエラーに なったのですが。。わかりやすい説明モトム (main.cpp) #include <iostream> extern int global; int global = 4; void func(); int main() { std::cout << ::global << std::endl; ::func(); return 0; } (another.cpp) #include <iostream> void func() { std::cout << ::global << std::endl; }
206 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 08:20:02 ] どんなエラーだよ まさか宣言しないシンボルを使おうとかしてないよな
207 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 08:24:49 ] another.cppの中ではglobalが何者かわからん。
208 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 08:45:54 ] 動けばいいんだよ。動けば。
209 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:26:55 ] コンパイルできない なんでか教えて #include <iostream> class Point { private: int m_x; int m_y; public: Point(int x = 0, int y = 0): m_x(x), m_y(y) {} void show() { std::cout << "m_x = " << m_x; std::cout << ", m_y = " << m_y << std::endl; } Point *operator+(Point *p) { m_x = m_x + p->m_x; m_y = m_y + p->m_y; return *this; } }; int main() { Point *p1 = new Point(3, 4); Point *p2 = new Point(5, 8); p1->show(); p2->show(); Point *p3; p3 = p1 + p2; p3->show(); return 0; }
210 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:50:47 ] >>209 Point *operator+(Point *p) { ... return this; } p3 = *p1 + p2; コンパイルするだけならこう変更する
211 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:53:23 ] ありがとうございます 仮にp3 = p1 + p2; を計算させたい場合は関数定義はどうすればいいですか?
212 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 13:01:54 ] ポインタ演算をオーバーロードするのはオススメできない どうしてもやりたいなら「フレンド関数 オーバーロード」あたりでぐぐれ あと補足だけど>>210 はp1==p3になるから気を付けてね
213 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:22:46 ] 了解しました。
214 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:32:56 ] std::cout << "ABCDEFGHIJKLMN"; std::cout << "\r12345\n"; とすると12345ABCDEFGHIJKLMNと表示される。 \rは復帰、現表示位置がその行の先頭に移動する。 というのはわかるが、一体何の役に立つんだこれ? マジで使ったことある人いたら教えてくれ
215 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:40:09 ] 歴史的遺物
216 名前:214 mailto:sage [2009/05/21(木) 16:41:05 ] 興味程度にどんな歴史的遺物か教えてくれ
217 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:42:37 ] コマンドライン上で簡易進捗バー出すのに便利。
218 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:49:36 ] >>205 externは、別のファイルで定義しているリソース(変数とか)を このファイルでも流用するよ、っていう宣言。 C++では、変数名・関数名などは、その変数・関数を使用するより前に、 それが何なのかを同じファイル中でコンパイラに教えてやらないとエラーになる。 お前さんのソースの中で、グローバル的に使用されているのは、 void func()とint globalの2つ。 func()を使用しているのはmain.cppだが、ここではfunc()を使用するより 前に void func(); と宣言してあるから無問題。 一方、another.cpp内で使用されているglobalは、定義はmain.cppでしているが、 another.cpp内で宣言していない。 だからコンパイラはanother.cppのglobalという識別子が何なのかという 情報を教えてもらってないのでエラーになる。
219 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:52:01 ] 歴史というなら、それこそ5,60年代とかに遡れるんじゃね? ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89
220 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 17:05:44 ] >>214 つか、それ12345FGHIJKLMNって表示されないか? 処理系依存なんかな。
221 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 21:03:52 ] すまん質問させてもらう void *operator new(size_t size,const char *pname, int nline ); #define new new(__FILE__, __LINE__) とnewを実行したソース名と行数を取ってるんだが これのdelete版が出来ない もしかしてdeleteの方は無理? STL使ったら、妙なdeleteが増えて特定したいんだ
222 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 21:43:31 ] >>220 処理系っつーか、出力装置 (と、その状態) による。
223 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 22:21:07 ] MFCを使ってライブラリを利用するのと SDKで一からアプリケーションを作成するのは どちらがいいでしょうか?
224 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 22:27:33 ] MFC。間違いない。マクロやキャスト使いまくりで興奮する。
225 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 00:48:32 ] 最初のうちはSDKで必死になって窓の基本を覚え、その後MFCをさわって逝く まあ俺のことだが
226 名前:205 mailto:sage [2009/05/22(金) 01:07:35 ] >>218 やっと理解できたー!有難う。 というわけで俺んなかでの結論; 「extern就職誌をつけられた変数・関数はこのファイルでこれから使うけどどっか別のソースファイルで 指定されてるからね!ちなみに関数のプロトタイプがあるとしたらそれはextern就職誌つけなくてもそれは externとみなされてるから、別のファイルで指定されてるかもしんないし、ひょっとするとこのファイルの 後で定義されてるかもしんない」 という感じか。 なんか認識にまだ問題有ったら指摘して
227 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 11:00:27 ] 就労意欲は汲み取れた。
228 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 11:55:10 ] ワロタ
229 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 15:31:37 ] まずはexternなしでソースを書いてコンパイルしてエラーが 出たらexternをつければよい
230 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 16:45:03 ] そもそもexternって使う機会あんまなくないか?
231 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:56:56 ] グローバル変数
232 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:59:49 ] グローバル変数そのものをほとんど使わないからな
233 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:32:07 ] グローバル変数を使うとしても、 初期化の問題を恐れてほとんど全部 関数スコープ内でのstatic変数の参照の呼び出しにしちゃうし (つまり結局グローバルスコープではない。) 。
234 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:39:49 ] グローバル変数でもグローバル変数を入れるクラスを作るからね
235 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:22:42 ] グローバル変数がグローバル関数になり、グローバル関数がグローバルオブジェクトになるわけですね。
236 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 09:48:22 ] template <int N> foo bar(Hoge hoge1, Hoge hoge2, … , Hoge hogeN) みたいな感じでtemplate <int N>のNに対応して引数の数を変える関数とかって標準で作れますか?
237 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 10:04:52 ] 多重定義しかありません
238 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 12:05:47 ] 可変引数リストじゃだめなんだろうか
239 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 12:21:57 ] Cを使ってlsライクなプログラムを作ろうとしてて、自分の環境下で動いているlsコマンドの動作を元に作ろうと思ってるんだけど ls-オプションの動作のCで書かれたソースはコンピュータ内にあるのでしょうか?
240 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 12:38:52 ] 引数の個数が変化すれば bar() の中身も変える必要があるしね
241 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 12:48:05 ] >>239 lsは、Coreutilsに含まれているはずだから www.gnu.org/software/coreutils/ から手に入れることができるはずだよ
242 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 13:22:25 ] 今加速度センサから値を得て速度を出してるんですが、ノイズや誤差の影響で 加速度を積分した値が静止させても0に戻りません。 そこで出来るだけ正確に無理矢理0に戻そうとしているんですが、何かいい方法ありませんか? あと、このようなフィルタ処理?とかを扱ってるスレってありますか?
243 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 15:12:40 ] getopt
244 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 18:32:35 ] C/C++でHTMLのパーサってないでしょうか?
245 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:26:05 ] なんでop[]は引数をひとつしか取れないようにしたんだろう
246 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:34:12 ] >>245 ハゲに聞いてくれ
247 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:45:27 ] >>245 C++はPascalじゃないよ [a, b]なんて書き方はないから
248 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:53:10 ] 何をブチ込んでもいいんだから 気が済むまでメンバ変数詰め込んだクラスを引数にとる[]を定義すればいいじゃないか
249 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:03:42 ] delete a, b; とかやるのと一緒だな>>247
250 名前:246 mailto:sage [2009/05/23(土) 22:09:52 ] >>247 別に>>245 はPascalとごっちゃにしているわけではないだろう。 オペレータオーバーロードとしては[a, b]の形も認めてもいいんじゃないかって >>245 は言いたいんじゃないの?
251 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:24:41 ] C++はカンマ演算子の意味が違うから無理 関数呼び出しはむしろ特別な場合
252 名前:246 mailto:sage [2009/05/23(土) 22:28:16 ] >>251 そりゃ知っているけどさ、 出来たら便利じゃない。 今からじゃ互換性の関係があって無理だけど、 最初の段階で可能であるように仕様を定めておけばよかったのでは。 ・・・ということも踏まえた上で、 だから俺は「ハゲに聞いてくれ」と言ったのだ。
253 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:31:00 ] C言語で連立方程式を解くにはどんな方法がありますか? 2次方程式だけじゃなく3次4次と応用が利くようなやり方で
254 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:32:35 ] >>253 Gaussの消去法でぐぐれ
255 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:35:21 ] あほか ガウス法は一元一次方程式にしか使えん 反復法なら使える
256 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:35:38 ] もしかして: ガウスの消去法
257 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:36:27 ] 掃き出し法だろ常考
258 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:45:46 ] お前ら・・・(汗 3次とか4次にも使えるようにって書いてあるのが読めないのか?
259 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:46:09 ] Gauss-Seidel反復法マジオススメ
260 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:57:23 ] 反復法で10万次方程式解いて悦にひたるのがマイブーム
261 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:02:55 ] long num=100; このとき ++(++(++(++num))); って動作は未定義になりますか? 一つの式の中で値が複数回変更されているように見えるのですが。
262 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:04:42 ] >>261 ならない カッコがついているので副作用完了点がカッコの中で終了するから
263 名前:261 mailto:sage [2009/05/23(土) 23:14:35 ] >>262 となると、自作クラスの前置インクリメント演算子のオーバーロードの返り値は、 const参照で*thisを返すのではなく 非constな参照で*thisを返すべきなのですね。 ありがとうございました。
264 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:15:13 ] >>261 そもそも ++(++foo) は、++fooが評価後に値なので、++を作用させることができない気がするのだが これがC++の参照返す++演算子のオーバーロードならどうなるか知らないけど
265 名前:261 mailto:sage [2009/05/23(土) 23:19:51 ] >>264 でも一応 long num=100; ++(++(++(++num))); はコンパイル可能です。
266 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:20:04 ] Cでは前置も後置も値のコピーを返すけど C++の前置は自身を左辺値として帰すので有効。
267 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:24:35 ] ああ、cとc++では扱いが違ったのですね。 c++脳なので知りませんでした。
268 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 10:29:25 ] HTMLパーサ自作できたのだわ 1時間もかからなかったのだわ こんなに簡単なのでググってもでないわけだわ JAVA, Ruby でパーサ使ってる奴って・・・
269 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 12:02:03 ] +は可算演算子だよね。 では%は何演算子と呼べばいい?
270 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 12:05:10 ] 剰余演算子
271 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 12:14:19 ] >>268 天才だな
272 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 12:46:43 ] よく言われる
273 名前:269 mailto:sage [2009/05/24(日) 13:00:27 ] >>270 ああなるほどね。 ありがと。
274 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 13:14:03 ] そこらへんのパーサって非標準(タグ閉じ忘れとか含め)のHTML読めるの?
275 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:24:58 ] STLの投げる例外の一覧みたいなサイトってありますか?
276 名前:269 mailto:sage [2009/05/24(日) 14:39:30 ] +num や -num といった、符号をあらわす演算子はなんて言えばいい? 単項演算子じゃおかしいし、符号演算子とか??
277 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:44:18 ] 性符号・フフ郷
278 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:51:04 ] >>277 サンクス!
279 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:02:00 ] int foo(bool arg1, bool arg2) { if(arg1){return 1;} else if(arg2){return 2;} else return 3; } この関数をこれ以上速く記述することって可能でしょうか? 例えばelseを無くしたりすることによって。
280 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:15:45 ] 速く記述する、ってどういうこと? 短くの間違い?
281 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:19:50 ] >>279 int foo(bool arg1, bool arg2) { return arg1 ? 1 : arg2 ? 2: 3; }
282 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:32:52 ] static int f[][] = {{3, 2}, {1, 1}}; int foo(bool arg1, bool arg2){ return f[arg1][arg2]; }
283 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:46:34 ] static int* f = {3, 2, 1, 1}; int foo(bool arg1, bool arg2){ ASSERT((!!arg1) == arg1 && (!!arg2) == arg2); return f + ((arg1 << 1) | arg2); }
284 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:47:21 ] >>279 速くするんだったらinline asmかな やり方知らんから教えられないけど
285 名前:279 mailto:sage [2009/05/24(日) 18:06:32 ] >>280 速く動作するように記述したいという意味です。 確かに速記でもするかのような書き方でした。 >>281-283 ありがとうございます。 >>284 ありがとうございます。 一応標準C++だけで書きたいと思っております。 みなさんありがとうございます。 連続質問で申し訳ないのですが、 int bar(bool arg1, bool arg2) { if(arg1&&arg2){return 1;} else if(arg1||arg2){return 2;} else return 3; } でしたらどう記述するのが(動作速度的に)ベストでしょうか?
286 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:11:24 ] 前のもそうだがその程度ならそのまま書くのが一番良いと思う。 特定の環境を想定しないのなら尚更だ。
287 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:12:35 ] >>286 たしかに、ボトルネックにならないなら素直な書き方が一番ですかね。 ありがとうございました。
288 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:15:00 ] ここ行けば、そういうの好きな人いっぱい居るぞ。 pc12.2ch.net/test/read.cgi/tech/1226143920/ 俺は面倒くさいからパス。
289 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 20:14:35 ] 数人の身長が記されているtxtファイルを読み込んで、 140 ー 145cm ** 145 ー 150cm * 150 ー 155cm ** 155 ー 160cm ** 160 ー 165cm **** 165 ー 170cm ** の、ようにヒストグラムで出力するプログラムの作り方を教えてください。
290 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 20:17:07 ] 読み込んで出力すればいいよ
291 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:35:54 ] >>289 1.テキストファイルを読み込む 2. int配列にそれぞれの範囲の要素を加算していく 3 配列の要素の値の数だけ*を表示する。 順番に作っていけばいい。
292 名前:287 mailto:sage [2009/05/24(日) 21:47:55 ] >>288 ありがとうございます。 ・・・ボトルネックになるようでしたら挑戦してみます。
293 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:49:47 ] float A[4][21]; でA[2]とA[4]を入れ替える方法教えてください
294 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:56:24 ] >>293 std::swap(A[2][x],A[4][x]) でxを0〜21まで回せばいいんじゃない?
295 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:58:01 ] for(int i = 0; i < 21; i++){ float t = A[2][i]; A[2][i] = A[4][i]; A[4][i] = t; }
296 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:58:36 ] 普通にmemcpy3回じゃない? ビットスワップでもいいけど
297 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:03:43 ] どうかなぁ。並列化考えたらmemcpyは不利な気がした。
298 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:09:07 ] どのデーター量なら>>295 が一番早い
299 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:14:08 ] d 一個一個交換する方法でやってみます こんな風にしてたんだけど何故か変な値になっちゃうんだよね。 memcpy(B,A[i],sizeof(float)*(n+1)); memcpy(A[i],A[i+j],sizeof(float)*(n+1)); memcpy(A[i+j],B,sizeof(float)*(n+1));
300 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:15:50 ] A[4][n+1]; B[n+1];としてね
301 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:16:02 ] クラスの2次元配列を用いるにはどう宣言すればよいでしょうか 具体的には、 class Complex { public: double re;//実部 double im;//虚数部 }; という複素数のクラスを用いて行列を作成したいのですが、メインで #define SIZE 5 int main(){ Complex **comp_mat; comp_mat = new Complex[SIZE][SIZE]; } のようにしますと(*)[5]型は**型に変換できませんとエラーが出ます。 どのようにすればいいのかわからないので1次元で宣言して以下のように アクセスしていました。(comp + i * SIZE + j )の記述がわかりにくいので 簡単にしたいのですが、よろしくお願いします int main(){ int i , j ; Complex *comp_mat ; comp_mat = new Complex[SIZE*SIZE] ; //compを(-1 , -1)の値で埋める for( i = 0 ; i < SIZE ; i++ ){ for( j = 0 ; j < SIZE ; j++){ (comp + i * SIZE + j ) ->re = -1.0 ; (comp + i * SIZE + j ) ->im = -1.0 ; } } ・・・・省略・・・・ }
302 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:20:57 ] >>291 ありがとうございます
303 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:42:23 ] >>293 std::swap(A[2],A[4])はどう?
304 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:52:58 ] C++で fout << "Hello World" << endl ; などでファイル書き込みができますが、 foutで複数ファイルへの書き込みを区別するにはどうすればいいのでしょうか FILE *f_eng_p , *f_jpn_p ; fprintf( f_p , "Hello World ") ; fprintf( f_s_p , "こんにちは 世界") ; のようにファイルポインタを2つ宣言してfprintfで行うのでしょうが、 fprintfは記述がめんどくさいのでどなたか知恵をお貸しください
305 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:54:40 ] すみません、上の f_p と f_s_p は以下の間違いです FILE *f_eng_p , *f_jpn_p ; fprintf( f_eng_p , "Hello World ") ; fprintf( f_jpn_p , "こんにちは 世界") ;
306 名前:294 mailto:sage [2009/05/24(日) 23:04:25 ] >>303 配列へのポインタだから無理だろ。 だから>>294 を提唱するぜ。
307 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:04:51 ] >>304 出力ストリームを複数持てばいいだけじゃないの?
308 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:15:46 ] >>303 それだとエラーでちゃいます。swap(A[2][x],A[4][x])の方法で上手くうごきました。 あと、すみませんがもう一つ質問お願いします。 void func(二次元配列を受け取る){ 処理 } int main(){ float A[x][y]; A[0〜x][0〜y]に値を代入; func(?); return 0; } ここで関数funcはA[4][5]でもA[99][99]でもどんな大きさの二次元配列でも 受け取れるようにしたいんですが、関数funcの宣言の引数と、main関数内で 関数funcに渡す引数はどのようにすればいいですか?
309 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:29:22 ] それは無理なので std::vector< std::vector< float > > 使っとけ
310 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:33:40 ] void func(float *a, int m, int n){ 処理 } int main(){ float A[x][y]; A[0〜x][0〜y]に値を代入; func((float*)A, x, y); return 0; }
311 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:34:59 ] ありがとうございます。無理なんですね。どうりで調べてもA[][5]とかしか出てこないわけだ C言語でしたいのでA[]にしてA[y*x+y]でアクセスすることにします。
312 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:45:01 ] >>311 前にも同じような質問が出ていましたが、最近のCの規格では void func (int m, int n, float a[m][n]) { 処理 } といった書き方ができますよ。mとnは呼び出し側で決められます。 【初心者歓迎】C/C++室 Ver.65【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1239326399/ の >>836 あたりからの書き込みにも情報があります。
313 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:57:32 ] >>312 これは知らなかった。でも、VS2008でやってみたらエラー出て無理だった
314 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:59:01 ] マイクロソフトはC99シカトしてます。
315 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 00:04:33 ] 0Xどうするんだろうね。 でも、C++/CLIはもはやC++なのかどうなのかも怪しいw
316 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 00:19:10 ] >>314 VS2010でauto、decltype、λ式、右辺値参照、static_assertは取り敢えず入れる 予定だそうだ それ以上のC++0x対応は今の所未定
317 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 00:29:27 ] C++ なんだから配列には vector 使おうよとか 配列の配列をポインタのポインタに置き換えられないことは 大概の教科書で懇切丁寧に説明しているはずなのでもう一度教科書読んでねとか 全力でマクロは避けろ( C++ Coding standards )とか なぜに FILE 構造体?とか いろいろ思った^^
318 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 00:37:58 ] >>317 その辺りはD&Eを読んでもらえば歴史的経緯がよくわかる Cは一人、いや二人の人間が独善で作った言語だが C++はコミュニティに属する数多くの人の意見を元に作られてる 中心人物は禿だったがもはや禿が一人で作ったC++とは絶対に言えまい
319 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 00:45:46 ] >>301 動的二次元配列の作成と削除は Complex **comp_mat = new Complex *[SIZE]; for ( size_t i = 0; i != SIZE; ++i ) comp_mat[i] = new Complex(); for ( size_t i = 0; i != SIZE; ++i ) delete [] comp_mat[i]; delete [] comp_mat; でも、C++でこんなことしちゃらめ。
320 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 00:58:46 ] >>319 なんでダメなの? 俺はよく使ってるぜ コンストラクタとデストラクタにぶち込んでおけば十分じゃん vectorを使う事もあるけど少なくとも速度が最大要求の 科学技術計算では>>319 の方法をよく使うぞ
321 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:13:03 ] 速度重視ならクラスで包んじゃダメでしょ。 ・・・それはさておき、C++のモダンなスタイルは可読性重視になってるからっていう弱い理由。 もちろん、わかって使う分には問題ないよ。
322 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:19:41 ] 「速度が最大要求」ならクラスはおろか関数呼び出しもNGでしょ^^ なにより new と delete 自体が遅い。 memcpy を使うほうが一般的。 どうしても C++ ライクに書きたいなら、せめて allocator クラス使おうよ。
323 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:22:42 ] memcpy じゃなくて malloc の間違いでした^^スマンコ
324 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:38:26 ] そもそも速度優先なら、そんなに頻繁にメモリの確保/解放はしない。 どうしてもって言うのなら、自前でメモリ管理する。
325 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:38:35 ] >>321-322 いや速度重視ならmallocもそのままでは使わないだろ。自前でプールとかしてさ。
326 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:41:30 ] だな。つか new 遅すぎ。
327 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:45:08 ] っていうかC++が速くない Cより5%遅いが開発の指標だったから
328 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:51:20 ] OCN規制で携帯でしか書けないのが辛いぜ。
329 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:53:35 ] 支援
330 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 02:56:08 ] これlj(x)の分子が0になっちゃうんだけど、これで合ってるの?
331 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 02:56:25 ] ttp://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B0%E3%83%A9%E3%83%B3%E3%82%B8%E3%83%A5%E8%A3%9C%E9%96%93 URL忘れてたこれ
332 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 06:04:25 ] なんか一気にレベル低くなってね?
333 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:36:57 ] ※スレを勃てるまでもない低俗なC/C++の質問はここでお願いします
334 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 19:27:15 ] C++で文字列を入力し、そこに指定されていた文字が含まれている場合、そうでない場合に分けて処理を行いたいです。 どう書けばいいでしょうか? 文字列はアルファベットなのですが、 指定するすべての文字についてif,elseifで判別するしかないのでしょうか?
335 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 19:31:35 ] >>334 そうだよ
336 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 19:45:53 ] >>335 ありがとうございます。 もう一つお願いします。 たとえば、 abddみたいな文字列があって、 先頭の1文字づつ判別していきたいです。つまり、 1回目の処理はaについて、 2回目の処理はbについて・・・ のような感じです。 どう考えればいいでしょうか?
337 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 20:29:58 ] 何をどう判別するのかわからん。 具体的な入力例と、期待される結果を示してくれ。
338 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 20:45:19 ] >>337 アルファベットと書きましたが、半角英数すべてで、 accaと入力したとすれば aが1個存在するので coutで1と出力 cが2個存在するので coutで2と出力 aが1個存在するので coutで1と出力 みたいな感じです。 よろしくお願いします。
339 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 21:03:30 ] #include <iostream> #include <string> using namespace std; int main(){ int n = 0; string s; cin >> s; for(int i=0; i<s.size(); i++){ n++; if(s[i]==s[i+1]) continue; cout << n << endl; n = 0; } return 0; }
340 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 21:40:58 ] ファイル操作にはいろいろとエラーチェック用のメソッドが用意されてますが、例外機構をつかわない理由はあるのでしょうか?
341 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 23:11:06 ] 例外を使いたくない環境ってのが結構あるからかも
342 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:31:02 ] C言語そのものの質問とはちょっと違うのですが#ifdef,#ifndefに対応する#endifを見つけて、 どれとどれが対応しているかのコメントを追加するようなツールは無いでしょうか? //////////入力/////////// #if AAA ... #if BBB ... #endif ... #endif ///////////出力/////////// #if AAA ... #if BBB ... #endif //BBB ... #endif // AAA
343 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:16:37 ] >>342 知らないなぁ。 俺は大抵はコメントを毎回記載しちゃう派だし。 あるいはエディタの機能で対応する#〜に飛んだりするし。 良い課題として作ってみてよ。 そして是非とも公開してくれ!
344 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 17:04:28 ] charで配列の要素数を変数にしています。 cinで入力後、この要素数の最大値を調べたいのですがどうしたらいいでしょうか?
345 名前:馬牛 [2009/05/27(水) 17:14:21 ] C++です。 a=10,b=3,c=2として、!aかつb>cの戻り値、!aまたはb>cの戻り値はそれぞれどうなりますか? よろしくです。
346 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 17:15:56 ] felse true
347 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 17:33:15 ] 18時まで引っ張ろうぜw
348 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 17:44:52 ] >>345 君は、C++をやる前に離散数学を勉強することをお薦めする。 >>347 どこの誤爆だ
349 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 17:46:29 ] pc12.2ch.net/test/read.cgi/tech/1242655611/346 これだろ
350 名前:デフォルトの名無しさん [2009/05/27(水) 18:03:03 ] https通信をOSによらずに行いたいと思っているのだが、手の込んだことするのは 面倒になりcurl.exeを呼び出すことで解決することにした。 先頭の10KBとかは読めないと思っていたら対応していた。
351 名前:デフォルトの名無しさん [2009/05/27(水) 21:26:13 ] main{ func1(); } func1{ char array[100]; array[1] = 10; func2(); } func2{ char sum[10]; sum[0] = array[1]; } このようにプログラムする場合、func2にてarray[1]をセットする場合、 グローバル宣言するしかないのでしょうか? できれば、main内でfunc1が終了した時点でarrayで使用していた変数を消滅させたいのです。 メモリ使用量を少なくする意味で
352 名前:デフォルトの名無しさん [2009/05/27(水) 21:29:16 ] func2(array[1] );
353 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 21:31:49 ] >>350 何のことを言っているのだい? curl.exeはWindows専用ではないのかい?
354 名前:デフォルトの名無しさん [2009/05/27(水) 21:36:15 ] >>352 func1{ char array[100]; array[1] = 10; array[2] = 5; func2(); } func2{ char sum[10]; sum[0] = array[1]; sum[1] = array[2]; } こうだった場合は、func2(); の中は何になるのでしょうか?
355 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 21:39:11 ] >>354 参考書とにらめっこしてこい。 コードの書き方からしてお前は根本的に理解できていない。
356 名前:デフォルトの名無しさん [2009/05/27(水) 21:48:55 ] すみませんお願いします
357 名前:デフォルトの名無しさん [2009/05/27(水) 21:50:33 ] 353 SYSTEMの中身を対応するのに変える MACでもUNIXでもあるはず curl.hの使い方がわかればいいんだけど、メモリやファイルに読み書きするのに 専用の関数を用意しなければならず難しかった。 それなら直接exeを動かしたら簡明と思った。
358 名前:デフォルトの名無しさん [2009/05/27(水) 21:51:13 ] func2(array);
359 名前:353 mailto:sage [2009/05/27(水) 22:57:24 ] >>357 UNIX系でも〜.exeって名前なの?
360 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 22:59:06 ] >>354 お前ふざけてんの? 何言ってるの? スレタイ読めよ、ここはC/C++の質問部屋だぞ!! そんな謎の言語は知りません!
361 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 02:25:31 ] 質問します。 Windows環境で、とあるC++用ライブラリ hoge.lib があります。 このライブラリには、関数を呼び出すためのヘッダファイル hoge.h が用意されていますが、 実際のソースは提供されていないものとします。 また、ライブラリ内部だけで使われている関数は、hoge.h には記述されていないようです。 さて、このライブラリには名前空間は設定されていません。 そのままでは使いにくいので、Hoge::〜 という名前でライブラリの関数を呼び出せたら便利だと思いました。 この状況(*.h と *.lib のみ)で、ライブラリの関数に名前空間をセットすることは可能でしょうか?
362 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 06:25:28 ] >>361 君がhoge_ns.hとかいうヘッダを自作して、 hoge_ns.hでは namespace Hoge { inline int bar(int x) { return bar(x);//hoge.hの。 } //...etc } のようにラップしたらだめかな?
363 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 06:30:49 ] c/c++で仕事している人たちに質問です。 基本情報技術者試験って、最低限必要な資格ですか?
364 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 07:01:46 ] 5000円程度で取れるんだから、とっとけ。
365 名前:デフォルトの名無しさん [2009/05/28(木) 07:09:15 ] 生産性と資格には関連はないだろ。 未経験なら持っていたら考慮されるとか一時金や給料がすこしだけ良くなるとかだろう。
366 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 07:18:18 ] >362 ありがとうございます。 諦める決心がつきそうです。
367 名前:デフォルトの名無しさん [2009/05/28(木) 07:29:43 ] webページを解析したいのですが、HTMLを整形済みXMLに変換するライブラリはありますか
368 名前:デフォルトの名無しさん [2009/05/28(木) 07:57:22 ] 自己解決しました。 HTMLのパーサーがあるみたいでそっちのします。
369 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 10:06:12 ] くわしく
370 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 10:32:40 ] >>366 C用のライブラリだったら namespace hoge { extern "C" { #include "hoge.h" } } である程度ごまかせるんだけどな。 それにusing hoge::hogedata_t とか#pragma comment(lib)とかも使って。
371 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 17:29:11 ] fstream& getLogFile() { static fstream logFile; return logFile; } として、非局所的なオブジェクトのコンストラクタ内でもログを取れる用にしたんですけど、 logFileの破壊と非局所的なオブジェクトの破壊はどちらが先に起こるか決まってるんですか? 非局所オブジェクトの破壊時にもログをとるのに使えるのか知りたいので。
372 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:02:56 ] フーリエ級数展開をするプログラム を作ったんだけど異常値しか出ないのでどこが悪いか教えてください ↓のプログラムの場合はf(x)=x [xが0-5] , 0 [xが5-10] で波長が10でループするような式 //最初にxの値を入力してから hani_suu = 2;//範囲の数 hani[0]=0.0; hani[1]=5.0; hani[2]=10.0; //(0〜5),(5〜10)という意味 double temp=0,temp_cos,temp_sin; for(int j=0;j<hani_suu ;j++)//以下a0の計算 for(double i = hani[j];i<hani[j+1];i+=0.1)temp += 0.1 * kansuu(i,j);//積分計算 ※kansuu(i,j)はjが0のときf(x)=x,1のときf(x)=0を返す for(int n=1;n<50;n++)//以下an,bnの計算 { temp_cos=0; temp_sin=0; for(int j=0;j<hani_suu;j++) for(double i = hani[j];i<hani[j+1];i+=0.1) //積分計算 { temp_sin+= 0.1 * kansuu(i,j)*sin((2.0*PI*i*n)/10); temp_cos+= 0.1 * kansuu(i,j)*cos((2.0*PI*i*n)/10); } cos_v[n] = temp_cos; //an sin_v[n] = temp_sin;//bn } temp = temp/2.0; //以下a0+Σ(ancos+bnsin) for(int n=1;n<50;n++) temp = temp + cos_v[n] * cos((2.0* PI * n * x )/10) + sin_v[n] * sin((2.0* PI * n * x )/10); //最終的なtempが答え 見にくいですがお願いします
373 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:05:24 ] 勉強用に、シンプルな多倍長加算を作ってるのですが もっとシンプルに出来ますでしょうか 効率は意識していません string add(string l,string r){ int carry=0; stringstream ss; if(l.size()>r.size()){swap(l,r);} reverse(l.begin(),l.end()); reverse(r.begin(),r.end()); int i=0; for(;i<l.size();++i){ unsigned int tmp=(l[i]-'0')+(r[i]-'0')+carry; if(tmp/10){carry=1;}else{carry=0;} tmp%=10; ss<<tmp; } for(int j=i;j<r.size();++j){ unsigned int tmp=r[i]-'0'+carry; if(tmp/10){carry=1;}else{carry=0;} tmp%=10; ss<<tmp; } if(carry){ss<<'1';} string ret=ss.str(); reverse(ret.begin(),ret.end()); return ret; }
374 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:40:36 ] >>372 感覚で読むとfor ( ; i<hani[j+1]; )が臭うコードに見える。 >>373 C++は、よくわからないが、やりたいことはなんとなく伝わる。 for()は、二つに分ける必要があったのかな。 似たようなことをしているから、for()のなかで、if()するようなコードが浮かびそう。 引数を参照にしたり、const char *foo = bar.c_str()で添字アクセスとか ただの高速化だけど。
375 名前:デフォルトの名無しさん [2009/05/28(木) 20:17:36 ] ヘッダファイルでプログラムソースファイルを分割することができますが ヘッダファイルも分割する方法があったら教えて下さい
376 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:20:20 ] ヘッダファイルはいくらでも分割できます。
377 名前:デフォルトの名無しさん [2009/05/28(木) 20:38:31 ] VC++2008を使ってるのですが 自動修復情報の保存ってのが左下にでてしょっちゅう重いです なんですかこれ
378 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:59:40 ] 事故解決 ttp://blog.goo.ne.jp/field_light/e/491cb15fde3d807c3d7a235f0a86eebb
379 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:38:47 ] 実際の数学みたいにxを数字にせずxとして計算するにはどうしたらいいですか? 例えば2x*3x=6x^2みたいな感じで計算して、あとで6x^2のxに色々な数字を代入 できるようにしたいんですが
380 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:54:57 ] 関数電卓のソースを探して見てみよう!
381 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 22:08:34 ] ある関数内でnewして得たアドレスを返り値にして それを外で受け取ったらそのまま、受け取らなかったらdeleteする みたいな記述はどうやったらできますか?
382 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 22:39:54 ] >>381 受け取らなかったらとは、どういう状態?
383 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 22:50:55 ] >>382 pHoge = allocHoge(); // OK allocHoge(); // 自動でdelete したい!
384 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 23:01:55 ] >>383 生のポインタじゃムリじゃね? スマートポインタを使うとか。
385 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 00:23:19 ] wrap_allocHoge( void* p )的なものを外側に作って p==NULLならそのまま削除 p!=NULLなら入れて返すとか
386 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 00:34:41 ] >>383 C++なら>>385 に引数無しの関数をオーバーロードするのもアリだと思う
387 名前:372 mailto:sage [2009/05/29(金) 04:19:06 ] >>372 では for(double i = hani[j];i<hani[j+1];i+=0.1)temp += 0.1 * kansuu(i,j);//積分計算 こんな風に小さい範囲を刻んで積分計算してるんですが もっと精度を上げたり計算量を少なくするためにはどんな方法がありますか?
388 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 05:51:59 ] >>387 完全にスレ違いだろ。 数学スレに行ってくれ。
389 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 07:16:23 ] RPGの戦闘部分を作っています。 FFみたいなアクティブタイムバトル(パラメータのすばやさに毎秒1ずつ足して行き、規定値になったら行動) というものですが、勝利判定はどこでどういう風にすればよいでしょうか? 行動が終わった時に、goto文で戦闘部分の処理を抜け出すのが一般的でしょうか?
390 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 07:24:55 ] goto文が一般的じゃない。break使え
391 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 07:48:35 ] >>390 ありがとうございます。危うく道を踏み外すところでした
392 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 19:50:28 ] STLにupper_boundとlower_boundってありますが lower:指定した値"以上"の値が最初に現れる位置を返す upper:指定した値"より大きい"の値が最初に現れる位置を返す となっていて、どちらも指定した値以上の値が帰ってきます。 そうではなくて、指定した値を超えない最大の値を得たい場合 アルゴリズムを組み合わせたりして それを簡単に行うような方法ってありますでしょうか 具体的に言うと 1 7 10という列に対して upper/lower_boundに値2を与えると どちらも7が帰ってきますが、 1が帰ってくるアルゴリズムはありますか
393 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:06:26 ] デクリメントすれば?
394 名前:392 mailto:sage [2009/05/29(金) 20:24:57 ] 自己解決しました find_if(v.begin(),v.end(),bind2nd(less<int>(),n));
395 名前:392 mailto:sage [2009/05/29(金) 20:38:47 ] すみません、解決していませんでした デクリメントってこういうことでしょうか vector<int>::iterator it = lower_bound(v.begin(),v.end(),n); --it; //ここ(*) int lower = *it; 確かにこれで期待した動作はするのですが ちょっと気になるのは (*)の箇所でイテレータが範囲外、例えばitが最初の要素だったりした場合 どう範囲チェックすれば良いのでしょうか if(it)やif(it!=NULL)などは型チェックが通りませんし
396 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:07:16 ] begin()でもrend()でも使えばいいじゃない
397 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:43:34 ] includeファイルが増えてくると面倒なので include_iroiro.h---------- #include "foo.h" #include "bar.h" ・ ・ ・ #include "hoge.h" ---------------------- のように、よく使うものを全部includeするヘッダを使ってます この場合includeしたcppで実際には使わなかったクラスなども無意味にコンパイルされるんでしょうか?
398 名前:デフォルトの名無しさん [2009/05/29(金) 21:46:39 ] .h ということならYES
399 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:55:46 ] そうなんですか・・・ショック!
400 名前:デフォルトの名無しさん [2009/05/29(金) 22:05:33 ] プリコンパイルヘッダを使えばいい
401 名前:デフォルトの名無しさん [2009/05/29(金) 22:11:28 ] 450 step -1 until 1 do ってどういう意味ですか?
402 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:15:57 ] 450が1なるまで-1しながらdo以下の処理を繰り返す??
403 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:23:14 ] while(条件){ cin >> x1 >> x2; (以下if文) のように記述して、ループさせています。 EOFでwhileのループを終了させたいとき条件はどう書いたらいいのでしょうか? よろしくおねがいします。
404 名前:デフォルトの名無しさん [2009/05/29(金) 22:24:33 ] >>402 ありがとうございます。 ということは、「1が53になるまで+1しながらdo以下の処理を繰り返す」っていうのは、 1 step +1 until 53 do であってますか?
405 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:43:57 ] それC/C++じゃないじゃん。スレ違い
406 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:55:58 ] >>401 どこの言語だ。 最近スレ違いがおおいな。
407 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:46:34 ] VS2005proです #pragma region 〜処理を記述〜 #pragma endregion このおまじないは、どういう意味を持つのですか?教えてくださいエロイ人
408 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:48:14 ] >>407 折りたたみ機能
409 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:53:12 ] >>408 thx syntaxには関係ないものか、あまり役に立たない機能だな
410 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 11:24:58 ] templateを展開した後のコードを生成するようなフリーソフトってなんかいい感じのありますか?
411 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 11:39:14 ] すいません、質問です。 アマゾンで古本を販売していて 販売価格を簡単に改定できるソフトを探しています。 改定ソフトは.netフレームワークでプログラムが作られてるようなのですが プログラミングの知識がまったくない素人が売ってるのを購入せず 同じようなものを作るにはどれぐらいの時間がかかりそうですか? プログラム自体はアマゾンサイトから価格データを集めるのがメインで それほど難しくなさそうに見えるのですが。(素人なので直感です) 価格改定ソフトの一例です ttp://6plan.net/amazonpricechecker やっぱりめちゃくちゃ難しいんですかね?
412 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 12:01:41 ] >>411 とりあえず君のプログラミングスキルを教えてくれ。 ここはC/C++スレだからC/C++のスキルに関しても。
413 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 12:06:15 ] >>412 すいません、プログラミング知識はゼロです。 コンピュータ用語がわかる程度 良く言ってシスアドレベルだと思います。
414 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 12:08:47 ] >>413 0からだと果てしなく険しいと思う。 少なくともC/C++でやるなら相当苦労しそうだ。 他の人の意見も聞きたいところだけど、 やるにしてもせめて初心者にやさしい超高級言語で挑戦したとして 果たして何ヶ月かかるだろうか。。。
415 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 12:15:27 ] プログラムの取得にかかる時間は個人差がある。 独学ならなおさら。 半年で5つの言語を習得してプログラミング言語自体を作ってしまう高校生もいれば、 いくら頑張っても途中で挫折する人間も大勢いる。
416 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 12:18:48 ] >>415 >半年で5つの言語を習得してプログラミング言語自体を作ってしまう高校生もいれば、 だれ?
417 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 12:44:48 ] >>411 業務時間内に作ろうと思ってるならやめた方がいい よほどの天才じゃない限り買った方が安い
418 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 12:52:16 ] >>415-417 レスありがとうございます。 それほど難しいものなんですか。 おとなしく製品を購入することにします。 ちなみにシスアド程度の素人がプログラムを楽しもうと 思う場合、ExcelとかのVBAなら比較的簡単に習得できるものなんですか? あくまでも趣味程度しか時間はさけませんので。
419 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:16:37 ] 極端な例を出して話をはぐらかすやつって馬鹿なの?
420 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:04:51 ] char x1,x2;としてこれをwhileで繰り返し、if文でx1==x2の判定をしながら、 文字列のランレングス符号化をしたいです。 どう書けばいいでしょうか?
421 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 18:59:17 ] グローバル変数と性的変数ってどっちのほうがメモリ容量多く使うのでしょうか? また、staticを何個も書くのはまずいですか?
422 名前:デフォルトの名無しさん [2009/05/30(土) 19:00:00 ] 静的変数の間違いでした。
423 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 19:25:54 ] >>421 たいていの場合、グローバル変数とstatic変数は同じ扱いになる static変数を何個も書くこと自体は問題ない。 性能面、安全面で自動変数より劣ることはあるかもしれない。
424 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 19:32:11 ] グローバル変数のほうが、シンボル情報がオブジェクトファイルに含まれるので .objなり.oなりが大きくなる と全然意味の無いことを言ってみる
425 名前:デフォルトの名無しさん mailto:sag [2009/05/30(土) 19:43:53 ] ヘッダーファイルの値をいくら変えても反映されません。 どうやらパソコンを起動してから最初に実行した時の値が以後ずっと使われているようです。 PCを変えて実行してみましたが、同じ不具合が発生しています。 原因がわかるかたいませんか?
426 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 19:53:43 ] 日本語でおk
427 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:02:01 ] 説明しようにも不具合の原因がわからなすぎて、上手く説明できません。 ソースファイルの更新はしっかり反映されるのに、ヘッダーファイルの更新は最初の一度しか反映されないのです。
428 名前:デフォルトの名無しさん [2009/05/30(土) 20:05:58 ] その.hをincludeした.cで printfしてみれ それでも反映されないのなら、コンパイラのバグじゃね
429 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:14:43 ] どうやら値事態はしっかり反映されているようです。 しかし、その値と変数を比較する部分が正しく動作しません。 友人と全く同じプログラムですが、実行結果が違います。(アカウントは違います。)
430 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:20:44 ] ヘッダーを書き換えた後にそれをインクルードしているソースはコンパイルしなおしているよな? 一応OSと環境(VC++とかgccとか)よろ
431 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:20:56 ] 学校の課題は先生に訊きなさい
432 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:24:59 ] 複数あるソースファイルのうち、その比較部分があるファイルにprintf文をつけたところ、値の比較が正しく行われるようになりました…。 当然、友人らはこのソースファイルには手をつけなくても正しく動作しています。 全くもって理解不能です。
433 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:32:11 ] こんな言葉がある 『プログラムは思ったとおりに動かない。書いたとおりに動くのだ』
434 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:37:43 ] printf文をつけることで関係無い部分が正しく動くようになったのですよ。 理解不能(^q^)
435 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:41:57 ] >>430 の言ってることが答えな気がする printf文を加えたソースファイルをコンパイルしなおしたことでヘッダファイルの変更が反映されたと
436 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:47:47 ] >>435 別のソースファイルにつけたときは正しく比較部分が正しく動かなかったです。 (ヘッダーで設定した数値は正しく表示された) 日本語が不自由ですみません。
437 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:58:48 ] そんなときにはソリューションのクリーン→ビルド
438 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:11:50 ] >>436 いやだから、別のソースファイルの時は今回直したソースファイルをコンパイルしなおしていないんじゃないか?ってこと
439 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 22:44:16 ] とりあえず環境、ヘッダとかのファイル名と実行したコマンドを書け。
440 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:53:16 ] C言語の質問です。お願いします。 { int i; char ch; scanf("%d", &i); printf("%dです。\n", i); scanf("%c", &ch); printf("%cです。\n", ch); return 0; } というプログラムを実行し例えば4と打つと 4 4です。 です。 と表示されてしまいます。 何故、scanf("%c", &ch)は無視されるのでしょうか? 4 4です。 s sです。 と言った具合に表示させたいです。
441 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:59:06 ] www.google.co.jp/search?q=scanf+%89%FC%8Ds%95%B6%8E%9A
442 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:01:12 ] virtualってつけれるところは全部つけとけばおkなんですか?
443 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:12:38 ] >>440 4の次に入力された改行文字が、2回めのscanfで読み込まれるから。 scanf("%d%*c", &i); のようにして、改行文字を1回めのscanfで読み込ませればいい。
444 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:21:25 ] >>441 >>443 ありがとうございました。 おかげさまで解決しました。
445 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:25:31 ] >>442 副作用としては、 ・オーバーライドするつもりのない関数を間違ってオーバーライドする可能性がある ・多分、メモリ使用量が幾分増える ってのがある。
446 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 03:57:21 ] Cの乱数をsrandとtimeを使って毎回違うようにするのは わかったのですが、二つの乱数をほぼ同時に出す場合、どうすれば その二つの乱数をバラバラにする事ができますか? 具体的には戦闘ゲームなのですが、 コチラの攻撃が1~30までで、相手も1~30までの値で 攻撃してくるときに、1~30までの値を返す関数を srandで初期化してrand()%30+1の値を返すという風に作りました。 しかし、自分の攻撃値も上の関数でけっていし、それにほぼ同時 (すぐ次の行で)相手の攻撃値も決定しているのですが、そうすると どうしても自分の攻撃値と相手の攻撃値が同じになってしまいます。 時間がほぼ同時ぐらいのタイミングで処理するとどうしても このようになってしまうと思うのですが、どのようにすれば別々の値に できるでしょうか?よろしくおねがいします。
447 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 04:04:51 ] srandで初期化するのは、プログラム中1回だけでいい。 面倒なら、srand呼ばないようにすればとりあえずランダムな値は取れる。
448 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 04:16:45 ] 同じだったらもう一回randすればいいんじゃないの
449 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 04:30:35 ] 乱数シードに IP アドレスとかプロセス ID とかを加算 てか同じプロセス内のコードか??? なら初期化は一回だけであとは rand を呼べばいい
450 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 05:18:53 ] 質問なのですがお願いします。 c++、bccを使用しています。 char si[1000]; char sj[1000]; cin>>s1; cin>>s2; と二つの配列を作って、こんぱいる実行したら 「_ 」 とうまく入力待ちになりました。しかし、 char si[1000]; char sj[1000]; cin>>s1; cin>>s2; array[1000][1000][5]; では、 「 c:\bcc\test> 」 と表示されて、たぶん実行終了した状態になるのですが、 原因を教えてくださいませんでしょうか?おれがうんこなのでしょうか?
451 名前:450 mailto:sage [2009/05/31(日) 05:20:12 ] 全力で間違えました。 char si[1000]; char sj[1000]; cin>>s1; cin>>s2; int array[1000][1000][5]; でうまくいかないのでしあt
452 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 05:23:32 ] 領域確保しすぎてスタックオーバーフロー? 配列をグローバルにしてみよう
453 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 05:24:01 ] >>451 >int array[1000][1000][5]; これ単純に大きさを計算したら1000×1000×5×4=約19MBとなって スタックのデフォルトの大きさ1MBを超えるから異常終了する スタックを大きくするかstaticを付けてBSSに配置するかだな
454 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 06:35:37 ] Visual Studio 2005 Proですが array<String^>^ getFilterName_St(); Bitmap^ sample_grab(); Bitmap^ sample_grab2(Bitmap^ bmp); こういう書き方って、.NET対応CLIの実装ですよね、NativeなC/C++では使えないコードですよね。
455 名前:デフォルトの名無しさん [2009/05/31(日) 08:37:19 ] うん
456 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 09:06:28 ] >>455 Thx分かりました。 .NETのCLIって、C/C++のコードも混在することができるんですね、templateや関数オブジェクトがすらすら書けない俺には無用なものですね。
457 名前:450 mailto:sage [2009/05/31(日) 11:42:01 ] ありがとうございました。 mainの外に追い出したところ、何とか起動しました。 途中で強制終了されたけど。。。なんかでかい配列を扱うのはすごく大変ですね。 ありがとうございました!
458 名前:デフォルトの名無しさん [2009/05/31(日) 13:25:55 ] ある動的配列の要素全てが0以下である をループを抜ける条件としたいのですが、何か良い方法はありますか? 今はforで要素全てを判定させて、全て0以下なら 変数aを1、このaが1ならループを抜けるとしています
459 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 13:47:38 ] O(n)未満の方法はないんじゃないかな なのでその方法がベスト もし、STLに関数型言語のforallやexistsのようなものがあれば 記述的に楽は出来るだろうが やる計算的には>>458 の方法と同じになるし
460 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 13:49:41 ] Pstade.Ovenライブラリを使って oven::forall(xs, _1 <= 0) を終了条件にすればいい ただしxsは対象である動的配列の型で、かつ xsの型がsingle pass rangeのコンセプトを満たす必要がある vectorやlistはこのコンセプトを満たす
461 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 13:52:40 ] >>458 それでいいんじゃないの? あまりにも大量のデータを頻繁にチェックするというのなら、 配列に書き込む時点で値が0以下かどうかチェックするという方法もあるけど。 (配列への書き込みが大量に発生するようだと、これも効率的でなくなるが)
462 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 13:58:53 ] while( !isAllNegative(array, size) ) 〜; isAllNegative(int *array, int size){ for(int i = 0; i < size; ++i) if(array[i] >= 0) return false; return true; }
463 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 14:00:15 ] ああ、そのほうが良いな。アホだった あと、そのプログラム、条件>=じゃなくて>にしないと
464 名前:458 [2009/05/31(日) 14:31:22 ] ありがとうございます! 全部試してみますね
465 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:34:51 ] 他人の作ったクラスを継承するのって危険ですかね?
466 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:37:52 ] 継承する想定で設計しているならそうでもないんじゃないの。 まぁ作った奴のスキルがどれだけ信用できるかだが。
467 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:56:40 ] 自分で定義したクラスでも意識してないと Liscov Sutstitution Principleは簡単にぶっ壊れるのになにをかいわんやだ
468 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:06:56 ] プライベート継承しただけで壊れるんだっけ
469 名前:デフォルトの名無しさん [2009/05/31(日) 17:09:19 ] 女でプログラマは何割くらいいますか?
470 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:32:53 ] 一割いないね。
471 名前:デフォルトの名無しさん [2009/05/31(日) 17:42:00 ] トンクス
472 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:42:25 ] 女でプログラマで美人で性格いい人は何割ぐらいいますか?
473 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:55:38 ] 本当に人口の半分は女なのか疑わしくなってくる
474 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:59:10 ] 女優遇社会だからな。酷い男社会とは別の贅沢な環境で生活してるんだよ。
475 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:06:42 ] 主夫になりたい
476 名前:デフォルトの名無しさん [2009/05/31(日) 19:18:18 ] 前にも質問したんですが、メモリをファイルに見せかける方法か、 ramディスクを動的に生成する方法ありますか。
477 名前:デフォルトの名無しさん [2009/05/31(日) 19:21:25 ] DOSコマンドでファイルへ出力するものを直接メモリに入れたいのですが。無理でしょうか。 標準出力ではなく、ファイルへの出力の場合です。
478 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:06:40 ] mmapとか、MapViewOfFileとか、その辺を調べるといいかも。 ただし俺だったら出力関数にファイルに出力するかメモリに書き込むかを 指定するフラグをつけるけどな。
479 名前:デフォルトの名無しさん [2009/05/31(日) 20:08:14 ] >>476 メモリマップドファイルというのがある それ専用のWindowsAPIがあるから、他でもOSレベルのAPIがあるんじゃね
480 名前:デフォルトの名無しさん [2009/05/31(日) 20:12:08 ] ファイルをメモリのように扱うのではなく、 メモリをファイルのようにしたいのですが。 メモリを借りてきて、Zドライブを作るとかです。 普通のドライブのようにアクセスする方法はないですか
481 名前:デフォルトの名無しさん [2009/05/31(日) 20:14:51 ] えっ
482 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:14:55 ] ---hoge.h--- class Hoge{ public: メンバ関数; private: void *mMember; }; ----------- --hoge.cpp-- namespace{ struct Member{hoge hg}; //コンストラクタでmMember = (void *) new Member; アクセスは(Member *)mMember privateメンバ関数の代わりの関数; } メンバ関数; ----------- めんどくさそうだけど、カプセル化にこだわるならこんな感じのほうがいいんでしょうか?
483 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:18:54 ] >>480 RAMディスク Windows とかでぐぐれ。
484 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:21:30 ] >>482 こだわるならそんな感じだけど、そこまでこだわる必要があるケースは稀。
485 名前:デフォルトの名無しさん [2009/05/31(日) 20:21:33 ] RAMディスクをプログラムが動いているときだけ生成して、終了したら解放する方法はないですか? 既存のDOS EXEで、出力がファイルのやつを直接メモリに格納して高速化したいです。
486 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:25:52 ] RAMディスクつくるソフトを制御して 起動時にRAMディスク作らせて、終了時にRAMディスク開放させればいいのでは?
487 名前:デフォルトの名無しさん [2009/05/31(日) 20:29:44 ] 汎用性がある方法はないですか ソフトをインストールしてもらわないと出来ません
488 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:40:26 ] 単に、バーチャルなファイルシステムをかますだけでしょ。作った方が早い
489 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:43:05 ] USBカメラから画像を取り込みたいんですが、よくあるUSBカメラを使うソフト とかってどうやってるんでしょうか?
490 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:58:48 ] 既存のDOS EXEって何よ?
491 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:14:14 ] >>489 USBカメラがそうなっているかは分からんが、TWAINという共通化インターフェースがある
492 名前:デフォルトの名無しさん [2009/05/31(日) 21:19:51 ] カプセル化という物を勉強したのですが、一度しか使わない計算でも 関数を定義して別ファイルに値を渡し、戻り値をmainに渡すようにしたほうがよいのでしょうか?
493 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:22:02 ] ありがとうございます。TWAIN初めてききました 直接カメラのドライバをたたいてるのかと思ってたけど、こんな便利なのがあったんですね
494 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:34:23 ] >>492 必要に従いカプセル化する。何でもかんでもカプセルにして密閉化すると。 オブジェクト指向原理主義者になるw
495 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:39:04 ] >>492 突き詰めると決着が付かないような議題 個人的にはほんの数行(最大4行ぐらい)で、そこでしか計算しないんだったら埋め込む ただ >関数を定義して別ファイルに値を渡し、戻り値をmainに渡す が何を言ってるのかがわからなくて心配
496 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:51:10 ] >>492 それはカプセル化というよりはリファクタリングに関係してるように思う 俺の場合、ある処理を2回行うようになった時点で関数化する 逆に1回しか使う場所がないのに無駄に抽象化した関数は定義しないようにしている C++の抽象化能力では、これは常に出来ないのは若干悩みの種 カプセル化は、ライブラリのように 他人もそのコードを使うケースで意識すればよいと思う
497 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:54:50 ] >>477 出力ファイル名にCONを指定して標準出力へ出せるようにならない? それで動くなら、あとはリダイレクトできるでしょ。
498 名前:デフォルトの名無しさん [2009/05/31(日) 22:01:18 ] >>494-496 ありがとうございます 一人だから問題ないのですが、逆に指摘してくれる人がいないのが難点です
499 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:08:32 ] スタイルの問題で答えはないと思うけど、マクロってインデントするべきかな? #ifndef CLASS namespace Name { class Class { public: foo bar(); #ifdef _DEBUG hoge fuga(); #endif } } #endif #ifndef CLASS namespace Name { class Class { public: foo bar(); #ifdef _DEBUG hoge fuga(); #endif } } #endif 悩む・・・
500 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:26:03 ] #ifndef CLASS なんたらかんたら # ifdef _DEBUG なんたらかんたら # endif /* _DEBUG */ なんたらかんたら #endif /* CLASS */ とやるのが普通かな。 プリプロセッサディレクティブは、行の先頭を#で始めなければならない。 規格のどのセクションだったかもう覚えてないけど。 フリーソフトウェアのソースを読んで勉強したら良いかもしれない。
501 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:53:26 ] そう? 手元のANSI C言語辞典には#の前に空白類があってもよいと書いてあるけど。 もちろんそんな書き方誰もしないということは同意だ。
502 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:59:31 ] #if foo #if bar #include <momo.h> #else #include <taro.h> #endif #endif のような例はよくみかける。
503 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 01:25:41 ] 自分は普段はこう書くな。 #if foo # if bar # include <momo.h> # else # include <taro.h> # endif #endif 行頭に#があったほうが見た目わかりやすいと思う。
504 名前:503 mailto:sage [2009/06/01(月) 01:27:01 ] #if foo # if bar # include <momo.h> # else # include <taro.h> # endif #endif こうな。
505 名前:デフォルトの名無しさん [2009/06/01(月) 01:36:32 ] Windows98のメモ帳でのプログラムの実行の仕方を教えて下さい 因みに入力したのはC言語のprintf何たらの簡単なプログラムです
506 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 01:41:44 ] 書いたコードをここに貼り付けて、右下のボタンを押せ。 ttp://codepad.org/
507 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 05:53:03 ] >>502 俺もそう書くわ。 特に多いのが #ifndef __BORLANDC__ 高度な処理; #else 低度な処理; #endif みたいにコンパイラで処理を分けたりとか、あとはデバッグの時かな。
508 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 06:27:58 ] 1.下の多重ループで「A」は何行何列に表示されるか. for(j=1;j<=2;j++) { for(k=1;k<=3;k++) { printf("A"); } printf("\n"); } 2.下の多重ループで「A」は何行何列に表示されるか. for(j=1;j<=5;j++) { for(k=1;k<=4;k++) printf("A"); printf("\n"); } 1は2行3列で2は4行5列ですか?
509 名前:デフォルトの名無しさん [2009/06/01(月) 07:30:16 ] >>506 すみません ネットに繋げてないのでメモ帳での方法を教えて下さい
510 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 10:56:47 ] >509 別にメモ帳だろうが何だろうが、Cのプログラムには関係ないよ。 もちろん効率とかは違うだろうけど。
511 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 11:32:44 ] >>509 エスパーすると、コンパイラの使い方がわからないんだろう そもそも509はC言語のコンパイラを持っているのか? 例えばVC,BCC,GCCなど。
512 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:13:08 ] 持ってないだろうねえ。でも、 最初の一歩も自分で踏み出せない奴を どうにか歩かせたところで無駄じゃね?
513 名前:デフォルトの名無しさん [2009/06/01(月) 13:27:29 ] 最小2乗法によるm次の多項式近似を行うプログラムを教えてください 教えて xがー2の時yが3.02 −1の時0.98 0の時1.22 1の時2.16 2の時2.61 の時のです 出来ればソース全文書いてください
514 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:16:58 ] >出来ればソース全文書いてください >出来ればソース全文書いてください >出来ればソース全文書いてください
515 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:20:25 ] >>513 マルチすんなカス
516 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 16:18:56 ] 符号なしenumがほしいんですが、なにか代替案はありますかね?今は typedef const unsigned long uenum_t; uenum_t foo = 0, bar = 1, hoge = 2 ・・・; みたいに地道に書いて我慢してるんですが 省略記法が使えなくてめんどいし、メモリももったいない気がします
517 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:25:11 ] 半角テキストファイルを読み込んで使用する場合 空白文字も含めて一つの変数orクラスに格納したいんですが どうすればいいでしょうか? というかなぜ空白で一々区切られるのでしょうか? EOFでいいじゃないですか?
518 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:27:29 ] getlineでいいんじゃない?
519 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:49:17 ] getlineって一行だけじゃなかったっけ?
520 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:39:48 ] whileのループをEOFで抜けだし、出力するようにしたのですが、 出力後、プロンプトが出てきません。ctrl+Zで中止しないといけない状態です。 なぜ出てこないのでしょうか? よろしくお願いします。
521 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:44:30 ] ループにでも入ってるんじゃない?
522 名前:デフォルトの名無しさん [2009/06/01(月) 22:51:06 ] for(a=0;a<3;a++){ for(b=0;b<20;b++){ if(hensu<0){ 処理1; } else{ 処理2; } } } このようなfor文で、処理1もしくは処理2を実行したら 二つのfor文を一度に抜けたいのですが、どうすれば可能でしょうか? 処理のあとにbreakひとつじゃ後のfor文しかぬけないため、また処理1か2を実行してしまうので 困ってます。 goto文?というのはなるべく使いたくないのでそれ以外で何か簡潔にできますでしょうか?
523 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:55:08 ] 俺は普通に終了フラグを作る
524 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:56:20 ] 典型的な「gotoを使うと綺麗に書ける例」だな。 どうしても使いたくないなら ・ループ終了を示すフラグ用の変数を用意しておき、そのフラグの値をチェックして外側のforループから抜ける ・全体を関数にしてしまい、returnで抜ける とかどうか。
525 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:58:27 ] int end = 0; for(a=0;a<3 && !end;a++){ for(b=0;b<20 && !end;b++){ if(hensu<0){ 処理1; end = 1; } else{ 処理2; end = 1; } } } もしくは関数化して、returnで抜けるとか。
526 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:00:31 ] 男3人が結婚かよ
527 名前:デフォルトの名無しさん [2009/06/01(月) 23:09:54 ] C言語の本を買ってきて、printfなるものをWindowsのメモ帳に入力したけど、どうしたら実行出来るの?
528 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:12:53 ] C言語の本に書いてあるんじゃね?
529 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:13:08 ] そのC言語の本に実行までのやり方が書いてないなら、 それが書いてある入門本を買いに本屋に走るんだ。
530 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:13:10 ] そのC言語の本を1ページ目から読み返せ。 それで分からなければタイトル晒して燃やせ。
531 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:13:58 ] また多重婚だねっ♪
532 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:19:00 ] 2重のループを無理やり1重のループに変換する
533 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:20:52 ] aに3を入れる
534 名前:デフォルトの名無しさん [2009/06/01(月) 23:21:06 ] >>523-524 フラグをつくる場合、>>525 さんが書いて頂いたような フラグの仕方が一番コード書く上では綺麗なのでしょうか? 関数化もよさげですね。ただあまり関数を増やしたくないのもあるので 使わずにすむならそっちのが使いたいです
535 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:22:34 ] フラグと書いた俺はフラグが基本だ。他は好みだろ
536 名前:532 mailto:sage [2009/06/01(月) 23:25:30 ] 誰も思いついてない方法だから俺様の勝ち int a, b; for(x=0; x<60; x++){ a = x/20; b = x%20; if(hensu < 0){ 処理1; } else{ 処理2; } }
537 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:26:55 ] >>536 −見るー> >>532
538 名前:デフォルトの名無しさん [2009/06/01(月) 23:29:37 ] ・ループ終了を示すフラグ用の変数を用意しておき、そのフラグの値をチェックして外側のforループから抜ける あれでもこれだと、内側のループをまずbreakで抜けて、抜ける前にフラグをたてて で、抜けたあとに外側をそのフラグでみるということかな? でも外側のループから抜けるってどうやるんだろう
539 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:34:46 ] 例の通りなら hensuの比較bool だから a=0,b=0 時点で必ずループ終了を要求することにならないか?
540 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:35:11 ] つうか処理1もしくは処理2は初回で確実に実行されるんじゃないのかfor文いらなくね
541 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:36:36 ] 俺もそれ思ったwアルゴリズムが変
542 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:47:28 ] >>534 2重ループくらいなら、あんまり汚くはならんでしょ。たぶん。 実際の書き方は十人十色だろうけどね。 個人的には、forの条件式のところに書くよりは、新しくif〜breakを作る方が好き。 あと、もう1つ。 関数呼び出しにかかる時間が致命的で、少しでも減らしたいというのでもない限り 基本的に関数を増やす方向で進めた方がいいと思うよ。 >540-541 まあ、実際のコードとは違う可能性もあるし、そこは突っ込むほどのことでもないんじゃない?
543 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:56:17 ] >538 すごく単純に書くと for () { for () { end_flag = 1; break; } if ( end_flag == 1 ) break; }
544 名前:デフォルトの名無しさん [2009/06/02(火) 00:04:31 ] 書いてない 近所にそんな本置いてない Amazon登録(会員?)してない 晒した後に燃やす意味がわからない メモ帳ってテキストエディタだよね?C言語によるプログラムはどうやって実行するの?
545 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:07:04 ] Cの入門書なら絶対に書いてある。 万が一書いてなければ、それは間違いなく悪書なので燃やしても咎められないだろう。 ついでに、同じような被害者を出さないためにも、タイトルを晒しておこう。 くらいの意味。 要約すると、「1ページ目から読み直せ」ってことだ。
546 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:30:19 ] void型のWINAPI関数、ABC()があるとします。 void WINAPI ABC() と VOID WINAPI ABC() には違いがありますか?(voidが小文字か大文字か)
547 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:34:47 ] >546 どっかで、「VOID は void の別名ですよー」って定義されているかどうかによる。 結論から言うと、たぶんそうなってる。
548 名前:デフォルトの名無しさん [2009/06/02(火) 00:53:27 ] >>542 なるほど。関数を呼ぶと時間がかかるのですか。 かなり高い頻度で呼び出すのでできればはずしたいかな。 書いてなく申し訳ないですが、おっしゃるとおり実際は forで回している変数を処理1,2で使っているので何とか抜けないといけないのです。 見た目で行くとやっぱり関数ですねー。 一気にfor二個抜けるbreak2みたいなのがあればいいですね(笑)
549 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:58:34 ] >548 >関数を呼ぶと時間がかかる それこそ1/60秒間に1000回呼ばれ、マシンの性能の極限まで詰め込みたい……とかいうのでもない限り 普通に関数使っとけw
550 名前:デフォルトの名無しさん [2009/06/02(火) 01:00:46 ] goto文使ってたり多重ループがあるだけで、 コードレビューが合格にならないキチガイISOマンセープロジェクト って、この世からなくなればいいのに
551 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:29:22 ] >>522 for(〜){ for(〜){ if(hoge) break; } if(hoge) break; }
552 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:42:18 ] そのループ処理を関数に切り出して、 抜けたいところで return してしまうのも一つの手。
553 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:55:55 ] >551-552 実際の質問の直後のレスを見ようぜ
554 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 03:49:46 ] go to文は有害だよ どんなネストごちゃまぜなソースでもちゃんと普通に抜けだすコード書いたほうがいい go to文はあとから見た時可読性が著しく落ちる まじで
555 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 03:53:11 ] その部分をまるっと関数化してreturnで抜けだすのと gotoにそこまで違いがあるのかどうかw
556 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 04:01:36 ] for(a<3){ for(b<20){ if(){if(hensu){}else{},a=3;continue;} }} // bループの外に処理があるなら }if(a<3){ }} で十分じゃないの?
557 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 04:02:07 ] >>554 フラグ変数とか多用されるよりgoto使ってくれた方が追うの楽だし、 そもそもgotoつかえば深いネストしなくて済むことも多い。
558 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 04:05:36 ] フラグ変数を使って深いループを抜ける事は、仮想関数を 使うべき所にswitch文やif文で多重にネストした醜いプロ グラムを連想させる
559 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 04:18:03 ] 質問。 あるクラスから派生したクラスを作るとき、その派生クラスを強制的にシングルトンにさせる方法ってありますか? 派生クラスに自前でシングルトンパターンを実装するしかないのでしょうか? >goto まあ俺みたいな初心者は 少しは綺麗になるかも?と思ってもgotoを使わない方向で書いた方が安全ってことだな!
560 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 06:19:47 ] gotoが必要になる事ってほとんど無いんだけど。 ちゃんとクラス設計しているのか? ・・・と思ったが、C言語の場合はクラス設計もクソもないな。
561 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 06:26:12 ] gotoも使いようだよ ifとかwhileで書けるなら、gotoでなくそっちを使うべき、ってだけ いずれにせよクラスは関係ないな
562 名前:デフォルトの名無しさん [2009/06/02(火) 07:30:53 ] >>545 最初っから読んだが載って無いな 悪書なのは分かったが買ったからには100%使う予定 で、メモ帳はテキストエディタっていう程だからプログラムを実行出来るんだよね?ググっても良く分からんのだよorz
563 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 07:37:44 ] >>562 じゃぁ、初心者向けの本じゃ無かったんだろ。 自分のレベルにあった本を買えるようにしような。
564 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 08:04:55 ] もっと高級なテキストエディタじゃないと実行できないんだよ。
565 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 08:14:21 ] >>582 C言語なら、コンパイラというプログラムが必要だ。それをつかえ。 コンパイラにも色々種類があるが、C言語用のコンパイラな。
566 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 08:48:14 ] >>564 嘘は言っていないから困る
567 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:54:40 ] まあ基本は、「エディタは編集するものであって実行するものじゃない」
568 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 12:38:23 ] >562 念のため、本のタイトルを。
569 名前:デフォルトの名無しさん [2009/06/02(火) 12:59:30 ] わかた コンパイラは自力で探してみる 因みに購入したC言語本は www.amazon.co.jp/gp/aw/d.html/ref=mp_s_a_1/376-2471770-0113248?qid=1243914976&a=4797327928&sr=1-1 コンパイラについて書いて無かった気がしたけどなぁ
570 名前:デフォルトの名無しさん [2009/06/02(火) 13:00:55 ] あ、コンパイラはC++用でもおKなの?
571 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:02:32 ] / \ 、 ヽ\ ヽ . / , / ! ∨丁ヽ い | /二フ” / ! | ィ 「\ | ハ l | ,′ / l ! | / /j/ '. ノ, =、!// /j/ ヽ/ l い/ ,, =x j/ ′ 〈j/ /ヽ ト ._ \_〃 :.:.:.:.} /二フ” l l { 下 ̄ .:.:.:.: -‐1 ∧ / l l T ‐个 ._ ー' イ l| ニニ! l/ /| l l//下二千ヽ_l い ─┘ ' / .′ l,ノ\/// 小、|、\ヽ\ 「〉 Ul / / \/ U` \ヽl i r_| Ul l i ! ト ヽ |
572 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:29:57 ] >569 ちょっと軽く評判を調べてみたんだけど、「実行する方法が書いてない」「やたら間違ってる」なんて話がチラホラあった。 1から読み直せとか、さんざん疑ってしまってスマン。
573 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:31:19 ] >>571 質問者はケータイみたいだし、AAでの返答はしないほうがいいんでね?
574 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:37:19 ] >>570 今のC++コンパイラはたいていCも扱える
575 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:39:07 ] やっぱりぼうようか
576 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:42:25 ] >>573 もともと >>571 に、真面目に答える気があるとも思えん。
577 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:08:56 ] これは酷い labaq.com/archives/51093225.html
578 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:12:23 ] 夏休みまだだよな?
579 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:13:22 ] 年中夏休みですがなにか
580 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:25:09 ] VB、C#、C++だと.NETフレームワークの使い方って全然違ってくる? .NETフレームワークの用途毎の使い方が載ってる本がほしいので 「.NET Frameworkプログラミングテクニック―for Visual Basic/C#」 を買おうかと思うんだが今使ってる言語はC++なんだ・・・
581 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:46:50 ] C#がいいお
582 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:51:25 ] >cat test.cpp #include <iostream> template <typename _T> struct base { typedef size_t size_type; }; #ifdef CANNOTCOMPILE template <typename _E> struct A:base< A<_E> >{ #else struct A:base< A >{ #endif size_type s; }; #ifdef CANNOTCOMPILE typedef A<int> type; #else typedef A type; #endif int main(void) { type a; a.s = 10; return 0; } >g++ test.cpp >g++ test.cpp -DCANNOTCOMPILE test.cpp:10: error: ‘size_type’ does not name a type test.cpp:10: note: (perhaps ‘typename base<A<_E> >::size_type’ was intended) test.cpp: In function ‘int main()’: test.cpp:20: error: ‘struct type’ has no member named ‘s’ 頭がこんがらがってよくわからなくなってしまったのですが、 テンプレート版でsize_typeが継承されてないのはなぜでしょうか?
583 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 15:31:35 ] public base
584 名前:デフォルトの名無しさん [2009/06/02(火) 15:31:42 ] マイクロソフトの最新版らしいので安心して使用してみます べっかんこから見ているのでAAも安心です では、おいとまさせて頂きます
585 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 15:33:26 ] おとこは黙ってVisual J
586 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 16:33:41 ] 涙で>585が見えない
587 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 16:55:46 ] >>569 amazonの中身が読める所だけみたが 3ページの上の方に、プログラムの実行方法は 「処理系や実行環境によって異なりますから みなさんが利用している処理系のマニュアルなどを参照してください」 と書いてある まぁ、完全な初心者にはそもそも「処理系」って何?ってなるから これじゃつまづくな
588 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 18:56:19 ] 訳語の「処理」が大外れではないけど意味を採り難い語だからね 「処理乾酪」でヤバさ倍増な感
589 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:33:34 ] >>580 ライブラリ自体の使い方は同じだから、そういう目的ならVB/C#向けでも構わないと思う。
590 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:39:01 ] 同じ名前のメンバ変数を持ってるクラスを継承しちゃったらどうなるの?
591 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:50:55 ] >>590 継承の仕方による。 多重継承ならスコープ解決演算子で名前解決することになる。 多重継承でなく、単一の継承を繰り返した場合は 派生クラスのメンバ変数の名前が基底クラスの メンバで同名なものを「全て」隠蔽する。 これ以上は、実例を挙げるのがめんどくさいので、誰かよろしく。
592 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:34:12 ] すいません、VS2005で外部ライブラリをソースコードの中に記述して取り込む方法をど忘れしてしまいました、教えてください。
593 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:37:41 ] 絶対ど忘れじゃねーだろwwwww
594 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:40:00 ] pragman
595 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:06:16 ] そうだった #pragma comment(lib,"ws2_32.lib") これでよかった、thx>>593 ぶた野郎
596 名前:デフォルトの名無しさん [2009/06/03(水) 06:42:31 ] メモリ上のポインタをファイルポインタで開くことはできますか?
597 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 06:58:06 ] できません
598 名前:582 mailto:sage [2009/06/03(水) 16:54:38 ] よろしくお願いします。
599 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:59:15 ] すまん質問させて貰う 下のように定義した関数があり void funcA( const char *pszA, const char *pszB, const char *pszC ); funcBで色々と処理した後に、funcB内でfuncAを呼ぶと pszBとpszCのアドレスが変わってしまう pszBに渡されるアドレスが本来0x1000だとすると、0x1200となる デバッガで渡される直前の中身と、funcAで受け取った中身が違ってるのも確認済み これの原因で考えられるのはメモリ破壊のみだろうか? funcAとfuncBは別々のモジュールで実装されているんだが WinMainを呼んで他に処理をする前に すぐにfuncBを呼んでも、同様の現象が起きてる そこの機能だけを一つに纏めて実験すると問題無く動作する IDEはVC++2008 ExpressEdtion 正直訳が分からない。よろしくお願いします。
600 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:27:56 ] char const * (const char *) const なcharへのポインタ。アドレスは変わっても良い。データはconst。 char * const charのポインタがconst。アドレスはconst。データは変わってもよい。 char const * const (const char * const) const な char のポインタがconst。アドレス、データ共にconst
601 名前:599 mailto:sage [2009/06/03(水) 18:51:25 ] 自己解決した 構造が main.cpp dialog/dialog.cpp shell/shell.cpp resource/resource.cpp という風にモジュール分けしてて funcB内で別のモジュールの処理を呼ぶんだが そのモジュール(funcB内で呼ぶ処理)自体は結合度が凄い低い そのモジュールのヘッダに #include "../hogehoge.h" とアプリ全体の共通ヘッダをインクルードしたら解決した そのモジュール自体、他の機能全く使わないのに 何でこれで解決するのかが分からないが… スレ汚しすまない
602 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:56:43 ] >>601 アドレスは変わっても良いってコンパイラに伝えてるんだから、当然アドレスはいつか突然変化する。 今回変わらなかったのは単なる偶然。
603 名前:599 mailto:sage [2009/06/03(水) 19:17:16 ] 例えば void func( const char *pszHoge ) と定義して char szHoge[] = "hogehoge"; szHogeのアドレスが0x1000として func( szHoge ); とすると、func側のpszHogeは必ずしも0x1000ではないって事? 同じアプリのメモリ空間だから、アドレスが変わるっていうのは知らなかった でも、今回のはアドレスも変わって、中身も変わってた
604 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:18:46 ] すまん、記述ミスがあった ×pszHogeは必ずしも0x1000ではないって事? ○pszHogeが指すアドレスは0x1000ではないって事?
605 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:23:39 ] >>600 参照。 const char*だと、アドレスは変わる。 ついでに>>603 だと宣言の時点でconstついてないから中身も変わる。 コンパイラによって保証されるのは、funcがpszHogeの中身を変えないことだけ。
606 名前:599 mailto:sage [2009/06/03(水) 19:45:18 ] >>605 有難う ポインタで渡す限りアドレスは固定だと思ってたが、違うのか 今日アドレスと中身も変わったが、相当レアなケースに遭遇したみたいだ >>600 は凄い参考になった。有難う
607 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:53:48 ] ポインタ変数だろうがint型の変数だろうが関数に渡した値が勝手にかわってたらおかしいだろw
608 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:18:16 ] C++でゲーム開発してるんですが、敵ユニットや弾をリスト構造を用いて実装しました。 しかし、これらのオブジェクト同士の当たり判定の実装で詰まってしまっています。 解決策を知っている方が居たらお願いします。 それが駄目でも、二つの双方向リストを総当りで比較する方法などありましたらお願いします。
609 名前:デフォルトの名無しさん [2009/06/03(水) 20:24:55 ] >>608 サンプルプログラムそこらじゅうに転がってるからてきとーに参考にすりゃいいだろ 総当りの方法って、先頭から順番に見ていきゃ言いだけだろ
610 名前:582 mailto:sage [2009/06/03(水) 22:23:15 ] VC++2008 EEで試してみたところ、どちらのバージョンでも問題なくコンパイルされてしまいました。 動作も期待(?)通りです。お騒がせいたしました。
611 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:25:31 ] だめだったのはやっぱBCC無料版だったりするんだろうか
612 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:38:02 ] >>609 まぁ、ゲームの場合速度が重視されるから単純な総当たりなんてやらないで エリアを区切ってエリア単位で総当たりの判定するけどな。
613 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:42:02 ] まずすべてのオブジェクトの座標を確認して 適当な範囲ごとにソートして、それからその範囲内で当たり判定を行うってことかしら? 範囲の境界に位置するようなオブジェクトの場合はどうしたら…
614 名前:デフォルトの名無しさん [2009/06/03(水) 22:42:52 ] >>613 どっちでもいい、処理を減らすことが目的だから
615 名前:デフォルトの名無しさん [2009/06/03(水) 22:43:36 ] いや違うな >>613 じゃ根本的に間違ってる
616 名前:デフォルトの名無しさん [2009/06/03(水) 23:35:00 ] for(n=1; n<=100; n++){ sum += n; printf("1+2+...+100=%d\n",sum); } { }をつけると、1、1+2、1+2+3、・・・、1+2+…+100までの答え、 { }を外すと単なる1+2+…+100の答えが出るのですが、 これはなぜですか? 本には{ }内に1つの文しかないときには{ }を省略できるとだけ書いているのですが ここで{ }を省略するかどうかというのは重要な問題だと思うのですが
617 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:39:11 ] {} を省略した場合は for(n=1; n<=100; n++){ sum += n; } printf("1+2+...+100=%d\n",sum); って書いてあるのと同じ意味になるから。
618 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:41:42 ] > 本には{ }内に1つの文しかないときには{ }を省略できるとだけ書いているのですが だから、{ }がなければ for(n=1; n<=100; n++){ sum += n; } printf("1+2+...+100=%d\n",sum); とみなされる。
619 名前:616 [2009/06/03(水) 23:42:47 ] >>617 なるほど! 1つの文しかないときは{}を省略できるってのは、 条件式が1つの場合、って解釈してたんですが printfも何もかも含むんですね!わかりやすい説明ありがとうございます
620 名前:616 [2009/06/03(水) 23:44:20 ] >>618 ありがとうございます!
621 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:44:21 ] 関数で値渡しをするときに配列の要素全てを渡すことは出来ますか? それともそれぞれ引数に指定しないとダメでしょうか
622 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:47:37 ] ;が文の終わり。日本語の句点のような存在。 だからsum += n;で1つの文。 {}はその例外で、囲った部分全体で1つの文になる。 すまん話し過ぎたか。
623 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:51:15 ] >>621 C++ なら vector を使えばいいです。 Cでは直接配列を値渡しすることはできないので、 構造体の中に入れて、構造体を値渡ししましょう。
624 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:56:06 ] >>623 アリガトゴザイマす
625 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 04:23:23 ] 初心者です。 Cの参考書でメモリ関連の事が良く出てきます。 バイトとかビットとか2進数、10進数とか出てきますけど、これらはスルーしても 良いんでしょうか? HTMLで例えるなら#ffffffみたいな感だったので・・・。 これは覚えたほうがいいんでしょうか。 わけわからないんですが
626 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 04:54:02 ] スルーしちゃらめぇ。
627 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 06:24:57 ] >>625 C言語はそう言うのを扱うのが醍醐味というか、 それが分からないと全然まともに使えないと思われる。 理系なら分かるでしょ?がんばれ!
628 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:46:11 ] 授業で言うなら、最初の3回くらいまでは知らなくてもなんとかなりそうな気はするけど せいぜいそれくらいだよなあ。
629 名前:デフォルトの名無しさん [2009/06/04(木) 17:39:26 ] C++の質問です。 あるクラスの、あるメンバ関数からしか参照されないことが分かっている変数があるとします。 この関数が呼び出されたあとも、変数の内容を保持したい場合は、どのようにするのがスマートでしょうか? ・メンバ変数にする → 数が多いと、ヘッダに書く量が増えて見通しが悪くなるかも? ・呼び出し側で変数を用意しておき、引数でその都度渡す → 呼び出し側の手間が増える。数が多いとかなり大変。 ・staticを付ける → オブジェクトごとに個別の値を持てなくなる
630 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:42:17 ] そのときの変数の性質や役割による。 手間隙とかは関係ない
631 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:50:18 ] ああごめん、途中で質問を書き直したら 頓珍漢な内容になってました。 以下の3パターン以外に方法はないのでしょうか、で。 思いついた3つのうち、いずれの方法を取るにしても何らかの欠点があるので。
632 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:57:18 ] 制約がないなら好きにすればいい
633 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:58:41 ] >>629 ・メンバ変数にする → 数が多いと、ヘッダに書く量が増えて見通しが悪くなるかも? これがやっぱり一番自然でしょ。 と俺は思う。 いくつあるのかしらないが、そんなに多いならクラス内クラスを作るとかすれば?
634 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:58:43 ] ・関数オブジェクトを用いる。
635 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 18:08:35 ] C言語勉強中なんですが、宿題で 「ファイル名を自分で設定しそのファイルに、EOFを行うまで スペース区切りの二つの整数を何回でも入力できるようにし、 それをファイルに改行して記録しなさい」 というのがあり、 #include <stdio.h> int main() { int a,b; FILE *fp; char name[100]; printf("ファイル名を入力してください\n"); scanf("%s",name); fp=fopen(name,"w"); printf("数値を入力してください\n"); while(scanf("%d %d",&a,&b)!=EOF){ scanf("%d %d",&a,&b); fprintf(fp,"%d,%d\n",a,b); } fclose(fp); return(0); } というプログラムを作ったんですが、なぜか 数値を入力した際に記録される時とされない時があります。。。。 どなたか解決策を教えていただけないでしょうか?
636 名前:デフォルトの名無しさん [2009/06/04(木) 18:36:32 ] スレの皆様に質問です。 8ビットbitmapファイルを読み込み、各ピクセルに演算を加え、別ファイルとして出力するプログラムを作っています。 演算結果をint型の変数ifooに格納し、unsigned char型にキャストしてputしています。 ifooがunsigned char型の範囲外の値の時は、範囲の端の値を代入しています。 //fin,foutのファイル上の位置は適切な場所にあるとする for (int y=0 ; y<height ; ++y){ for (int x=0 ; x<width ; ++x){ int ifoo = fin.get()*A+B; if(ifoo<0) ifoo=0; if(ifoo>255) ifoo=255; fout.put((unsigned char)ifoo); ++i; } //bmpファイルの幅は4の倍数ピクセルとする } 先輩が組んだプログラムはこれの2倍以上速いのですが、AとBがハードコードされていて ソースコードは失われ、先輩本人は行方知れずです。。。 そのためA,Bを引数で与えられるように、イチから再作成しています。 1000x1000pxのBMPを一度に数千枚〜数万枚単位で処理するため このループ部分をもっと高速化したいです。何か良いアイデアは無いでしょうか。 ちなみにこの部分以外に目立ったループ箇所は無いです。
637 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 18:48:13 ] >>636 1. ループの中で ファイルIOするのは遅すぎるので、 一度メモリに全部読み込んでから変換→ファイルに書き出しを行う。 (全部読み込めないほどメモリが少ないのなら、一部ずつとか) 2. SIMDで複数pixelを同時に処理するか、OpenGL or DirectXのpixelシェーダ書く
638 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 20:50:01 ] >>637 早速ありがとうございます。とりあえず1を試してみます。 環境書き忘れて申し訳なかったですが、Windowsのプロンプトから呼ぶプログラムをgccで作っています。 2の手法はVisualStudio等を使って行う方法でしょうか? そのうち勉強してみたいと思います。
639 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 20:56:08 ] >>638 インラインアセンブラ
640 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 20:57:00 ] と外部ライブラリ
641 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:17:36 ] usingを解除することはできますか? namespace { using foo::CFoo; class CBar { public: void hoge(CFoo); }; } みたいにやってるんですが副作用があるのかどうか気になってます
642 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:21:29 ] >>638 最近だとインラインアセンブラのほかに<emmintrin.h>なんかの組込関数という手もある。 いずれにせよgccでも使える。
643 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:23:37 ] まぁまずないとは思うけど最適化オプションの存在は知ってるよね?
644 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:37:23 ] >>635 while(scanf("%d %d",&a,&b)!=EOF){ fprintf(fp,"%d,%d\n",a,b); } としてみるべし
645 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:40:54 ] デートは家でまったりしたいのですが 女性から見ればNGですか?
646 名前:デフォルトの名無しさん [2009/06/04(木) 21:43:37 ] Rubyを教えてくれるならOK
647 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:43:39 ] >>645 死ね
648 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:44:20 ] >>645 誤爆サーセン
649 名前:636 mailto:sage [2009/06/04(木) 22:05:38 ] >>639 アセンブラはマイコンで少々やったことがあるので挑戦してみます。 ただ後年に後輩が読めなそうなので、教授が許してくれなそう・・・orn >>>640 外部ライブラリというと、そういう処理が高速にできる ライブラリを他から持ってきちゃえということでしょうか? >>643 恥ずかしながら知らなかったです。 軽くググってみて、とりあえず -O3 をつけて変化を観察することにします。 プログラムを大学に置いてきてしまったので、有意な変化があれば明日報告します。 皆様アドバイス有難う。
650 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 22:46:58 ] あと、流行りの並列処理も最近のコア沢山なCPUには効くぞ。 gccならOpenMPが使えるし。
651 名前:636 mailto:sage [2009/06/05(金) 14:13:30 ] >ループの中で ファイルIOするのは遅すぎるので >一度メモリに全部読み込んでから変換→ファイルに書き出しを行う。 new で uint8(unsigned char)型の readbuf,writebuf を、int型のcalcbufを確保し 以下のように書き換えたところ、>>636 より約6倍も高速化しました。 fin.read((char*)readbuf,width*height); int i=0; for( int y=0 ; y<height ; ++y){ for( int x=0 ; x<width ; ++x){ calcbuf[i] = readbuf[i]*A+B; if(calcbuf[i]<0) writebuf[i]=0; else if (calcbuf[i]>255) writebuf[i]=255; writebuf[i] = (uint8)calcbuf[i]; ++i; } //bmpファイルの幅は4の倍数ピクセルとする } } fout.write((char*)writebuf,width*height); ○vector<uint8> foo でバッファを確保した場合 read()にchar* が渡せないからダメ。 という判断から、バッファはnewで確保しました。 ○ループ中の2回のif文をelse if でまとめ、比較演算回数の減少を図りました。 (気休め程度だと思ったので、これ単体の効果は未計測) 「先輩と互角」という目標を軽くクリアし、先輩の倍以上高速なプログラムになりました。 最適化オプション、インラインアセンブラ、並列化等もこれから試してみたいですが 目標クリアしたためとりあえず質問は終了させて頂きます。 スレの皆様ありがとうございました!
652 名前:デフォルトの名無しさん [2009/06/05(金) 14:20:51 ] アセンブラ化は効果なし。 もっとも時間かかるのはディスクアクセス。 Windowsであれば、Noバッファリングで読み込んでみて。 バッファリングありより倍以上の速度になる。 あと、一度にたくさん読み込んでも逆に遅くなる。 100M読み込むより、4Mや2Mずつのほうが速い。 データが仮想メモリ(HDD)に移動してしまう可能性が高い。 自分の環境では4M以上は速度は上がらなかった。
653 名前:デフォルトの名無しさん [2009/06/05(金) 14:24:21 ] ちなみに一度に一斉に書くのも遅くなる。 メモリ不足になるという理由で。 入出力バッファは、1M〜4Mくらいにして、使い回すのが吉。
654 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 14:27:13 ] 並列化もきっと意味ないだろうなぁ
655 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 14:27:21 ] calcbuf[i] = readbuf[i]*A+B; if(calcbuf[i]<0) writebuf[i]=0; else if (calcbuf[i]>255) writebuf[i]=255; writebuf[i] = (uint8)calcbuf[i]; ↓ tmp = readbuf[i] * A + b; if (tmp < 0) tmp = 0; if (tmp > 255) tmp = 255; writebuf[i] = (uint8) tmp;
656 名前:デフォルトの名無しさん [2009/06/05(金) 14:29:14 ] 2008-04-30 大容量ファイルI/Oの効率について 其の弐 FILE_FLAG_NO_BUFFERING 指定のないReadFile() -赤線- リニアにアクセス速度が低下していく。大容量ファイルのリードを行うことに対して Windows の I/O バッファリングアルゴリズムにパフォーマンスバグがあると思われる。 FILE_FLAG_NO_BUFFERING を指定すれば回避できるとはいえ、 コンシューマ市場向けにもTBクラスのストレージが出回ってる昨今、これは致命的な問題だと思う。 FILE_FLAG_NO_BUFFERING 指定のあるReadFile() -緑線- 2GiB の読み込みに概ね12-13秒台の高速でコンスタントなアクセス速度を誇る。(・∀・)イイ!! img.f.hatena.ne.jp/images/fotolife/w/wraith13/20080430/20080430231453.png d.hatena.ne.jp/wraith13/20080430/1209565632
657 名前:デフォルトの名無しさん [2009/06/05(金) 14:34:48 ] bmpではなくjpgなら、アセンブラ化は効果あるだろけど bmpはサイズがでかいからな。 処理内容が複雑 (ディスク読み込み時間と比べて速すぎない) なら並列化は効果あるだろけど 単純なものをスレッド化すると、スレッドの呼び出し時間がかかり、余計に鈍くなり得る。
658 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 19:59:01 ] implementationは実装と訳せばいいのですか?
659 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 20:33:17 ] >>656 バッファリングなしの非同期読み取りだともう少し速くなるのだろうか?
660 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 21:24:22 ] >>658 そうです^^
661 名前:658 mailto:sage [2009/06/05(金) 21:31:46 ] >>660 ありがとうございます。
662 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:54:30 ] 関数を呼びまくるとスタックオーバーフローを起こします。 スタックを増やす以外にどんな解決方法がありますか?
663 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:01:52 ] 関数オブジェクトをヒープに置く。
664 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:23:44 ] >>662 再帰呼び出しが原因ならば、アルゴリズムを工夫して再帰が深くならないようにする。 そうでなければ、ローカル変数域を減らす。特にバッファ。
665 名前:デフォルトの名無しさん [2009/06/06(土) 05:33:46 ] 配列の要素の組み合わせを出力したいのですが、 実装をどのようにするか迷っています・・・ 配列 int array[10] = {0,1,2,3,4,5,6,7,8,9}; 出力 {0}, {1}, {2}, {3}... {9} {0,1}, {0,2}, {0,3}... {8,9} {0,1,2}, {0,1,3}... {7,8,9} ... {0,1,2,3,4,5,6,7,8,9} このような出力を実現するにはどのようにコードを組めば効率が良いでしょうか?
666 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 05:41:25 ] ヒント:二重ループ
667 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 06:29:22 ] なんだよそのヒントw >>665 は一応実装はできるけど 最適な実装ロジックを聞いてるんでしょ。
668 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 06:47:20 ] いや二重ループが一番のヒントだろ
669 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 07:25:49 ] >>665 どういう規則で出力するのかさっぱりわからん。
670 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 07:37:10 ] 桁ごとに、組み合わせを順番に表示してくんだろw
671 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 07:56:47 ] >>665 効率はしらんが、適当に書いてみた #include <stdio.h> void combi(int n, int pos, int digit, int *array) { int i, j; if(pos==digit) { printf("{%d", array[0]); for(i=1; i<digit; i++) printf(",%d", array[i]); putchar('}'); } else { for(i=n; i<=9; i++) { array[pos] = i; combi(i+1, pos+1, digit, array); }}} int main(void) { int i, array[10]; for(i=1; i<=10; i++) combi(0, 0, i, array); return 0; }
672 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 08:23:21 ] printfのfはformattedのfだと聞いたことがありますが、 そもそもformattedってどういう意味ですか? 辞書を引いてもC/C++に適した訳語が見つからなくて。。。
673 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 08:30:09 ] 書式に則った
674 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 08:31:42 ] >>673 何の書式に則ったってことですか? 自分で指定した"hoge%spi%dyo"だとかそういうことでしょうか?
675 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 08:34:17 ] どう考えてもそれしかないと思う。
676 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 08:38:52 ] >>675 ありがとうございました。
677 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 08:45:47 ] >>665 main() { int array[10]={0,1,2,3,4,5,6,7,8,9}; int i,f,set; for(set=1;set<=0x3ff;set++) { putchar('{'); for(i=0,f=0;i<10;i++) if(set & (1 << i)) { if(f) putchar(','); printf("%d", array[i]),f=1; } putchar('}'); } }
678 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 10:20:23 ] >>677 これは良いな。出力順序が変わるのを何とかしようと頑張ってみたが俺には無理だった
679 名前:デフォルトの名無しさん [2009/06/06(土) 15:57:09 ] クラス内で動的確保した文字列に、ポインタ渡しでのアクセスは出来ませんか。
680 名前:デフォルトの名無しさん [2009/06/06(土) 15:59:10 ] >>679 できます
681 名前:デフォルトの名無しさん [2009/06/06(土) 16:04:03 ] これができません。なぜでしょうか。 #include <iostream> #include <string> using namespace std; class A { public: char *ch; A() { ch=new char [10]; strcpy(ch,"aaa"); } void test(char *p){ p=ch; } }; main () { A x; char *p; x.test(p); cout<<p; }
682 名前:デフォルトの名無しさん [2009/06/06(土) 16:06:26 ] 自己解決しました。 test(char* &p)にしたら良かったです。
683 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:11:36 ] char* &pって気持ち悪いなchar*& pがクール
684 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:16:08 ] いやむしろ、char *&p の方がクール。 理由は宣言構文の仕様上、char が specifier で *&p が declarator だから。 char* p; のように書く人は p と q をポインタにしたいとき char* p, *q; のように非対称に書いたりするので混乱必至。 っていうか宗教^^
685 名前:デフォルトの名無しさん [2009/06/06(土) 16:16:56 ] それより一引数で参照私の値変更ってのがさ!
686 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:23:07 ] >>684 > char* p; のように書く人は p と q をポインタにしたいとき > char* p, *q; のように非対称に書いたりするので混乱必至。 そうでもないよ。俺は普段1行目のように書くけど、2行目のようなケースは まず第一に「滅多に書かない」し、もし書く時は char *p, *q; って書く。 まぁ、宗教。
687 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:26:38 ] そもそも*&ってのが気持ち悪い ダブルポインタのほうがかっこよくない? まぁ、宗教。
688 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:29:15 ] Effective C++(第2版)には ** 使うくらいならどうして *& を使わないのかって書いてあるから *& でいいんじゃない?っていうか、>>681 のような質問って時々出てくるけど その設計にどういうメリットがあるのかしら? ポインタの管理はクラスの外でやってるし、そもそも内部の詳細を公開しているし・・・
689 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:29:33 ] 創価学会最高!
690 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 17:09:37 ] そこまでするならmulti_arrayみたいにラップするわ
691 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 18:20:00 ] デバッグしてるときにちょっと気になったんですが 他人の作ったメソッドや関数(例えばSTLやboost)が投げる可能性のある例外を調べる方法は仕様を読む以外ないんでしょうか? 強制的に例外を投げさせるオプションみたいなものがあるんでしょうか? コンパイラはVC++EE2008を使っています
692 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 18:27:02 ] つ grep
693 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:29:11 ] 複文マクロは do{〜;〜;〜;}while(0) とすると良いとききました。 しかしこれだと返り値を持たせられないため、関数形式のマクロが書けません。 複文マクロでありながら、返り値を持たせる方法はありませんか?
694 名前:デフォルトの名無しさん [2009/06/06(土) 22:34:00 ] インライン使っとけ。 複雑なマクロつかうよりいい。 エラーがわかりやすい。 実行時間が計測できるなどりメリット。
695 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:34:51 ] >>694 インライン関数などの知識は十分あるんですが、 どうしても変なマクロが書きたいんです。 マクロでしかできない変な処理なんです。
696 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:46:21 ] カンマ演算子でなんとかするのはもう考えた?
697 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:48:56 ] >>696 ありがとうございます。 もう考えてあります。 ただ、try catchブロックを盛り込みたく、それがカンマ演算子に合わせられないのです。。。 そしてマクロでしかできない処理というのは「マクロ引数から#で文字列化する」というような いわばリフレクション的な処理も含んでいる物だからです。 まあ無くても支障ないのですが、一般化して再利用可能にしておいたら便利かなと思って 変態マクロに挑戦しているところです。
698 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:50:26 ] 引数っぽくすれば #define FOO(X) do{;;(X)=hoge;}while(0)
699 名前:697 mailto:sage [2009/06/06(土) 22:55:03 ] >>698 ありがとうございます。 副作用を持たせるわけですね。 最終手段として考慮します。 しかし当面はもうちょっと挑戦してみます。 返り値はbool型になる予定でして、疑似関数の形の方が分かりやすいので。 関数テンプレートや文字列結合演算子、無名構造体など、 もちえる言語仕様の知識をフル活用してみます。
700 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:20:30 ] void func(float a[]){ int size=sizeof(a)/sizeof(float); } これでsizeに配列aの個数が入ると思ったのに1になる。何で?
701 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:31:22 ] aはfloatへのポインタに変わったから
702 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:31:55 ] サイズが分からないから void func(float a[10]){ とかにすれば10って出るはず
703 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:34:47 ] void func(float a[]){ としても void func(float *a){ となるから >>702 なんねーよばか
704 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:35:53 ] ありがとう。float[10]ってしないと駄目なのか でもそれだとint size=10;ってすることと一緒だから意味無いよね 受け取った配列の数によって処理を変えたいんですがどうすればいいですか?
705 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:38:08 ] それこそマクロっぽくするべき #define func(x) func_(sizeof(x)/sizeof(float)) void func_(unsigned size);
706 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:39:11 ] >>704 二引数にして大きさを渡すする ものすごい馬鹿みたいに思うかもしれんが memsetやらfreadやらあるように領域の大きさを渡すのは普通
707 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:39:19 ] void func(float *a, size_t n) { } #define numberof(array) (sizeof(array)/sizeof(array[0])) float foo[10]; func(foo, numberof(foo));
708 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:48:33 ] ありがとうございます。サイズを引数として受け取るしかないんですね 当たり前なんだろうけど、これにはちょっとびっくり。 普通に分かるものだとばかり思ってた
709 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:27:30 ] 商業ソフトだとメモリ確保とかでガチガチにtry catchするんでしょうか?
710 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:10:01 ] メモリ確保失敗はアプリレベルではどうにもならないからOSに例外投げてしまう。 という考え方もある。
711 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:14:08 ] 限界になる前に、そろそろメモリが足りません言い出すソフトもあるなぁ・・・・
712 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 02:22:58 ] OSに例外投げたらどうなるんだ?つか、そんなことできるのか?
713 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 02:57:00 ] 他人のソースコードを読んでいってもさっぱり頭に入ってきません。 何かソースコードを読む際のポイントとかあるんでしょうか。
714 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 03:00:11 ] コメントを読んだり、 読んでる関数の中身までは読まずに、大まかな流れを先に確認する。
715 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 03:37:32 ] >>713 doxygen(Graphviz)で関係のグラフ化オヌヌメ
716 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:54:46 ] テンプレートの型を一部の型に限定したい(たとえばunsignedの各種整数型のみ)場合は template<typename T> class HOGE; template<> class HOGE<unsigned char> {...;}; template<> class HOGE<unsigned short> {...;}; template<> class HOGE<unsigned long> {...;}; template<> class HOGE<unsigned int> {...;}; のように本体を書かずに、特殊化のほうをいちいち全部書くしかないんでしょうか?
717 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 11:53:12 ] traits
718 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 12:20:01 ] C++にて。 同じ副作用を保ったまま、式を文にすることは出来ます。 セミコロンを付ければ良いだけです。 例 x=3ならx=3;とすればよい。 しかし同じ副作用を保ったまま、文を式にすることは出来ますか? その際の式の値は何だって良いとして。 例 while(flag){++x;} を ???
719 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 12:50:35 ] >716 class の中身の方は型によって変わらないと仮定して、 #include <boost/utility/enable_if.hpp> #include <boost/type_traits/is_unsigned.hpp> template<typename T, typename Enable = void> class HOGE {}; template<typename T> class HOGE<T, typename boost::enable_if<boost::is_unsigned<T> >::type> { // 何か }; 他の型にするなら boost::is_unsigned を適宜変更すれば OK。 型をべた書きするなら↓なんてのも可能。 #include <boost/mpl/set.hpp> #include <boost/mpl/has_key.hpp> template<typename T> class HOGE<T, typename boost::enable_if< boost::mpl::has_key< boost::mpl::set< unsigned int, unsigned char >,T> >::type> { // 何か }; 中身も変わってくるなら >717 の通り traits でまとめる。
720 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:42:55 ] >>718 そこを関数にする。 そうすれば関数呼出式になる。
721 名前:718 mailto:sage [2009/06/07(日) 14:31:24 ] >>720 あーなるほど。 ありがとうございます。
722 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:39:05 ] for each 処理を自前で作りたい。 Sentinelを付加する方法でなんかいいアイデアない?
723 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:43:09 ] CかC++かくらい書け。 もっとも、C++ならSTL使え、だが。
724 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:57:23 ] もっと洗練されたライブラリが必要だと思うんだ
725 名前:722 mailto:sage [2009/06/07(日) 19:00:27 ] STL様 i=begin;while((function(i++),i)<=end); は偽物foreach i=begin; end+1=eoloop; while(function(i++)); ^^^^^^^^^←この部分
726 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:01:00 ] 一応Qt(C++用ライブラリ)にforeachはある それを参考にしろとは言わんが
727 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:22:20 ] インターフェースクラスがクールに感じたんだけど、これってなにかマイナス面はある? 今作ってるプログラムをこれ使って大幅に書き換えようかなと思ってるんだけど
728 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:39:06 ] >>727 ソースコードの量が増える 保守するとき読めればいいが そんな保証などない 将来性にかけて拡張性に優れた設計にするには 優れた設計能力が必要 後からの変更は1からのやり直し
729 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:48:20 ] >>727 Qtのこと? 俺もQtの設計は美しいと思ってるし、 いまさらMFCやろうとしてる(まずいないがw)やついたらQtを紹介してる マイナス面は、以前はGPLだったけどそれも変更になってLGPL 不満といえばdllのサイズぐらいかな? マルチOSなのもおいしいところ
730 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:56:43 ] >>725 std::for_eachもいやならBOOST_FOREACHはだめ?
731 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:02:31 ] >>729 そのインターフェイスじゃないだろ
732 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:11:32 ] QtってGUI専用だと勝手に思っていたが、 GUI以外の事も出来るの?
733 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:18:02 ] >Qt 何故か俺の中で、 フジコフジオのイメージが払拭できない
734 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:21:55 ] >>732 コンテナ、ネットワーク、XML、データベースとか一通り 機能制限はあるが組込み向けやXサーバーなしでもGUIが使えたり
735 名前:732 mailto:sage [2009/06/07(日) 22:24:51 ] >>734 すげーー マジかよ。 LGPLだと商用利用はしんどいか? Staticリンクしちゃうとオープンソース強制だっけ?
736 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:55:36 ] >>735 LGPLだと静的リンクはアウトだね 動的リンクなら商用非公開おk
737 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:03:14 ] LGPLだと、リバースエンジニアリングの拒否の禁止かな。
738 名前:732 mailto:sage [2009/06/07(日) 23:06:54 ] リバースエンジニアリングはどうせされるんだろうし そんなの禁止しても意味ないだろうけど・・・。 >動的リンクなら商用非公開おk これはつまりDLLを付属させて配れってこと?
739 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:11 ] >>735 強制じゃないけど staticリンクでその条件を満たすのはかなりしんどい
740 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:53 ] >>738 そうだよ配っていいんだよ
741 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:28:13 ] ってことは 「QtのDLLを付属させてスタティックリンクしないようにするかぎり」 無償でクローズドソースの商用利用が可能 ということか。 Qtいいな。 …ちょっと考えてみようかな。
742 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 02:12:57 ] >>715 分かりやすい解説サイト教えてください
743 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 02:20:00 ] >>742 ggrks 相当前からあるソフトで、情報も腐るほどあるぞ ちなみにそのウィザードもQtでできてる
744 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 03:44:59 ] C++のテンプレートについて教えて クラスとどう違うんだ?
745 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 03:49:36 ] 次元が違う
746 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:18:25 ] 違いすぎて逆に説明が困難だな。
747 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:19:38 ] 訂正 C++のテンプレートについて教えて やっぱクラスとの違いじゃなくてどういう時に使うのか どんなニーズによってできたのか教えて
748 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:27:42 ] 型が違うだけで同じような処理を何回も書かないで済むように
749 名前:デフォルトの名無しさん [2009/06/08(月) 06:46:52 ] 今年女子大に入ったばかりのゆきこと言います。 C++を学びたいのですが、どの本がお薦めでしょうか?
750 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:47:04 ] >>744 天と地ほど違うと思うけど。 [タイヤキを作るための金属の鋳型] と [食べられるタイヤキ] の違い。ぜんっぜん違う。
751 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:56:11 ] >>742 このスレに行け。 【コメント】doxygen【コンソメ】 ttp://pc12.2ch.net/test/read.cgi/tech/1212144627/ オススメは以下。 Graphviz ttp://www.graphviz.org/ doxygenの文字化け対策 - 僻地のプログラマkmt-t - わりとどうでもいい日記 1.1 ttp://d.hatena.ne.jp/kmt-t2/20090403/1238718375 Let’s use doxygen! ttp://www.fides.dti.ne.jp/%7Eoka-t/doxygen.html 無題ドキュメント ttp://www.sat.t.u-tokyo.ac.jp/~tetsuya/homeNew/research/Tips/doxygen.htm SourceForge.net: sakura-editor ≫ DoxygenComment ttp://sakura-editor.wiki.sourceforge.net/DoxygenComment Doxygenマニュアル ttp://www.doxygen.jp/manual.html Doxygen公式 ttp://www.doxygen.jp/
752 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 10:12:17 ] >>750 それクラスとインスタンスの違いでなくて? テンプレートはその鋳型を付け替えるとタコ焼にも今川焼きにもなる台とか
753 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 11:03:19 ] 型チェックしてくれるマクロとでも思えば。
754 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:56:01 ] なんだかtemplateってbindに似てるね
755 名前:デフォルトの名無しさん [2009/06/08(月) 13:03:26 ] コンストラクタの引数の値によって、データメンバの型を変える方法ってありますか?
756 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:24:48 ] >>749 女子供は股開いてればいいんだよ
757 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:34:28 ] 子供もかよ……
758 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:49:24 ] ぼくおとこのこだよ…
759 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:58:54 ] >>755 同じ親クラスから継承した子クラスという条件内であれば可能。 もしくは、void*で持たせれば、多分なんでもおkだけど。
760 名前:750 mailto:sage [2009/06/08(月) 16:12:44 ] >>752 そうとも言えるな。 なら俺方式で言うなら クラステンプレート=[タイヤキやら今川焼きやらを作るための金属の鋳型を作るためのナニモノか] クラス=[タイヤキを作るための金属の鋳型] インスタンス=[食べられるタイヤキ] とでも言えばいいかな。
761 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 16:55:30 ] 喩えなら何とでも言えるわ。
762 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:42:54 ] 名前空間について質問です。 名前空間 foo と、それとは別に名前空間 bar::foo があるとします。 このとき、bar の内側から、bar::fooでは無い方の foo を指定するにはどうしたら良いのでしょうか。 なお、環境はWinXP、C++、VisualStudio2005です。
763 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:46:20 ] ::foo
764 名前:762 mailto:sage [2009/06/08(月) 17:53:04 ] すみません、2つ質問するつもりで書いてませんでした。 あるクラス内に、別クラスをメンバ変数として取り込む時、 その別クラスが書かれたヘッダファイルをインクルードするのではなく、 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね? さて、その別クラスの名前が、名前空間 bar の下にあるとき、 namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか? >>763 ありがとうございます。 なんで思いつかなかったんだろう、自分。
765 名前:デフォルトの名無しさん [2009/06/08(月) 18:40:27 ] 便乗質問、テンプレートクラスを持たせる時って同じ方法使えるん?
766 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:48:37 ] 使えるん
767 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:51:59 ] >>764 あなたのいうクラスに名前が付いていないので 説明の便宜上 あるクラス=MyClass, 別クラス=fooとします。 まずは本題からちょっとそれた話から。 > その別クラスが書かれたヘッダファイルをインクルードするのではなく、 > 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね? あります。 しかし > あるクラス内に、別クラスをメンバ変数として取り込む時、 この場合は前方宣言Forward declarationだけでは足りません。 というのも、 class MyClass {int m_num;std::string m_str;foo m_var;} のようにメンバ変数としてfoo型変数を使いたい場合、 fooが不完全型なのでそのサイズがわからず、したがって MyClassのために確保すべき領域のサイズもコンパイラには分からないことになるからです。 前方宣言で足りるのはfoo型メンバ変数ではなく foo型への参照型メンバ変数やfoo型へのポインタ型メンバ変数、 あるいはメンバ関数の戻り値としてfoo型を使用する場合などです。
768 名前:デフォルトの名無しさん [2009/06/08(月) 18:54:54 ] ユーザが入力した数式を処理するプログラムを考えているのですが cin>>eq; #define function(x) (eq) cout<<function(1); みたいなことができませんんか?もしくは別の方法があったら教えてください
769 名前:767 mailto:sage [2009/06/08(月) 18:54:56 ] あとはまあ 前方宣言で足りるのは メンバ関数の引数の型としてfoo型を使用する場合 や typedefとかかな。 > さて、その別クラスの名前が、名前空間 bar の下にあるとき、 > namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか? それでいいと思いますが。 class bar::foo;とか書いても無理ですし、それ以外記述できないですよねぇ? もし有識者がいらしたらそっちを信用してください。
770 名前:767 mailto:sage [2009/06/08(月) 18:56:45 ] >>768 意味不明ですが、どういうことですか? プリプロセッサにより cin>>eq; cout<<((eq));//xは無視される として処理されるだけですが。。。
771 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:01:07 ] >>770 768に書いたのはあくまでイメージです。言葉足らずですみません 私がしたいことは引数にある文字列を数式として扱いたいのです もしくはcinで入力した式をプログラムで処理したいのですが
772 名前:デフォルトの名無しさん [2009/06/08(月) 19:02:27 ] ほんとは言語の問題じゃないかもしれないけど教えてください @double配列と、Aメンバがdoubleいっこだけの構造体の配列を読み上げる速度を比較するための コードを書いて実行してみたらAのほうが速かったです 環境はItanium、CentOS、GCC(C++)です これはなぜなんでしょうか?
773 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:04:08 ] そうなったから
774 名前:767 mailto:sage [2009/06/08(月) 19:04:19 ] >>771 言いたいことは分かりました。 C++の知識はどのくらいありますか? STLやBoost C++はご存じですか? C言語じゃなくてちゃんとC++らしいコードが書けますか?
775 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:05:31 ] >>772 不思議だわ。 ・・・最適化とかレジスタの割り付けとか、もう不確定要素に押されて結果が揺らいでるだけじゃないか? つまりどっちで書いても大差ないから好きな方で記述すればよか。
776 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:08:39 ] >>774 c++は初めて3か月くらいですが、STLはつかったものがあるので 簡単なものなら大丈夫だと思います。
777 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:09:25 ] >>775 計算時間半分くらいでした ちなみにこれに気づいたのは構造体メンバのアライメントに関する実験中でした コンパイラが賢くなりすぎてマニアックな知識も必要ない時代になったんですかねえ・・・
778 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:11 ] 普通のポインタがインスタンスを持ってるかどうか判別する方法はありますか? 現状ではポインタのゼロ初期化とdelete・0代入を徹底するぐらいしか手段が思いつきません
779 名前:767 mailto:sage [2009/06/08(月) 19:11:28 ] >>776 せっかくSTLの知識の有無を聞いたのですが、STLつかった実例が見つかりませんでした。 とりあえず適当なリンクを張っておきます。 以下の中で、上に挙げられている物の方が より優れていると思ってください。 letsboost::spirit ttp://www.kmonos.net/alang/boost/classes/spirit.html 数式解釈プログラム - uPage ttp://www-as.dse.ibaraki.ac.jp/umezu/?%E6%95%B0%E5%BC%8F%E8%A7%A3%E9%87%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0 七行プログラミング ttp://cm.xrea.cc/thread/program_001.html LISPですが 記号数式処理 ttp://www-antenna.ee.titech.ac.jp/~hira/hobby/symbolic/index.html
780 名前:767 mailto:sage [2009/06/08(月) 19:13:06 ] 追記。 >>776 Spiritで数式を解釈させるなら boost::spiritっちゃえ! ttp://tamachan.club.kyutech.ac.jp/%7Egridbug/spirit/ C++ Labyrinth ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html Spirit v1.6 ttp://boost.cppll.jp/BDTJ_1_30/libs/spirit/ これらが有名で質も高いと評判です。
781 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:14:34 ] >>768 これでイメージが湧いたらそいつは一流のエスパーだwwwww
782 名前:767 mailto:sage [2009/06/08(月) 19:17:06 ] >>778 >普通のポインタがインスタンスを持ってるかどうか 有効な領域を指し示しているかどうかとおっしゃりたいものと推測・解釈します。 結論から言えば、 普通のポインタでしたら、そんな方法はありません。 指し示す領域が有効かどうかなぞわかり得ません。
783 名前:768 mailto:sage [2009/06/08(月) 19:22:56 ] >>782 いろいろ情報ありがとうございます。
784 名前:764 mailto:sage [2009/06/08(月) 19:45:30 ] >>767 >>769 ありがとうございます >宣言 やっぱ namespace bar { class foo; }; って書くしか無さそうですね。 階層が深いとちょっと面倒かな?と思っただけなので、特に問題はありません。 >メンバ変数 確かに、メンバ変数を直接弄ろうとすると前方宣言だけじゃダメですよね。 まあ、素直にアクセサ付けれ、って話ですが。 >>765 確かに、 std::string とかは上記の方法じゃ出来ないですね。
785 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:11:52 ] C++の関数で文字列を参照渡しする方法がわかりませ ん &stringだと弾かれたし
786 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:16:09 ] >>785 参照の記述を勉強してください。 クラス名& ref=参照先; で記述します。
787 名前:785 mailto:sage [2009/06/08(月) 20:23:15 ] 参照の書き方って&nと違うの?
788 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:31:10 ] >>787 まずは日本語から覚えた方がよさそうだな
789 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:33:46 ] char &string; って書いてるんだったりして。
790 名前:786 mailto:sage [2009/06/08(月) 20:36:41 ] もう らちがあかないので ソースみせるか、 参照の記述を勉強し直すか、 名前空間を記述するか せめて少なくとも1つはやってみせてください。 なんかアドレスとごっちゃになってそうな予感もしますね。
791 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:39:25 ] int func(const char *string)
792 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:40:24 ] 途中送信。>791を参照渡しにする
793 名前:786 mailto:sage [2009/06/08(月) 21:04:14 ] >>791 それだけエスパーを強制しすぎです。 適当に答えるなら //before int func(const char *string); const char * const p="mojiretsu"; func(p); がアドレス渡し(ポインタ渡し)で、 //after int func(const std::stirng &string); std::string str="mojiretsu"; int func(str); が参照渡しです。 せめて前後関係の分かるソースを見せてください。 答える側が書いたソースの方が長いっておかしいです。
794 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:16:08 ] foo *p = new foo[bar]; delete p; がまずいのはわかるんだけど foo *q = new foo; delete [] q; ってーのはべつにやばくない・・・よね?
795 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:16:58 ] やばいよ。何が起きても知らないよ。
796 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:17:12 ] std::stringで書き変えるのは要求を満たしてない気がするなあ。
797 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:19:34 ] >>794 配列をnewしたときは、その配列のサイズなんかも保持しておくので 配列じゃないのにdelete[]だと、関係ない部分にアクセスする危険性がある……と教わったが、正確には違うかも。
798 名前:786 mailto:sage [2009/06/08(月) 21:21:37 ] >>796 彼は >C++の関数で文字列を参照渡しする方法 と言っています。 別にconst char*型変数を参照渡ししてもいいんですが、 もうエスパーするしかないからわかりませんよ。
799 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:23:02 ] >>794 だめな理由は処理系によりいろいろあるだろうけど、そんなの関係ない。 「仕様上認められていない」ってだけで 十分に鼻から悪魔が出てくると結論づけられます。
800 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:26:52 ] C++はめんどくさいな
801 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:36:37 ] >>800 なにを今更w
802 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:50:39 ] C++に限らず、多種多様の実装が存在する言語は多かれ少なかれそういう傾向にあると思う。
803 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:34:58 ] doxygen = デュクシジェン
804 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:06:17 ] doxygen destroyer
805 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:19:56 ] >>804 pc11.2ch.net/test/read.cgi/gamedev/1238520070/692 692 :名前は開発中のものです。:2009/06/09(火) 00:57:34 ID:2fI/sHFo 何言ってんだ。プログラマにまともな精神持った奴がいた試しなんてねえよ。 第一プログラマと精神科なんてほとんどセットなのに今更それを語るとか情弱以下だろ。
806 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:31:40 ] C言語をやりたいんだけど Microsoftのc++ExpressEdition ってのでもできますか? #include <stdio.h> int main(void){ printf("aaaa"); return 0; } みたいなのもちゃんとできますか?
807 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:09:32 ] >>806 Microsoft Visual C++ 2008 Express Edition の事ですね。 可能です。 ですが、最初はコンソールの方が分かりやすいと思いますよ。 C/C++初心者なら bcc5.5.1+bcc developer がなかなかオススメ。 エラーメッセージが分かりやすいので。 複雑なテンプレート等、まともなC++をやりたくなったらその時初めて Microsoft Visual C++ 2008 Express Edition gcc3.x, gcc4.x などを試せば良いかと思います。
808 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:17:19 ] まあ鼻から悪魔が出ることは無いと断言できる
809 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:45:37 ] C/C++というよりLinuxの質問になってしまうのですが、 mq_sendとmq_receiveでメッセージキューのパラメータに 任意の構造体を渡すことはできますでしょうか? 関数仕様ではchar*のみのようですが。 メッセージキュー以外の方式で別プロセスに任意の型の 値を渡す代替案があればそれでも良いのですが。
810 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:10:40 ] mmapとかpipeとか プロセス間通信は、Linuxの方で聞いた方がいいかもね
811 名前:デフォルトの名無しさん [2009/06/09(火) 16:13:22 ] 使ったこと無いけど 文字列にシリアライズして渡すんじゃねーの そんな雰囲気のある関数っぽい
812 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:07:30 ] >>809 昔は, 任意のバイト列に対するポインタは char* を使っていた で, 関数使用はその名残だと思うんだわ # kernel 内部の caddr_t とかの絡みもあるとは思うが……… 構造体とか配列とかもバイト列として表現できるわけだから, キャストすれば何でも可
813 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:08:35 ] >>812 × 関数使用は 〇 関数仕様は
814 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:27:02 ] なるほど、ありがとうございます。 mmapとかの共有メモリがお手軽そうですね。 >>812 やはりできるんですね。やろうとしてsegvでちゃったん ですが、できるとわかればもうちょっと調べてみます。
815 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:29:28 ] vectorのmax_size()って中の人はどうやって計算してるの?
816 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:51:40 ] bad_alloc出した場合って普通何をするもんなのかな ・APIとかで開いた画像ファイルとかを閉じる ・そのメソッドで確保成功した分のメモリを開放する ・そのメソッド内での仕事が完了したらbad_allocを上に投げる ・再帰的に開放作業を繰り返して、一番上でプログラム終了 とかでいい?
817 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 18:01:25 ] >>815 gcc 4.1は単にsize_type(-1) / sizeof(value_type)を返してた。 VC2008は、上の値とアロケータの最大サイズと比較してちっさい方返してた。
818 名前:デフォルトの名無しさん [2009/06/09(火) 19:52:52 ] void Initialize(){ ここで配列を5本動的確保 } そしてこの関数で使いたいんですがどうすればいいですか? void calc(){ } calcは何度も呼び出すのでcalc内で動的確保するのは無駄だと思いました。
819 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:03:38 ] template <typename _T,int _Size> class hoge { private: std::vector<_T> _vec[5]; public: void Initialize(void) { for(int i=0;i<5;++i) _vec[i].reserve(_Size); } void calc(void) { 以下略 };
820 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:09:32 ] vectorとかのコンテナのサイズを変えるときはtry-catch(bad_alloc)したほうがいいの?
821 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:17:52 ] >>819 できればSTLなしで・・・
822 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:48:36 ] >>821 お前の質問に対する答えが>>819 なわけだが、STLがその答えの本質じゃないことぐらい判るだろ。 コードを一から書いて欲しいなら宿題スレ行ってこいよ。
823 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:17:14 ] 内容がC++からちょっとずれますがお願いします。 大学ではじめてのC++で勉強しているのですが、phpの初心者向けサイトで コードをみたところc++と似ていて驚きました。c++はphpにも応用が利くと聞いたのですが、 C++をどの程度できるようになればphpでも簡単なwebサービスをできるでしょうか?
824 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:32:03 ] C++をいくら極めてもwebサービスはできんじゃろ。 なんせ標準ライブラリにwebに関するものはまったくはいっとらんからな…。
825 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:33:51 ] >>821 STLなしでとか何言ってるの? まさかSTLない環境でやってるわけじゃなくて知識がないだけでしょ? ちょっとで良いから勉強しろよ。
826 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:34:11 ] >>814 Linux の実装はしらんが, Solaris とか *BSD とかの実装だと, mq_send で msq_ptr からサイズ分 kernel 内バッファにコピーして, mq_receive で該当領域を読み出し側にコピーする で, kernel は該当領域にアクセス可能か否かの test 程度は行っている ので, とんでもない引数を与えると EINVAL か何かが返るはず segv が発生するのは, mq_receive で, msq_ptr として与えた領域サイズより 大きな msg_len を与えてスタック書きつぶしたときくらいじゃ内かな?
827 名前:デフォルトの名無しさん [2009/06/09(火) 21:34:16 ] 文字処理が面倒だけど cgiで起動すれば出来るんじゃね。
828 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:36:02 ] 0から99までの乱数を表示するプログラムを作ったんですが、コンパイルしたらまた新たな乱数を表示するにはどうすれば良いのですか?
829 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:42:11 ] >>828 乱数系列切り替えればええんちゃうの?
830 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:44:31 ] 時刻でも乱数シードに使えばいい
831 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:46:56 ] >>828 乱数の生成方法によって違うけれど乱数の種を設定できる仕組みがあるはずだからそれで種を変更する。
832 名前:デフォルトの名無しさん [2009/06/09(火) 21:50:14 ] >>829-831 ありがとうございます。 すいません。 かなり初心者なので、出来れば、詳しくお願いします。 今main関数の中が cout<<rand()%100<<endl; だけなんですが、何かつけ加えますか?
833 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:54:17 ] >>832 そうゆう話なら取りあえず処理系の名前を書け
834 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:54:55 ] ↓以下乱数の質について
835 名前:デフォルトの名無しさん [2009/06/09(火) 21:56:53 ] 箱を開けたら猫
836 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:58:12 ] >>833 bcc32です。
837 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:06:15 ] メルセンヌツイスタでぐぐるといいよ
838 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:10:23 ] >>836 けっして誉められた手法ではないんだろうが おそらく sland(time(NULL)) とかやっとけば? >>834 が期待してるように 用途に応じて生成される乱数の品質とかアルゴリズムとかが問題になる 置くの深い部分だけどな
839 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:18:59 ] 標準の乱数は大きな素数を割ってるだけみたいな単純な実装なので それをそのまま使うとカルドセプトサーガみたいなことになるかもね♥
840 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:25:25 ] >>838 ありがとうございます。 やってみます。
841 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:31:08 ] >>837 ありがとうございます。 参考にしてみます。
842 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:33:38 ] どういたしまして
843 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:59:13 ] 質問したいのですが誰かいますか?
844 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:00:12 ] います
845 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:11:32 ] じゃあ質問させていただきます。 今、作っているプログラムはあるファイルから特定の部分の値を読み込み 値だけのバイナリファイルを書き出すプログラムを作っているのですが。 sstreamを使い、値を変数に格納したいのですがfloat型だと格納できるのですが、 int型だと格納されません。 どうしてか教えてください。 ソース: stringstream ss(f_buf); int test[16 * 3]; //ここがint型だと値が入らない for(int i = 0; i < (16 * 3); i++){ ss >> test[(i * 3)] >> w >> test[(i * 3) + 1] >> w >> test[(i * 3) + 2] >> w >> w; } データ: 0;1;2;, 1;2;3;, :
846 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:13:48 ] >>845 追記 stringstream ss(f_buf);の下に char w; //記号を飛ばすための変数
847 名前:デフォルトの名無しさん [2009/06/10(水) 01:19:14 ] どうしてでしょう?
848 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:20:34 ] わからん
849 名前:デフォルトの名無しさん [2009/06/10(水) 01:27:14 ] どなたか>>845 の理由が分かる人いますか?
850 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:29:17 ] たとえば古いgccはstringsteamの中身に挙動不審なバグがあるので、それが原因かもしれない。 今やってみたらとりあえずgcc 4.1とVC2008はどっちもちゃんと動いた。 #include <iostream> #include <sstream> using namespace std; int main(void) { int t[3]; char w; stringstream ss("1,2,3,,"); ss >> t[0] >> w >> t[1] >> w >> t[2] >> w >> w; cout << t[0] << " " << t[1] << " " << t[2] << endl; return 0; } 出力 1 2 3
851 名前:デフォルトの名無しさん [2009/06/10(水) 01:34:22 ] >>850 さん、ありがとうございます。 環境をかくの忘れてましたね… 環境はVC2005です。 >>850 さんのソースも試してみましたがやはりだめなようです… 変数を作った時の不定な値が入ったままでした。 2008でビルドしてみようかな…
852 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:06:43 ] あるディレクトリ下にあるファイルを読み取ってから削除するという処理をしているのですが、希にコピー途中のものを読み取ってしまい、 思ったような動作が出来ない場合があります。アクセスしようと(もしくはアクセス中の)ファイルが、コピー中であるか否かの判断は 一般的にどのような方法で実装するのでしょうか。
853 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:07:49 ] >>852 OSは?
854 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:09:47 ] >>853 Windows 2000/XP です。コピー元は同じPC上の時もあれば、ネットワークを介して他PCからの場合もあります。
855 名前:853 mailto:sage [2009/06/10(水) 10:19:57 ] 俺はUNIX屋なので、後は誰かに任せた。
856 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:04:35 ] >>854 writeオープンしてからコピーする
857 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:55:21 ] FILE_FLAG_DELETE_ON_CLOSEフラグ付けて開くとか
858 名前:デフォルトの名無しさん [2009/06/10(水) 12:41:47 ] std::stringでTCHAR扱えないので std::basic_string<TCHAR>を使うってのはグーグル先生でわかったんですが、 入出力の方法が今度はわかりません。グーグル先生に聞いてもわかりませんでした。 std::cinやstd::coutの代わりにどのように使うんでしょうか?
859 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:19:21 ] //hoge.h class CHoge { public: void hoge(); }; //hoge.cpp #include "hoge.h" void CHoge::hoge() {・・・}; このCHoge::hogeを省略してhogeだけで書きたいんですけどそういうことはできますか? なぜかusing CHoge::hogeではできませんでした
860 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:22:27 ] 名前空間じゃなくてクラス名か。 全然「なぜか」じゃねーw どうしても面倒なら、ヘッダファイルに中身も書いたら?
861 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:30:00 ] C#を使えばおk
862 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:34:07 ] >>858 wstring & wcoutを使う。 >>859 #define hoge CHoge::hoge
863 名前:デフォルトの名無しさん [2009/06/10(水) 14:51:54 ] +とか+=とか、そういった四則演算関連の演算子オーバーロードを作成したいのですが、 ネットで見ると、戻り値が参照だったり実体だったりして、演算子によって違うみたいです。 どういう考え方で参照と実体の使い分けをしているのでしょうか?
864 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:58:39 ] 関数を抜けても壊れない参照を返せるなら基本参照返し。 一時オブジェクトを返さざるをえないなら泣く泣く実体返し。
865 名前:デフォルトの名無しさん [2009/06/10(水) 15:49:30 ] float型の変数がゼロかどうか(誤差も含めて)判断するときに、 1e-4fみたいな数字で比較を行っているコードを見たんですが、 こういう数字の記述の仕方(意味)を説明してるウェブページをどこか知りませんか?
866 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:53:30 ] 科学表記とかでぐぐる
867 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:32:36 ] 初歩的な部分ですが、 while(i--) 処理 は「iの値が評価され、処理を実行するか決定する」→「iがデクリメントされる」 while(--i) 処理 は「iがデクリメントされる」→「iの値が評価される」 ということで、i>0なら前者は処理が i 回、後者は (i - 1)回行われるということでよいのでしょうか。
868 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:34:44 ] コーディングの最終段階に入っていて、 なるべく見通しが良くなるように関数に処理を分割したりしています。 a,b,cという関数が有って各関数はうまく行けば0を返し失敗すれば1を返します。 aがうまく行けばbを,bがうまくいけばcを行いcがうまく行けば 最後に少量の出力が有ります。 そこで、今の段階はプロトタイプとして int main() { if(a == 0) { if(b == 0 { if(c == 0{ //some print } } } return 0; } となっているのですが、ネストが深くなりすぎているような気がしてなりません。 なにか良い方法が御座いましたらご教授願います。
869 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:37:21 ] if (!a && !b && !c)
870 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:41:00 ] !(a||b||c)
871 名前:868 mailto:sage [2009/06/10(水) 17:43:50 ] 見落としていた点が有りました。 追加で書きますがお許しください。 aが失敗すればプログラム終了 bが失敗すればプログラム終了 cが失敗すればプログラム終了 とそれぞれ行いたく思います。 よろしくおねがいします。
872 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:50:39 ] それは a が false を返す代わりに exit(1) を呼び出せばいいじゃないか^-^
873 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:57:00 ] >>872 そうなんですよね、一度そのような事を考えたのですが 言語はC++なのですが、 kmaebashi.com/bbs/bbs12.html というページを見かけてなんとなく怖くなってexit()を使わなくしたのですが、 実際どうなのでしょうか? よろしくおねがいします
874 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:09:17 ] どっちにしても>>869 や>>870 でOK。
875 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:11:32 ] >> 874 ありがとう御座います。 無事きれいになりました!! 感謝感激です。
876 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:52:22 ] C++にはJavaのObjectクラスに相当するようなものは無いんでしょうか? Java使い向けに書かれているデザインパターン本を読んでて 脳内翻訳するのに必要になったもので
877 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:59:05 ] 全然別人が話に食いつきます。 >>873 が言う >ISO/IEC 14882:1998 3.6.1-4 >exit 関数を呼び出すことは現ブロックを抜けずにプログラムを終了させることであるため、 >自動記憶域期間を持つオブジェクトは破棄されない。 >静的記憶域機関を持つオブジェクトのデストラクタ中から > exit を呼び出すことは、未定義の動作を引き起こす。 これって 巻頭言 2000〜 ttp://park1.wakwak.com/~y-nagano/200001.html ここに書いてあるとおりなんだろうが、 恐ろしいよねぇ。
878 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 19:37:24 ] もよもと exit はプログラムの異常終了時くらいしか使わんからなー。
879 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 20:17:11 ] >>858 自分で作ればいい。 #ifdef UNICODE # define tcin std::wcin # define tcout std::wcout # define tcerr std::wcerr # define tclog std::wclog #else # define tcin std::cin # define tcout std::cout # define tcerr std::cerr # define tclog std::clog #endif あと、mainの頭で、文字コード変換が行われるように指示しておく。 std::locale l(""); // 数値を取り扱うならstd::locale l(std::locale::classic, "", std::locale::ctype);のほうがよいかも。 tcin.imbue(l); tcout.imbue(l); tcerr.imbue(l); tclog.imbue(l);
880 名前:デフォルトの名無しさん [2009/06/10(水) 20:57:45 ] C++なら例外使えばいいのに
881 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:00:13 ] >>880 誰もキャッチできない例外をスローするってこと? みんなはそうしてるの?
882 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:03:14 ] 例外のよい使い方がいまだにわからん
883 名前:881 mailto:sage [2009/06/10(水) 21:14:30 ] >>882 俺は 関数の戻り値は正常値ならおk、 異常値を返す場合は-1とか0とかそういう値に限り、 不完全なオブジェクトを返すような形は とらないようにしている。 そして不完全なオブジェクトを返さざると得ない時に 例外を使っている。 ・・・でもやっぱり俺もわからない。
884 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:15:49 ] ttp://pc12.2ch.net/test/read.cgi/tech/1241438694/ ここの>>740 が妙な提案をしていたよ。 もっとも実際には出来なさそうって結論になったのだが。
885 名前:デフォルトの名無しさん [2009/06/10(水) 22:06:18 ] ABCが失敗したら例外発生させて、キャッチして適当に処理して return 0 すればいい。
886 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:24:46 ] VC++を勉強するのにお勧めの本ありますでしょうか? 初級〜中級くらいをめどに
887 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:29:14 ] いわゆるぺゾルト本。 Programing Windows 第5版。 定番なので。
888 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:32:10 ] >>886 VC++だから、MFCかも知れないが 普通にSDK使う程度なら、wisdomとか入門サイトから見るといいよ 俺はいろいろなサイト見て学んだ
889 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:33:06 ] >>887 www.amazon.co.jp/Programming-Windows-Microsoft-Charles-Petzold/dp/157231995X/ref=sr_1_1?ie=UTF8&qid=1244644307&sr=8-1 これのことでしょうか?すごくとっつきにくそうなんですが
890 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:37:56 ] 今時MFCはどうかと思うけど、お勧めの本はなさす。 中級以上なら、Effective C++のシリーズお勧め
891 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:38:07 ] この本は原著じゃなくても翻訳はまともだから大丈夫だよw プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版! (Microsoft Programming Series) (単行本) まぁ…とっつきにくい感じはするかなぁ。 まぁ、あくまで定番ってことで。
892 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:40:51 ] Effective C++はもちろん名著だけど、VCの勉強にはならんじゃろw
893 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:16:36 ] 質問です Cでファイルに書き込むときに fwrite(str, 1, strlen(str), fp); fwrite(str, strlen(str), 1, fp); とどちらが一般的ですか?何か違いは出てくるのでしょうか?
894 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:24:08 ] VC++で、いっぱい書店においてるような本はどうなのですか? 入門〜やや中級手前レベル?の内容くらいかいてるようにはみえたのですが 役に立たないのかな
895 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:56:43 ] >>894 プログラミング言語を全く知らない人が、いきなりVCに手を出す状況とかなら 決して悪くはないんじゃないかしら?
896 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:49:07 ] >>893 fwrite(str, 1, strlen(str), fp); に1票。 なんとなく2番めの引数は型のサイズ、3番めの引数はその個数って 思っている。
897 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 04:45:58 ] >>893 >fwrite(str, 1, strlen(str), fp); 1バイトをstrlen(str)分書き込む、成功した際の戻り値がstrlen(str) >fwrite(str, strlen(str), 1, fp); strlen(str)バイトを1回書き込む、成功した際の戻り値が1 結果は同じ ただ、意味のあるデータなら後者の方が意味的に良くない?
898 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:13:39 ] >>895 >プログラミング言語を全く知らない人が、いきなりVCに手を出す状況 そうとうな窮地だな。
899 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:24:29 ] #include <iostream> #include <list> int main() { std::list<int> nums1; nums1.push_back(4); nums1.push_back(6); std::cout << nums1[0] << std::endl; std::cout << nums1[1] << std::endl; return 0; } vectorで動いたソースをlistに変更してみたら動かないのでしがなんででしょうか?
900 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:52:45 ] エラーメッセージ読めよ
901 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:56:21 ] 「動かない」というのはこの場合、極めて曖昧な比喩表現でしかない。 比喩を使われても困る。
902 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 11:17:11 ] list<int>::iterator p = nums1.begin(); while( p != nums1.end() ) { cout << *p << endl; p++; } list はランダムアクセス子をもってない
903 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 12:24:09 ] www.geocities.jp/KY_webid/cpp/library/012.html なるほど了解した。ありがと
904 名前:デフォルトの名無しさん [2009/06/11(木) 15:57:58 ] gprofって、対象のプログラムが使うライブラリが全てスタティックリンク でないといけないのです? そういうのないですよね?
905 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:09:13 ] try { m_pInt = new int [N]; } catch { delete [] m_pInt; // <-するべき?それとも放置? }
906 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:28:03 ] >>905 m_pIntに予め 0 を入れておけばdeleteしても問題ない
907 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:22:38 ] >>905 そんなことよりboost::scoped_array使え。
908 名前:デフォルトの名無しさん [2009/06/12(金) 01:31:58 ] ちょっとした質問です。 二分木の高さと深さは違うものですよね。
909 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:37:26 ] 木の「高さ」とノードの「深さ」のこと?
910 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:46:07 ] 下から見れば高さ、上から見れば深さ、相対的な違いか?
911 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:57:06 ] 視点が違うだけで数としては同じになる
912 名前:デフォルトの名無しさん [2009/06/12(金) 02:04:36 ] たとえば、a(左部分, 右部分)とあらわす。 aはroot a(b, NULL) b(c, d) c(NULL, NULL) d(NULL, NULL) c,dはleaf という風になっているとします。伝わるかわからないですが・・・ このとき、a,b,c,dそれぞれの高さは2,1,0,0で合ってますか?
913 名前:853 mailto:sage [2009/06/12(金) 02:07:21 ] Fedora11落としてきたばかりなのに。 最近は自前でカーネルコンパイルするの減ったな。
914 名前:デフォルトの名無しさん [2009/06/12(金) 02:50:17 ] すいません。だれか僕が作ったプログラミングのデバッグしてくれませんか?お願いします。 初歩中の初歩です。
915 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 02:56:30 ] お断りします
916 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 03:04:38 ] とりあえずうp汁
917 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 04:12:14 ] 住所・氏名・連絡先も忘れずに。
918 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:55:46 ] codepad ttp://codepad.org/ ってところに貼れ。 貼ってどうすれば良いかは分かると思う。
919 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:53:27 ] コンストラクタの引き数の規約を与えるための仮想基底クラスを作ることはできますか?
920 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:00:43 ] codepad.org/WjzXeUiM エラーがでるのですが エラーを日本語にしてもらえないでしょうか?
921 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:02:45 ] >>920 翻訳サイトつかってみたら?
922 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:06:51 ] codepad.org/qHGkIKzL う〜ん
923 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:09:35 ] >>920 どこにエラーが? 警告なら出ているようだけど。
924 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:11:42 ] 三行目を void print( const char *c ) にすればいいよ。
925 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:13:25 ] >>920 ほい、エラーを翻訳してやったよ。 -- 誤りとして扱われる警告 --
926 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:13:06 ] R255 G0 B0の赤色の1ピクセルのbitmapのデータ読み込みで 54byte飛ばして色データを読み込んで10進数で表示させたのですが 0 0 -1 0 と表示されます。 0 0 255 0と表示されないのはなぜでしょうか?
927 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:22:52 ] >>926 charに読み込んでるとか。
928 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:32:45 ] >>927 charではダメなんですか? 1バイトだからいいかと思ったのですが char unchi[10000]; fread( unchi, 1, 5000, fp ); とやっています
929 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:36:07 ] あ、わかりました charって-127~128ですよね unsignedにすればいいですか?
930 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:37:24 ] できました。 お騒がせしてすいません ありがとうございました。
931 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:40:38 ] >>929 ビットマップに限った話ではないが typedef unsigned char uint8; とでもしておくと楽。 必要に応じてuint16,uint32,uint64もtypedefしといてもいいかと。
932 名前:デフォルトの名無しさん [2009/06/12(金) 15:51:13 ] char 配列に日本語が入っているとします。 改行コードが\nで統一されている場合に wchar_tにポインタでキャストしたときに文字化けしない方法はありますか?
933 名前:932 [2009/06/12(金) 16:05:38 ] キャストしたら\r\nでも文字が正しくなく・・・ windowsのwchar_tの文字コードは UTF16とか効いた気がします・・・
934 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:08:25 ] mbtowc(wchar_t *wc_str, const char *mb_str, size_t mb_scan_size);
935 名前:932 [2009/06/12(金) 16:10:43 ] ここに書いてありました。 EUCやSJISをwchar_t* にキャストして操作しても問題は出ませんか? 表示できないだけで。 ワイド文字 - Wikipedia wchar_tの内部表現もUnicodeである必要はない。 本来はCode Set Independet(符号化集合に独立)なのである。 しかし、Windowsでは16ビット (UTF-16)、 LinuxやMac OS Xでは32ビット (UTF-32)である。
936 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:30:16 ] >>935 文字列の終わりの0のサイズが違うんで、キャストしただけじゃ使えないと思う。
937 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:31:42 ] 質問です int *Array; int *pNum; int Num = 10; Array = new int[1]; Array[0] = Num; *pNum = Array[0]; デバッグすると、このコードの最後の部分でエラーが起きます どうすればうまくいきますか?
938 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:34:19 ] >>937 pNumもメモリ確保しないと。
939 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:38:29 ] >>938 ああ、なるほど ありがとうございました
940 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:04:46 ] ユニコードとかって3バイト以上の文字もありますよね? wchar_tは2バイトなのにどうやってこれを格納してるんですか?
941 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:25:10 ] >>940 >wchar_tは2バイト そんなこと決まってないっしょ? 言語使用上定められているのは sizeof(char)<=sizeof(wchar_t) だけじゃない?
942 名前:デフォルトの名無しさん [2009/06/12(金) 19:39:08 ] つ UTF16
943 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 20:44:25 ] 少なくともうちでは2バイトじゃないから大丈夫だなあ
944 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 20:55:20 ] cygwinはwchar_tが2バイトっていうイカれた仕様 なのでUTF-8が上手く使えない…
945 名前:デフォルトの名無しさん [2009/06/12(金) 21:04:42 ] windowsも2バイト
946 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:13:12 ] そうなのか、失敬した
947 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:55:53 ] UTF-8はマルチバイトだからchar*で扱うもの
948 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:09:33 ] 16bit整数二つ→32bit整数ひとつと変換して、配列の添え字に使いたいのですが 全部のインデックスからアクセス可能にしようとすると配列がでかくなりすぎてこまります なにかいい方法はないでしょうか?
949 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:12:12 ] inline static void foo(); と static inline void foo(); とではどちらが正しいですか? foo()はあるクラスの静的メンバ関数です。
950 名前:949 mailto:sage [2009/06/12(金) 22:16:02 ] あれ? MyClassの宣言中では MyClass { //etc static void foo(); //etc }; と書き、 そのヘッダの中(ただし宣言の外で)実装を書いて inline void foo() { //実装 }; と書くのがただしいですか?
951 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:19:34 ] どっちでもいい。 どっちかが正しかったら、憶えなくちゃいけないから大変だ。
952 名前:949 mailto:sage [2009/06/12(金) 22:22:17 ] >>951 ありがとうございます。
953 名前:デフォルトの名無しさん [2009/06/12(金) 22:23:49 ] >>948 つ map mapなら、int x=-1; でも、a[x]がエラーにならない。 google製のmapもある
954 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 23:52:12 ] >>940 Windows環境ではsizeof(wchar_t) == 2で、UTF-16を格納している。 昔はサロゲートペアはサポートしていないと聞いたような気がするが今はどうだか知らん。 多くの*NIX系環境ではsizeof(wchar_t) == 4で、UTF-32(UCS-4)を格納している。
955 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:08:32 ] int型の配列に整数だけを代入したいときにはどうすればよいのでしょうか? isdigitが数字かどうかの判定が出来るというので、使ってみたら、エラーが出ます。 これがソースの一部です。 for(i = 0; i < 10; i++){ while(isdigit(a[i]) == 0){ printf("%d個目の整数です。\n",i+1); fgets(buf, 10, stdin); sscanf_s(buf, "%d", a[i]); } } whileの中身をどうにかすればうまくいくと思うんですが。
956 名前:デフォルトの名無しさん [2009/06/13(土) 02:14:55 ] いろいろとだめだろ。 &がついてないし、入力後に確認すればいいものをループの上で判定するし たとえば変数xに数字が入っていたら代入すればいいし。
957 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:15:07 ] ソースの一部を貼るのはいいが、特に初心者ならちゃんと変数宣言とかも書いてくれ。 あとエラーメッセージもちゃんと書いてくれよ。 エスパー技能を発揮できる人間はそうそういないんだから。
958 名前:デフォルトの名無しさん [2009/06/13(土) 02:23:10 ] たとえば。 int inputsu(){ int x; do{ scanf("%d", &x); } while(x<0 || x>1000); return x; } int main(){ int i; int a[10]; for(i = 0; i < 10; i++){ printf("%d個目の整数です。\n", i+1); a[i]=inputsu(); } }
959 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:23:43 ] >>955 isdigitは、あるcharの1字が'0'から'9'までの数字に分類される文字かどうかを判定するだけ。 数値であるかどうかの判定とは違う。 a[i]に値が入るのはsscanf_sの時点。 そのsscanf_sは代入できたデータの数を戻り値にする。見るべきはこれ。 for (i = 0; i < 10; i++) { do { printf("%d個目の整数です。\n", i + 1); fgets(buf, 10, stdin); } while (sscanf_s(buf, "%d", &a[i]) != 1); }
960 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:36:13 ] >>956 入力後に確認ですか、ありがとうございます。 >>957 すいません、次から気をつけます。 visual C++ 2008EEでやっているのですが、ビルド時にエラーは出ないんです。 コンパイルしたときに Debug Assertion Failed! Program:...\Visual Studio 2008\Projects\~ Line: 56 Expression: (unsigned)(c + 1) <= 256 For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. っていうメッセージが出ます。
961 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:48:22 ] >>958 >>959 言われたとおりにやってみたら、 期待したとおりの出力結果が得られました。 ありがとうございます。
962 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:23:58 ] Webを参考に全ての順列を列挙するプログラムを作ったんですが、 これをnPkが列挙できるように改良するにはどうすれば良いですか 引数を一つ増やして(int k) 終了条件をt.size()==kとしてみましたが 予想よりも多く結果が出力されてしまってうまくいきません void perm(int p,vector<int>& v,vector<int> t){ if(t.size()==v.size()){ copy(t.begin(),t.end(),ostream_iterator<int>(cout," "));cout<<endl; } for(int j=p;j<v.size();++j){ t.push_back(v[j]); perm(p+1,v,t); t.pop_back(); perm(p+1,v,t); } } int main(){ vector<int> v(5),t; for(int i=0;i<5;++i){v[i]=i;} perm(0,v,t); }
963 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:37:58 ] C言語でマイコンからLCDに文字列を出力するプログラムで void PutString(char* point); void PutChar(char data); main(){ PutString("Hello,world!"); } void PutString(char* point){ while(*point){ PutChar(*point); ++point; } } void PutChar(char data){ //LCDに1文字出力し、カーソルをインクリメントする } 上記のプログラムが正常に動くのですが PutString("Hello,world!"); 文字列のリテラルとchar型ポインタは型があわないはずなのに なぜこの行がエラーにならず正常に動のでしょうか? マイコンというよりCの言語仕様の話だと考えたのでこっちに質問しました。
964 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:42:06 ] 俺も最近マイコンのプログラムに触れて思ったけど、 マイコン向けのコンパイラってANSIとかに厳密に追従してない感じだな ところどころ気持ち悪い
965 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:47:46 ] 標準出力? 何ソレ? みたいな環境もあるからな。 それはしゃーない。
966 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:05:57 ] >>963 "Hello,world"はchar[12]型。 それが配列からポインタへの変換でchar*になる。 型の問題はどこにもないぞ。
967 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:15:59 ] ヒント:リテラル
968 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:23:34 ] え?文字列リテラルは書き換えできなくてもchar*に変換できるだろ。
969 名前:963 mailto:sage [2009/06/13(土) 15:52:05 ] >>964-968 アドバイスサンクスです。 関数コール時に一時的にメインメモリ上にchar[12]の領域が確保され そのポインタが渡され、型の問題が生じない。という理解で良いですか。 char[12]が一時的に確保されたなら、その領域が解放されるのは PutString("Hello,world!"); を抜けた時でしょうか。
970 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:12:22 ] いいや、一時的な領域が作られることはないよ。 基本的に、文字列リテラルは予め用意された静的な領域に置かれるが、 そこへのポインタそのものがPutStringの引数として渡される。
971 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:20:01 ] 型安全についてCよりも厳しくなったC++では この変換を「死の変換」と呼ぶ。
972 名前:963 mailto:sage [2009/06/13(土) 16:26:04 ] >予め用意された静的な領域に置かれる 納得しました。 >>971 「死の変換」ですか・・・ 関数から抜けた後は、その文字列リテラルへのポインタがわからなくなり 永遠にアクセスできない領域になってしまうためそう呼ばれるのでしょうか。 char hello[12] = "hello,world!" と最初のほうに書いておき、 PutString(hello); とやるほうが望ましいでしょうか。
973 名前:デフォルトの名無しさん [2009/06/13(土) 16:28:43 ] C++でnamespaceの名前つけかたのルールみたいなものってあるんですか? Javaだと全部小文字でドメイン名をひっくり返したものとか、あるけど。 大文字で始まってるのよく見る気もするし。 ドットが入ってるのあんまり見ないし ドメイン名っていうのはかぶらないのでいい方法だと思うけど yahoo.co.jpだったらどんなのつけます?
974 名前:デフォルトの名無しさん [2009/06/13(土) 16:31:59 ] そういうのは、プロジェクトポリシーで決まるんじゃねーの
975 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:36:10 ] >>972 いや、それよりもPutStringの引数にconstつけろよ。
976 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:40:57 ] >>973 全世界にソース公開とかじゃない限り「絶対にかぶらない名前をつける」ってのは 重視しなくていいんじゃないかな。 ちなみに、自分はクラス名と同じ命名規則。
977 名前:デフォルトの名無しさん [2009/06/13(土) 16:44:55 ] プログラムのわかりやすさではstringだな。 生成と動作のコストがかかるが。
978 名前:デフォルトの名無しさん [2009/06/13(土) 16:52:01 ] 長い文字列、データをソース内に貼り付けるとコンパイル時間かかりサイズもでかくなる。 計算や短い文から生成できるならそれ使うべき。
979 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 17:29:48 ] 日本語の識別子を使う人なんてめったにいないだろうから namespaceで日本語を使えば被る確立はほとんどないだろう コンパイラ依存だけど
980 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 17:57:37 ] >>979 どう考えたって、 仕様違反のコンパイラ依存に確実になるくらいなら namespaceがかぶる危険があるってだけの方が まだマシだと考えるヤツが大半だと思うが。 ローマ字に止めるべし。
981 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:01:00 ] 和製英語のローマ字読み最強
982 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:19:57 ] BOOL bBlockConnect(char * pAddr, int iPort, unsigned int uiMsg); int iOnSocketEvent(WPARAM wParam, LPARAM lParam); BOOL bInitBufferSize(DWORD dwBufferSize); XSocket(HWND hWnd, int iBlockLimit); virtual ~XSocket(); int m_WSAErr; BOOL m_bIsAvailable; BOOL m_bIsWriteEnabled; void _CloseConn(); int _iSendUnsentData(); int _iRegisterUnsentData(char * cData, int iSize); int _iSend(char * cData, int iSize, BOOL bSaveFlag); int _iSend_ForInternalUse(char * cData, int iSize); メンバ関数の 始まりの文字が b -> return BOOL i -> return int と規則的に作られてるのですが _ (アンダーバー)で始まるのは何の意味があるのでしょうか?
983 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:24:17 ] 実装した奴が、そうしたかったから 言語仕様での意味はないはず。
984 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:39:53 ] privateなメンバとか。何か規則があると思う。 スコープがクラスだから、_[a-Z]+()なメンバ関数があっても他のスコープと識別子がかぶることはないが、 _[a-Z]+で始まる識別子は予約されているので、マクロで置き換えられたときに嵌まるおそれがある。
985 名前:デフォルトの名無しさん [2009/06/13(土) 19:00:49 ] STLのmapの容量はかってみた。 <int,int>で2の21乗個登録したら、127M使用していた。 一個あたり、64バイト。 通常の配列だと4バイト、16倍も消費量が多い。 もっと少なくなるやつある?