1 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 00:11:34.01 ID:nc/5PI4P0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part131 mevius.2ch.net/test/read.cgi/tech/1501295308/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 mevius.2ch.net/test/read.cgi/tech/1500329247/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
232 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:40:54.94 ID:se7vIA1E0.net] auto下痢症
233 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:55:08.38 ID:EF3aiwNW0.net] autoネタ大人気だな 俺もiteratorなんかじゃ迷わずauto使うけど ポインタすらちゃんと理解してないような奴が無闇にauto使ってるのを見るとね
234 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:57:53.27 ID:KmwbyHDC0.net] それ以上autoの話をするのはアウトだぞ
235 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 19:55:30.03 ID:se7vIA1E0.net] おぉっと
236 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 20:20:21.90 ID:8UQnYlEC0.net] 同じ話題ばかりで食傷気味、もう吐きそう。 …というこの書き込みも同系ネタで済まぬ。
237 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 22:27:19.25 ID:oyaJ8gC3M.net] >>229 auto を単なるシンタックスシュガーと言うのもどうかと思うが とりあえず使わないと言う選択肢はないわ
238 名前:片山博文MZ mailto:sage [2017/10/26(木) 22:29:12.27 ID:LcK6lNJBd.net] 暇潰しに https://github.com/katahiromz/TextCanvas でも見て行って
239 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 22:31:49.27 ID:6866r+hk0.net] 嘔吐嘔吐、うるせーなぁ(´・ω・`)
240 名前:デフォルトの名無しさん [2017/10/27(金) 04:04:41.73 ID:lyx9X4ms0.net] >>228 同感
241 名前:デフォルトの名無しさん [2017/10/27(金) 08:02:50.09 ID:O+M8u5Cb0.net] >>233 >>233 >>233
242 名前:デフォルトの名無しさん [2017/10/27(金) 08:33:50.52 ID:beF6mKBOd.net] C++使わないとか頭固すぎ 使えるところは全部C++だわ
243 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 08:39:18.11 ID:2A0a9mBA0.net] 単なるシンタックスシュガーでオーバーヘッドとか副作用無いしねw
244 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 08:39:47.11 ID:2A0a9mBA0.net] いやテンプレートは違うか
245 名前:デフォルトの名無しさん [2017/10/27(金) 08:41:10.57 ID:Aa1jtLeH0.net] 実は>>213 は、>>233 のパクリ
246 名前:デフォルトの名無しさん [2017/10/27(金) 09:37:02.86 ID:EP/R3fy90.net] ID:2A0a9mBA0 ←こういう馬鹿が本当にC++使ってるとは思えない。無職だろう。
247 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 09:50:50.86 ID:+sOx5VXfM.net] auto絶対使わないマンってややこしい型も、全部手で書いてるの? ET使うときとかどうしてんだろ。
248 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:00:22.45 ID:tbT2n0brd.net] テンプレートを除いた部分は単なるシンタックスシュガーだよ? o->vftbl->f(o, a) と書こうが o->f(a) と書こうが何の違いもない。 テンプレートはチューリングマシンとしての計算能力があるから別だけど。
249 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:25:02.18 ID:n3hllmLr0.net] >>245 ET使う時って評価するときか? auto a = b + c * d; これやるとautoの型は式テンプレートで、評価が起きないから困ったことになるぞ (まだ評価せずに組み合わせる場合は逆にautoが便利だけど) ET作るときや実装時は確かに型がややこしいけど、普通returnの一文で終わるから return {うんたらかんたら}; で済むと思う あと、ET周りの関数の宣言時をautoでやってしまうと、実装完了まで使用できないというのが足かせになると思うぞ
250 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 11:54:16.72 ID:2++1MvhW0.net] auto使うのって例えば template <class U, class V> auto func(U& a, V& b) -> decltype(a + b); みたいに戻り値の型が簡単に推測しにくい時に使ってるけどな
251 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:49:19.03 ID:+sWf4zsJ0.net] auto LocalFunc = [&]() { ... };
252 名前:デフォルトの名無しさん [2017/10/27(金) 22:31:31.38 ID:67YjQzLBM.net] >>248 そのautoは型推論のautoとは違う使い方だよね。 戻値の後置宣言都合によるプレースホルダ的な。
253 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 22:53:59.94 ID:cIkV9qHA0.net] 同じだろう
254 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 01:40:27.36 ID:rDr3prXm0.net] mapみたいな複数行にまたがるようなのを for( auto const & r: hoge ){} とかにまとめる用途にしか怖くて使えんな 意図しない型になってたけどたまたまコンパイルに通ってたとか 後で仕様変更とか根元の hoge 書き換え後にたまたまコンパイルに通ってたりとかで 期待したメソッドの動作にならなかったりとかされるとハマりそうで怖い
255 名前:デフォルトの名無しさん [2017/10/28(土) 02:17:51.25 ID:pC+TnRxI0.net] >>252 暗黙の型変換乱用しないかぎりそんな事ならんと思うが
256 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 08:28:41.62 ID:Jnrw/MWj0.net] テクノロジーに善悪は無い
257 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 08:44:41.02 ID:rDr3prXm0.net] >>253 暗黙の云々とかoperator=とかが怖いってだけ それに後から読み返した時、どんな戻り値が欲しかったのかとか autoだとわかり辛いって事がままあるし、autoはなるべくあちこちに散乱させたくない .NET方面のvarとかも気持ち悪いったらありゃしない・・・
258 名前:デフォルトの名無しさん [2017/10/28(土) 08:56:43.01 ID:JVsxHO5Xd.net] autoの数々の利点のほうが大きいからどの言語でも型推論は基本になってきてるな メイヤーズも言ってるしマイクロソフトも推奨してるし
259 名前:デフォルトの名無しさん [2017/10/28(土) 09:55:15.82 ID:QoaQu2To0.net] autoはどのように推定されるかを理解して使うもので、 断じてバカ用のヘルパーではない バカ自身はそれがわからないから変な杞憂に陥るってだけ
260 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 11:02:25.42 ID:J8kLZQh+0.net] バカだけどIDEさんが、IDEさんさえいてくれれば大丈夫だ問題ない
261 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 12:14:14.53 ID:BDtptoiy0.net] 初心者はまずauto使わずにプログラミング出来るようになってからにした方がいいね
262 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 17:38:09.89 ID:VIxhg0oq0.net] auto使わずにコンパイラの警告レベルを最高、警告は即エラーって設定にして テンプレートライブラリ使ったテストプログラムを書いてみると autoのありがた味が分かると思う。 ループの制御変数の型がえらいことになったりするからな。 いわんやイテレータをや。
263 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 22:00:09.12 ID:Jnrw/MWj0.net] 例えば Bar x; auto z = x; としたときに、zはの型は必ずBarになってBarの基底クラスになったりしないの?
264 名前:片山博文MZ mailto:sage [2017/10/28(土) 22:00:59.73 ID:TWx2GtJid.net] >>261 インスタンスとクラスを区別せよ。
265 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 22:03:17.64 ID:Jnrw/MWj0.net] Barの基底クラスがFooだとして、 実はBarはコピコンがprivateでなぜかoperator Foo()だけがpublicで定義されているかもしれない かもしれない運転、
266 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 22:11:30.59 ID:Jnrw/MWj0.net] あるいは class Foo { void assign(const &Foo) { ... } // (A) }; class Bar : public Foo { void assign(const &Foo) { ... } // (B) }; Foo x1, x2; Bar y; auto z = x1; z.assign(x2); // (C) y = z; とかなときに(C)で呼ばれるassign()はどっち?
267 名前:片山博文MZ mailto:sage [2017/10/28(土) 22:12:10.53 ID:TWx2GtJid.net] >>264 試せばわかる。
268 名前:片山博文MZ mailto:sage [2017/10/28(土) 22:16:47.80 ID:TWx2GtJid.net] 参照なしのautoで代入だから、この場合は同じ型でコピーだね。メソッドは仮想関数でもないから、同じクラスのメソッドが呼ばれるはずだ。
269 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 22:57:04.67 ID:Jnrw/MWj0.net] C++で起き得るBarとFooのパターン全てについてテストケースを考えるのは無理ゲーすぐる、 auto儲はどのようにして有限の人生と無限に近い(ときに想像を絶する結果をもたらす)C++の自由度との折り合いを付けているのであろうか…
270 名前:片山博文MZ mailto:sage [2017/10/28(土) 23:02:38.36 ID:TWx2GtJid.net] かしこいIDE使ってるなら、ビルドしたらその場でautoの型がわかるはず。スマートに行こうぜ、スマートに。
271 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 23:49:55.51 ID:n2BUqhCar.net] struct S {}; using Bar = S const; Bar x; auto z = x; 必ずしも同じ型ではないな
272 名前:デフォルトの名無しさん [2017/10/29(日) 01:18:54.15 ID:jdBIz2nU0.net] >>263 それがどんな問題が起きると? >>264 Bar使われてないじゃん
273 名前:デフォルトの名無しさん [2017/10/29(日) 05:32:17.05 ID:0yKrkLYC0.net] 大量のC++のコードを読み、大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。 碌にコードを読んだことがない、書かない人が文法を変えたがるのだ。 外国人の日本語入門者が「は」と「が」が難しいからautoにしろ、どっちの意味かは読む人、聞く人が考えろと言ってるうなもの。 ひらがなとカタカナを統一しろとかね。日本人ならそうは思わない。日本語を使い続けて必要な理由を知ってるから。 日本語から「が」がなくなれば不便で仕方がない。 だからauto使いは大学デビューとか言われるのだ。未だコードネイティブではないのだ。 10年使ってからautoが必要かどうか考えろ。答えは明らかだ。
274 名前:デフォルトの名無しさん [2017/10/29(日) 07:32:07.72 ID:m60zTw010.net] > 大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。 これは嘘 autoだけでなくtrailing return typeやusing aliasなど かゆいところにやっと手が届いたシンタックス変更は大歓迎している C++11以後に拒否反応しまくって、未だにC++98のマゾプレーを続行中の変態は 頭固すぎだ # 自分で言うのも何だが、俺に頭固いなんて言われるのは極端すぎだ
275 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 07:55:51.29 ID:Heo7FnD+0.net] >>270 藻前の呼びたかったassign()は実はFoo::assign()(基底クラスの方)だったかもしれないじゃん?
276 名前:デフォルトの名無しさん [2017/10/29(日) 08:02:49.06 ID:5nFESEae0.net] ところでこれからC++を始めたいのだが、純粋にC++が始めたいのではなくてc言語の代わりとして C++を使ってみたい。多少なりともC++
277 名前:フ方が便利だろうとおもうから。一つ二つ制約があって ROMが256バイトしかない。RAMが8Kしかない。こういう場合に今までROM48Kバイト、RAM8K バイトでおさまっていたプログラムをC++で移植するのは余裕だろうか? それとも便利になる分 スペースがとられてRomエリアが少なすぎるってレベルだろうか? [] [ここ壊れてます]
278 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 08:05:45.00 ID:6IgW6Wrm0.net] アセンブリで書けるレベルじゃね?それ。
279 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 08:07:50.71 ID:XRmGRjwZ0.net] >>271 要出典:auto使いは大学デビュー ラムダ式を変数に入れたいときはどうやるの? コンテナのイテレータを変数に入れたいときは型名全部書くの? std::bindの戻り値を変数に入れたいときはどうするの? 何でもかんでもauto使うのはどうかと思うがこういう面倒なところはautoでいいんじゃね
280 名前:片山博文MZ mailto:sage [2017/10/29(日) 08:09:27.19 ID:k1qoOab2d.net] >>274 メモリーをけちるなら、STLとかテンプレートとか呼ばれるものはあまり使わない方がいい。 std::coutなどのストリームもダメだ。あれは遅いし、バカ食いする。
281 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/29(日) 08:10:20.13 ID:XyYI0EpP0.net] cでもキツいな
282 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 08:14:51.32 ID:Heo7FnD+0.net] 多分printf()がリンクされたら死ぬレベル
283 名前:片山博文MZ mailto:sage [2017/10/29(日) 08:19:49.13 ID:k1qoOab2d.net] >>274 256KBの間違いだろ? まずは、メソッド、デストラクタ、std::stringの3つを学習してみな。便利だとわかるから。
284 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 08:25:23.25 ID:XRmGRjwZ0.net] >>274 ROMは256Kの誤記だとして RAM8Kはきついな マイコン向けの開発環境も無償版や評価版なんてのがあるから一回試した方がいいと思う コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
285 名前:デフォルトの名無しさん [2017/10/29(日) 08:51:05.52 ID:5nFESEae0.net] ROMは256kの間違い。外部RAMは256kbある。(ただしSPIでアクセスするので遅い) だから8kは純粋にワークとして使える。 8kのRAMがきついと思うのは何故? C++もワークはスタックを使うと思うけど、プログラムの実行エリアとして例えばクラスインスタンスを 作るのにRAMを消費することになるんだろうか? 動的にインスタンスを作成するとそのクラスが大きいと RAMエリア(mallocで確保してロードしたら、解放するまではRAMエリアを使う)を圧迫することになる。 ということはRAMをあまり消費しない手法ってあるんだろうか?
286 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:18:10.76 ID:Heo7FnD+0.net] 普通は処理系が要求するコード、CONSTデータ、、スタック、初期値付きデータ、BSSの各セクションを プログラマーが明示的にリンカに指示して割り当てさせるんじゃね;; これはCもC++も同じなのでCでのやり方を理解しているなんならC++でも同じようにやれば良い (グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
287 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:30:39.20 ID:XRmGRjwZ0.net] >>282 最適化切って動作確認したり、デバッグ用のコードを仕込んだりしてると8Kは意外とすぐに使いきれてしまう 当然プログラムの規模や書き方によるところだから必ず足りないわけではないけど C++だから足りないというわけではない 元のプログラムがCで書かれてて8Kで動いてたならまぁ大丈夫か
288 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:31:08.74 ID:Heo7FnD+0.net] >>282 >8kのRAMがきついと思うのは何故? 全てはID:5nFESEae0が上記各セクションをROMやRAMにどのように割り付けようとしているのかにかかってゐるのだが、 仮にスタックと初期値つきデータとBSSを全部8 KBのRAMに割り付けた場合、 コード以外の全て(malloc()含む)のメモリ消費がトータルで8 KBに収まらねばならず、 メモリ不足のせいでやれることは相当にきびしくなるとおもー
289 名前:デフォルトの名無しさん [2017/10/29(日) 09:38:54.44 ID:0yKrkLYC0.net] ID:XRmGRjwZ0 > RAM8Kはきついな > コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに > C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな こいつレベル低すぎだろ。ド素人にもほどがある。 完全に組み込み経験なしじゃねーか。学生じゃねーのか。
290 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:49:26.98 ID:6IgW6Wrm0.net] コンテナクラスの消費バイトは12バイト。だっけ?
291 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:56:55.29 ID:Heo7FnD+0.net] sizeof(コンテナクラス)すればワカル、 ただしコンテナに要素の追加でmalloc()される分は別枠
292 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 10:05:31.40 ID:NWVP0NdTH.net] >>274 論外 勉強目的だろ 自称プロでも 8kB なんて環境で組んだことのある人間なんて少数 普通はデフォルトのスタックサイズやvtableの存在すら知らん 考え直せ
293 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 10:24:19.89 ID:9Q+tOYh80.net] Microchip マイコン PIC24FJ128GA006-I/PT 16ビット RISC PIC24FJ, 32MHz, 128 kB フラッシュ, 8 kB RAM, 64-Pin jp.rs-online.com/web/p/microcontrollers/6230897/ 8KB RAM は、400円のPIC マイコンとかだろ そもそも、C++ のコンパイラが無い
294 名前:デフォルトの名無しさん [2017/10/29(日) 10:29:34.45 ID:5nFESEae0.net] コンパイラはありますよ。C/C++とうたってるので恐らくC++もできると思うが、、、 TIとかHewとか他にもKeilとか
295 名前:デフォルトの名無しさん [2017/10/29(日) 10:41:22.70 ID:5nFESEae0.net] >グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い おお、心強いお言葉。 例えば class MyClass { int buf[1000]; int no = 0; void inputdisp(int aa){ sprintf(buf," aa=%d",aa); } }; int sub1() { MyClass aaa; aaa.disp(333); return 0; } こういう場合はaaaはbufは2000バイトのRAMを使うけれども、stackに確保するんだろうか? aaa自体はrom上にできると考えていい? それなら、cと混在で徐々にC++に変えていく程度でも問題ないのかなとは思っている。
296 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 10:52:19.32 ID:Heo7FnD+0.net] >>292 >aaa自体はrom上にできると考えていい? 質問の意味不明 再入力せよ
297 名前:デフォルトの名無しさん [2017/10/29(日) 11:05:38.47 ID:5nFESEae0.net] 動的にNewを使ってインスタンスを生成した場合には、コードは必
298 名前:然的にRam上に置かれる。しかしスタティックに 生成した場合は、Code部分は原理的にはRom上にも置くことができる。そういう機能があるかどうか?って質問。 [] [ここ壊れてます]
299 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 11:08:14.46 ID:Heo7FnD+0.net] >>294 >動的にNewを使ってインスタンスを生成した場合には、コードは必然的にRam上に置かれる。 断じて否 こういう手合いに騙されてはいけない
300 名前:デフォルトの名無しさん [2017/10/29(日) 11:14:29.67 ID:jdBIz2nU0.net] >>292 aaaもbufも同じ場所。大抵のコンパイラでは同じアドレスを指す。C解るならclassをstructに置き換えて考えたらいい。それと一緒。
301 名前:片山博文MZ mailto:sage [2017/10/29(日) 11:15:45.86 ID:k1qoOab2d.net] operator newの再定義ね。
302 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 11:29:26.33 ID:Heo7FnD+0.net] ていうか>>294 ハ質問者本人かしつれいorz >>292 のMyClass::inputdisp(int aa)のコードは、名前が適当にマングルされて(*1) void hoge(MyClass* this, int aa) // (1) という2引数の関数としてコードセクションにコードが格納される、というのが真実(*2)(*3) オブジェクトaaaを動的にNewを使ってインスタンスを生成しようがスタティックに生成しようが、 そんなこととは無関係に、aaa.inputdisp((int型データ))というメソッドの呼び出しは(1)の関数呼び出しにコンパイルされる *1: ここでは簡単のため’hoge’という名前にマングルされたとしている。本当は引数の型や戻り値も情報として含む名前になるが省略 *2: C++の言語規格でそうせよ決まっているかどうかは知らないが、そう処理する処理系しか無いと思う *3: コードセクションがROM上なのかRAM上なのかはプログラマーがコードセクションをどう割り付けたかによる
303 名前:デフォルトの名無しさん [2017/10/29(日) 12:14:39.69 ID:5nFESEae0.net] >296 うろ覚えで使ってるが、 Section Type of Memory Section Type of Memory .bss RAM .stack RAM .data RAM .sysmem RAM .text ROM これがコード部分 .その他 ROM こういうのがある。 Hewの場合#pragumaでセクションを生成できたとおもうが、一般的に#pragma とかで割り当てできるんだろうか? 今回はTiのコンパイラを使う予定なので初めての試み。 多分 static Myclass aaa; みたいにスタティックかなにかを冠して宣言すれば.textにコードは配置されると思うが、どうなんだろう。 スタティックなんだから原理的には配置はどうにでもなる筈。
304 名前:デフォルトの名無しさん [2017/10/29(日) 12:18:36.34 ID:5nFESEae0.net] 問題はスタティックにした場合, コードは.textに配置されるとしてもdataが.dataに配置されると非常にまずい。 スタックでやってもらえないと困る。
305 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 12:34:41.62 ID:n8H8yUIJM.net] >>300 関数が再入されることを考えたら普通にスタックに配置されると思うよ。 むしろstaticにしたらスタックには配置されない。 ここまでインスタンスの話。 コードはいずれにしても.textに配置されると思うよ。特に指定がない限り。でもそれは>>300 にとっても問題にならないかと。
306 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 12:40:57.57 ID:oFRxn/Jf0.net] >>289 30年ぐらい前に ROM2KB, RAM2KB の Z80 ボード用プログラムをC言語で作ったことあるよ。
307 名前:デフォルトの名無しさん [2017/10/29(日) 12:43:00.92 ID:5nFESEae0.net] 例えば、パネル表示をまとめたクラスのような場合にはクラスのメソッド部分が非常に大きくなる。しかもライブラリ 的に使うわけだから、階層のわりと下で使うことになる。3階層あって、2階層目くらいから同時にいくつかが 生成されてしまう可能性も高い。するとRAMエリアが直ぐにパンクする。なのでメソッドを大量に含んだライブラリ的な 働きをするクラスに関しては、.textにあってほしい。それは可能だと思うがじゃあそのクラス内でつかうバッファなどの 変数なんかが問題になる。これは動的に生成しないとクラスの使い道が非常に限られてくる。第一suba()で使っていて subb()で使うとバッファエリアが壊れてしまう。 1.bufを持てないクラスなんて殆ど意味がない。 2.bufをスタティックにしか配置できないクラスなんて使い道がない。 3.小規模マイコンでメソッドをramに確保するなんて馬鹿げている。 これは明らかだよね。 つまりMyclassのbuf[1000]、メソード関数()(例えば50個)をスタックと.textにそれぞれ上手く配置する工夫が 絶対に必要ってことだね。
308 名前:デフォルトの名無しさん [2017/10/29(日) 12:45:06.72 ID:5nFESEae0.net] >コードはいずれにしても.textに配置されると思うよ。特に指定がない限り。でもそれは>>300 にとっても問題にならないかと。 であれば何も問題ないですね。
309 名前:sage mailto:sage [2017/10/29(日) 12:54:06.20 ID:t3scGPtZ0.net] 組み込みはPCで動くの違って配置も考えないといけないから大変だな マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。
310 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 16:49:46.36 ID:9sOuhtQV0.net] >>274 純粋にC言語の書き方するだけならコンパイラの能力次第だと思う
311 名前:デフォルトの名無しさん [2017/10/29(日) 18:26:51.08 ID:5nFESEae0.net] ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。特に組み込み だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。
312 名前:片山博文MZ mailto:sage [2017/10/29(日) 18:28:45.31 ID:k1qoOab2d.net] >>307 コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
313 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 18:58:48.05 ID:9sOuhtQV0.net] >>307 その定義した型を他のファイルから使う時はどうするのさ? 単一のファイルしか使ってないなら分ける必要はないけど
314 名前:デフォルトの名無しさん [2017/10/29(日) 19:08:11.02 ID:5nFESEae0.net] クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの? 例えば clsAAA.h clsBBB.h ... clsXXX.h main.cpp の中で include "cls\clsAAA.h" include "cls\clsBBB.h" .... include "cls\clsXXX.h"
315 名前:デフォルトの名無しさん [2017/10/29(日) 19:13:52.28 ID:5nFESEae0.net] >コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね? 100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら clsディレクトリにクラスファイルを入れて prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする 方がいいと思う。
316 名前:デフォルトの名無しさん [2017/10/29(日) 19:15:39.48 ID:5nFESEae0.net] prtは自動生成できるって前提だy。
317 名前:デフォルトの名無しさん [2017/10/29(日) 19:18:10.19 ID:5nFESEae0.net] やっぱりメッソドがデータなんかと分離するのはわかり難い。他のオブジェクト指向のコンパイラでもそんなことはしないしね。
318 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 19:21:46.87 ID:qxWnFrvp0.net] ヘッダだけだと循環参照起きるし、循環参照起きるところだけcppってのも気持ち悪い
319 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 19:34:33.73 ID:XE573cMW0.net] >>313 分けなきゃいけないことはない 分けた方が効率が良い(場合が多い)というだけだから 理解した上で敢えて分けないならそれはそれで好きにすれば良い
320 名前:片山博文MZ mailto:sage [2017/10/29(日) 19:36:43.09 ID:k1qoOab2d.net] >>314 inlineキーワード使って定義もヘッダーに書いちゃえば?
321 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 20:07:38.66 ID:9sOuhtQV0.net] >>307 > ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。 >>310 > クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの? いったい何をどうしたいのかさっぱりわからん
322 名前:デフォルトの名無しさん [2017/10/29(日) 20:13:48.53 ID:5nFESEae0.net] >314 前方宣言でいいのでは? そういうのは特殊な場合だけだから
323 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 22:07:47.02 ID:qxWnFrvp0.net] >>318 class Aからclass Bのメソッドを呼んで class Bからclass Aのメソッドを呼ぶ場合前方宣言だけでは無理なはず
324 名前:片山博文MZ mailto:sage [2017/10/29(日) 22:10:20.28 ID:k1qoOab2d.net] >>319 宣言を両方最初に書いておき、定義を後に書く。
325 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 22:21:25.90 ID:qxWnFrvp0.net] >>320 class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ
326 名前:デフォルトの名無しさん [2017/10/29(日) 22:40:54.16 ID:5nFESEae0.net] いづれにしてもメソッドをばらして別ファイルに書くほうが良いという根拠にはならんだろ。
327 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 22:52:18.92 ID:qxWnFrvp0.net] 一部分けなきゃできないところがあるから全部分けるだけで、できるならc#とかみたいに全部一つのファイルに書きたい
328 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 23:53:27.12 ID:OlzRTZr+0.net] それだとクラスが縦に長くなって範囲がぱっと見わからなる 1クラス1ファイルの場合はいいけどさ
329 名前:デフォルトの名無しさん mailto:sage [2017/10/30(月) 01:18:16.05 ID:ImI1HNcW0.net] てかコードの利用者はヘッダしか見ねーんだから普通に分けとけよ
330 名前:デフォルトの名無しさん [2017/10/30(月) 03:59:29.97 ID:XQpDzkmg0.net] >323 できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。 cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。
331 名前:デフォルトの名無しさん [2017/10/30(月) 05:31:15.27 ID:shFErbol0.net] >>323 一部だけ分けりゃいいじゃん それとシングルソースにしちまうと分担がしにくいだろ
332 名前:デフォルトの名無しさん mailto:sage [2017/10/30(月) 09:03:26.26 ID:d9bwD/eVM.net] >>327 ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ