次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part131
http://mevius.2ch.net/test/read.cgi/tech/1501295308/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1500329247/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part132
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ (ワッチョイ faeb-wbjw)
2017/10/10(火) 00:11:34.01ID:nc/5PI4P0254デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 08:28:41.62ID:Jnrw/MWj0 テクノロジーに善悪は無い
255デフォルトの名無しさん (ワッチョイ 93b3-FaL7)
2017/10/28(土) 08:44:41.02ID:rDr3prXm0 >>253
暗黙の云々とかoperator=とかが怖いってだけ
それに後から読み返した時、どんな戻り値が欲しかったのかとか
autoだとわかり辛いって事がままあるし、autoはなるべくあちこちに散乱させたくない
.NET方面のvarとかも気持ち悪いったらありゃしない・・・
暗黙の云々とかoperator=とかが怖いってだけ
それに後から読み返した時、どんな戻り値が欲しかったのかとか
autoだとわかり辛いって事がままあるし、autoはなるべくあちこちに散乱させたくない
.NET方面のvarとかも気持ち悪いったらありゃしない・・・
256デフォルトの名無しさん (スップ Sd73-0RRx)
2017/10/28(土) 08:56:43.01ID:JVsxHO5Xd autoの数々の利点のほうが大きいからどの言語でも型推論は基本になってきてるな
メイヤーズも言ってるしマイクロソフトも推奨してるし
メイヤーズも言ってるしマイクロソフトも推奨してるし
257デフォルトの名無しさん (ワッチョイ 6b15-OCcV)
2017/10/28(土) 09:55:15.82ID:QoaQu2To0 autoはどのように推定されるかを理解して使うもので、
断じてバカ用のヘルパーではない
バカ自身はそれがわからないから変な杞憂に陥るってだけ
断じてバカ用のヘルパーではない
バカ自身はそれがわからないから変な杞憂に陥るってだけ
258デフォルトの名無しさん (ワッチョイ 33eb-Eec1)
2017/10/28(土) 11:02:25.42ID:J8kLZQh+0 バカだけどIDEさんが、IDEさんさえいてくれれば大丈夫だ問題ない
259デフォルトの名無しさん (ワッチョイ eb8a-1LOm)
2017/10/28(土) 12:14:14.53ID:BDtptoiy0 初心者はまずauto使わずにプログラミング出来るようになってからにした方がいいね
260デフォルトの名無しさん (ワッチョイ 9193-cGPg)
2017/10/28(土) 17:38:09.89ID:VIxhg0oq0 auto使わずにコンパイラの警告レベルを最高、警告は即エラーって設定にして
テンプレートライブラリ使ったテストプログラムを書いてみると
autoのありがた味が分かると思う。
ループの制御変数の型がえらいことになったりするからな。
いわんやイテレータをや。
テンプレートライブラリ使ったテストプログラムを書いてみると
autoのありがた味が分かると思う。
ループの制御変数の型がえらいことになったりするからな。
いわんやイテレータをや。
261デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 22:00:09.12ID:Jnrw/MWj0 例えば
Bar x;
auto z = x;
としたときに、zはの型は必ずBarになってBarの基底クラスになったりしないの?
Bar x;
auto z = x;
としたときに、zはの型は必ずBarになってBarの基底クラスになったりしないの?
263デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 22:03:17.64ID:Jnrw/MWj0 Barの基底クラスがFooだとして、
実はBarはコピコンがprivateでなぜかoperator Foo()だけがpublicで定義されているかもしれない
かもしれない運転、
実はBarはコピコンがprivateでなぜかoperator Foo()だけがpublicで定義されているかもしれない
かもしれない運転、
264デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 22:11:30.59ID:Jnrw/MWj0 あるいは
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()はどっち?
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()はどっち?
266片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/28(土) 22:16:47.80ID:TWx2GtJid 参照なしのautoで代入だから、この場合は同じ型でコピーだね。メソッドは仮想関数でもないから、同じクラスのメソッドが呼ばれるはずだ。
267デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 22:57:04.67ID:Jnrw/MWj0 C++で起き得るBarとFooのパターン全てについてテストケースを考えるのは無理ゲーすぐる、
auto儲はどのようにして有限の人生と無限に近い(ときに想像を絶する結果をもたらす)C++の自由度との折り合いを付けているのであろうか…
auto儲はどのようにして有限の人生と無限に近い(ときに想像を絶する結果をもたらす)C++の自由度との折り合いを付けているのであろうか…
268片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/28(土) 23:02:38.36ID:TWx2GtJid かしこいIDE使ってるなら、ビルドしたらその場でautoの型がわかるはず。スマートに行こうぜ、スマートに。
269デフォルトの名無しさん (オッペケ Sr9d-SZnS)
2017/10/28(土) 23:49:55.51ID:n2BUqhCar struct S {};
using Bar = S const;
Bar x;
auto z = x;
必ずしも同じ型ではないな
using Bar = S const;
Bar x;
auto z = x;
必ずしも同じ型ではないな
270デフォルトの名無しさん (ワッチョイ a180-aATY)
2017/10/29(日) 01:18:54.15ID:jdBIz2nU0271デフォルトの名無しさん (ワッチョイ e983-nu9H)
2017/10/29(日) 05:32:17.05ID:0yKrkLYC0 大量のC++のコードを読み、大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。
碌にコードを読んだことがない、書かない人が文法を変えたがるのだ。
外国人の日本語入門者が「は」と「が」が難しいからautoにしろ、どっちの意味かは読む人、聞く人が考えろと言ってるうなもの。
ひらがなとカタカナを統一しろとかね。日本人ならそうは思わない。日本語を使い続けて必要な理由を知ってるから。
日本語から「が」がなくなれば不便で仕方がない。
だからauto使いは大学デビューとか言われるのだ。未だコードネイティブではないのだ。
10年使ってからautoが必要かどうか考えろ。答えは明らかだ。
碌にコードを読んだことがない、書かない人が文法を変えたがるのだ。
外国人の日本語入門者が「は」と「が」が難しいからautoにしろ、どっちの意味かは読む人、聞く人が考えろと言ってるうなもの。
ひらがなとカタカナを統一しろとかね。日本人ならそうは思わない。日本語を使い続けて必要な理由を知ってるから。
日本語から「が」がなくなれば不便で仕方がない。
だからauto使いは大学デビューとか言われるのだ。未だコードネイティブではないのだ。
10年使ってからautoが必要かどうか考えろ。答えは明らかだ。
272デフォルトの名無しさん (ワッチョイ 6b15-OCcV)
2017/10/29(日) 07:32:07.72ID:m60zTw010 > 大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。
これは嘘
autoだけでなくtrailing return typeやusing aliasなど
かゆいところにやっと手が届いたシンタックス変更は大歓迎している
C++11以後に拒否反応しまくって、未だにC++98のマゾプレーを続行中の変態は
頭固すぎだ
# 自分で言うのも何だが、俺に頭固いなんて言われるのは極端すぎだ
これは嘘
autoだけでなくtrailing return typeやusing aliasなど
かゆいところにやっと手が届いたシンタックス変更は大歓迎している
C++11以後に拒否反応しまくって、未だにC++98のマゾプレーを続行中の変態は
頭固すぎだ
# 自分で言うのも何だが、俺に頭固いなんて言われるのは極端すぎだ
273デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 07:55:51.29ID:Heo7FnD+0 >>270
藻前の呼びたかったassign()は実はFoo::assign()(基底クラスの方)だったかもしれないじゃん?
藻前の呼びたかったassign()は実はFoo::assign()(基底クラスの方)だったかもしれないじゃん?
274デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 08:02:49.06ID:5nFESEae0 ところでこれからC++を始めたいのだが、純粋にC++が始めたいのではなくてc言語の代わりとして
C++を使ってみたい。多少なりともC++の方が便利だろうとおもうから。一つ二つ制約があって
ROMが256バイトしかない。RAMが8Kしかない。こういう場合に今までROM48Kバイト、RAM8K
バイトでおさまっていたプログラムをC++で移植するのは余裕だろうか? それとも便利になる分
スペースがとられてRomエリアが少なすぎるってレベルだろうか?
C++を使ってみたい。多少なりともC++の方が便利だろうとおもうから。一つ二つ制約があって
ROMが256バイトしかない。RAMが8Kしかない。こういう場合に今までROM48Kバイト、RAM8K
バイトでおさまっていたプログラムをC++で移植するのは余裕だろうか? それとも便利になる分
スペースがとられてRomエリアが少なすぎるってレベルだろうか?
275デフォルトの名無しさん (ワッチョイ 9104-VtrM)
2017/10/29(日) 08:05:45.00ID:6IgW6Wrm0 アセンブリで書けるレベルじゃね?それ。
276デフォルトの名無しさん (ワッチョイ 1341-2BKa)
2017/10/29(日) 08:07:50.71ID:XRmGRjwZ0 >>271
要出典:auto使いは大学デビュー
ラムダ式を変数に入れたいときはどうやるの?
コンテナのイテレータを変数に入れたいときは型名全部書くの?
std::bindの戻り値を変数に入れたいときはどうするの?
何でもかんでもauto使うのはどうかと思うがこういう面倒なところはautoでいいんじゃね
要出典:auto使いは大学デビュー
ラムダ式を変数に入れたいときはどうやるの?
コンテナのイテレータを変数に入れたいときは型名全部書くの?
std::bindの戻り値を変数に入れたいときはどうするの?
何でもかんでもauto使うのはどうかと思うがこういう面倒なところはautoでいいんじゃね
277片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 08:09:27.19ID:k1qoOab2d278デフォルトの名無しさん (ワッチョイ 138a-whYl)
2017/10/29(日) 08:10:20.13ID:XyYI0EpP0 cでもキツいな
279デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 08:14:51.32ID:Heo7FnD+0 多分printf()がリンクされたら死ぬレベル
280片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 08:19:49.13ID:k1qoOab2d281デフォルトの名無しさん (ワッチョイ 1341-2BKa)
2017/10/29(日) 08:25:23.25ID:XRmGRjwZ0 >>274
ROMは256Kの誤記だとして
RAM8Kはきついな
マイコン向けの開発環境も無償版や評価版なんてのがあるから一回試した方がいいと思う
コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
ROMは256Kの誤記だとして
RAM8Kはきついな
マイコン向けの開発環境も無償版や評価版なんてのがあるから一回試した方がいいと思う
コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
282デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 08:51:05.52ID:5nFESEae0 ROMは256kの間違い。外部RAMは256kbある。(ただしSPIでアクセスするので遅い)
だから8kは純粋にワークとして使える。
8kのRAMがきついと思うのは何故?
C++もワークはスタックを使うと思うけど、プログラムの実行エリアとして例えばクラスインスタンスを
作るのにRAMを消費することになるんだろうか? 動的にインスタンスを作成するとそのクラスが大きいと
RAMエリア(mallocで確保してロードしたら、解放するまではRAMエリアを使う)を圧迫することになる。
ということはRAMをあまり消費しない手法ってあるんだろうか?
だから8kは純粋にワークとして使える。
8kのRAMがきついと思うのは何故?
C++もワークはスタックを使うと思うけど、プログラムの実行エリアとして例えばクラスインスタンスを
作るのにRAMを消費することになるんだろうか? 動的にインスタンスを作成するとそのクラスが大きいと
RAMエリア(mallocで確保してロードしたら、解放するまではRAMエリアを使う)を圧迫することになる。
ということはRAMをあまり消費しない手法ってあるんだろうか?
283デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 09:18:10.76ID:Heo7FnD+0 普通は処理系が要求するコード、CONSTデータ、、スタック、初期値付きデータ、BSSの各セクションを
プログラマーが明示的にリンカに指示して割り当てさせるんじゃね;;
これはCもC++も同じなのでCでのやり方を理解しているなんならC++でも同じようにやれば良い
(グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
プログラマーが明示的にリンカに指示して割り当てさせるんじゃね;;
これはCもC++も同じなのでCでのやり方を理解しているなんならC++でも同じようにやれば良い
(グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
284デフォルトの名無しさん (ワッチョイ 1341-2BKa)
2017/10/29(日) 09:30:39.20ID:XRmGRjwZ0 >>282
最適化切って動作確認したり、デバッグ用のコードを仕込んだりしてると8Kは意外とすぐに使いきれてしまう
当然プログラムの規模や書き方によるところだから必ず足りないわけではないけど
C++だから足りないというわけではない
元のプログラムがCで書かれてて8Kで動いてたならまぁ大丈夫か
最適化切って動作確認したり、デバッグ用のコードを仕込んだりしてると8Kは意外とすぐに使いきれてしまう
当然プログラムの規模や書き方によるところだから必ず足りないわけではないけど
C++だから足りないというわけではない
元のプログラムがCで書かれてて8Kで動いてたならまぁ大丈夫か
285デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 09:31:08.74ID:Heo7FnD+0 >>282
>8kのRAMがきついと思うのは何故?
全てはID:5nFESEae0が上記各セクションをROMやRAMにどのように割り付けようとしているのかにかかってゐるのだが、
仮にスタックと初期値つきデータとBSSを全部8 KBのRAMに割り付けた場合、
コード以外の全て(malloc()含む)のメモリ消費がトータルで8 KBに収まらねばならず、
メモリ不足のせいでやれることは相当にきびしくなるとおもー
>8kのRAMがきついと思うのは何故?
全てはID:5nFESEae0が上記各セクションをROMやRAMにどのように割り付けようとしているのかにかかってゐるのだが、
仮にスタックと初期値つきデータとBSSを全部8 KBのRAMに割り付けた場合、
コード以外の全て(malloc()含む)のメモリ消費がトータルで8 KBに収まらねばならず、
メモリ不足のせいでやれることは相当にきびしくなるとおもー
286デフォルトの名無しさん (ワッチョイ e983-nu9H)
2017/10/29(日) 09:38:54.44ID:0yKrkLYC0 ID:XRmGRjwZ0
> RAM8Kはきついな
> コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
> C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
こいつレベル低すぎだろ。ド素人にもほどがある。
完全に組み込み経験なしじゃねーか。学生じゃねーのか。
> RAM8Kはきついな
> コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
> C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
こいつレベル低すぎだろ。ド素人にもほどがある。
完全に組み込み経験なしじゃねーか。学生じゃねーのか。
287デフォルトの名無しさん (ワッチョイ 9104-VtrM)
2017/10/29(日) 09:49:26.98ID:6IgW6Wrm0 コンテナクラスの消費バイトは12バイト。だっけ?
288デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 09:56:55.29ID:Heo7FnD+0 sizeof(コンテナクラス)すればワカル、
ただしコンテナに要素の追加でmalloc()される分は別枠
ただしコンテナに要素の追加でmalloc()される分は別枠
289デフォルトの名無しさん (JP 0Hc5-xXVv)
2017/10/29(日) 10:05:31.40ID:NWVP0NdTH290デフォルトの名無しさん (ワッチョイ eb80-4ToH)
2017/10/29(日) 10:24:19.89ID:9Q+tOYh80 Microchip マイコン PIC24FJ128GA006-I/PT 16ビット RISC PIC24FJ,
32MHz, 128 kB フラッシュ, 8 kB RAM, 64-Pin
http://jp.rs-online.com/web/p/microcontrollers/6230897/
8KB RAM は、400円のPIC マイコンとかだろ
そもそも、C++ のコンパイラが無い
32MHz, 128 kB フラッシュ, 8 kB RAM, 64-Pin
http://jp.rs-online.com/web/p/microcontrollers/6230897/
8KB RAM は、400円のPIC マイコンとかだろ
そもそも、C++ のコンパイラが無い
291デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 10:29:34.45ID:5nFESEae0 コンパイラはありますよ。C/C++とうたってるので恐らくC++もできると思うが、、、
TIとかHewとか他にもKeilとか
TIとかHewとか他にもKeilとか
292デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 10:41:22.70ID:5nFESEae0 >グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
おお、心強いお言葉。
例えば
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++に変えていく程度でも問題ないのかなとは思っている。
おお、心強いお言葉。
例えば
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++に変えていく程度でも問題ないのかなとは思っている。
293デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 10:52:19.32ID:Heo7FnD+0294デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 11:05:38.47ID:5nFESEae0 動的にNewを使ってインスタンスを生成した場合には、コードは必然的にRam上に置かれる。しかしスタティックに
生成した場合は、Code部分は原理的にはRom上にも置くことができる。そういう機能があるかどうか?って質問。
生成した場合は、Code部分は原理的にはRom上にも置くことができる。そういう機能があるかどうか?って質問。
295デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 11:08:14.46ID:Heo7FnD+0296デフォルトの名無しさん (ワッチョイ a180-aATY)
2017/10/29(日) 11:14:29.67ID:jdBIz2nU0 >>292
aaaもbufも同じ場所。大抵のコンパイラでは同じアドレスを指す。C解るならclassをstructに置き換えて考えたらいい。それと一緒。
aaaもbufも同じ場所。大抵のコンパイラでは同じアドレスを指す。C解るならclassをstructに置き換えて考えたらいい。それと一緒。
297片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 11:15:45.86ID:k1qoOab2d operator newの再定義ね。
298デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 11:29:26.33ID:Heo7FnD+0 ていうか>>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上なのかはプログラマーがコードセクションをどう割り付けたかによる
>>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上なのかはプログラマーがコードセクションをどう割り付けたかによる
299デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 12:14:39.69ID:5nFESEae0 >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にコードは配置されると思うが、どうなんだろう。
スタティックなんだから原理的には配置はどうにでもなる筈。
うろ覚えで使ってるが、
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にコードは配置されると思うが、どうなんだろう。
スタティックなんだから原理的には配置はどうにでもなる筈。
300デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 12:18:36.34ID:5nFESEae0 問題はスタティックにした場合, コードは.textに配置されるとしてもdataが.dataに配置されると非常にまずい。
スタックでやってもらえないと困る。
スタックでやってもらえないと困る。
301デフォルトの名無しさん (ブーイモ MM33-96Io)
2017/10/29(日) 12:34:41.62ID:n8H8yUIJM302デフォルトの名無しさん (ワッチョイ 719f-Akqv)
2017/10/29(日) 12:40:57.57ID:oFRxn/Jf0 >>289
30年ぐらい前に ROM2KB, RAM2KB の Z80 ボード用プログラムをC言語で作ったことあるよ。
30年ぐらい前に ROM2KB, RAM2KB の Z80 ボード用プログラムをC言語で作ったことあるよ。
303デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 12:43:00.92ID:5nFESEae0 例えば、パネル表示をまとめたクラスのような場合にはクラスのメソッド部分が非常に大きくなる。しかもライブラリ
的に使うわけだから、階層のわりと下で使うことになる。3階層あって、2階層目くらいから同時にいくつかが
生成されてしまう可能性も高い。するとRAMエリアが直ぐにパンクする。なのでメソッドを大量に含んだライブラリ的な
働きをするクラスに関しては、.textにあってほしい。それは可能だと思うがじゃあそのクラス内でつかうバッファなどの
変数なんかが問題になる。これは動的に生成しないとクラスの使い道が非常に限られてくる。第一suba()で使っていて
subb()で使うとバッファエリアが壊れてしまう。
1.bufを持てないクラスなんて殆ど意味がない。
2.bufをスタティックにしか配置できないクラスなんて使い道がない。
3.小規模マイコンでメソッドをramに確保するなんて馬鹿げている。
これは明らかだよね。
つまりMyclassのbuf[1000]、メソード関数()(例えば50個)をスタックと.textにそれぞれ上手く配置する工夫が
絶対に必要ってことだね。
的に使うわけだから、階層のわりと下で使うことになる。3階層あって、2階層目くらいから同時にいくつかが
生成されてしまう可能性も高い。するとRAMエリアが直ぐにパンクする。なのでメソッドを大量に含んだライブラリ的な
働きをするクラスに関しては、.textにあってほしい。それは可能だと思うがじゃあそのクラス内でつかうバッファなどの
変数なんかが問題になる。これは動的に生成しないとクラスの使い道が非常に限られてくる。第一suba()で使っていて
subb()で使うとバッファエリアが壊れてしまう。
1.bufを持てないクラスなんて殆ど意味がない。
2.bufをスタティックにしか配置できないクラスなんて使い道がない。
3.小規模マイコンでメソッドをramに確保するなんて馬鹿げている。
これは明らかだよね。
つまりMyclassのbuf[1000]、メソード関数()(例えば50個)をスタックと.textにそれぞれ上手く配置する工夫が
絶対に必要ってことだね。
304デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 12:45:06.72ID:5nFESEae0305sage (ワッチョイ ebe8-KIob)
2017/10/29(日) 12:54:06.20ID:t3scGPtZ0 組み込みはPCで動くの違って配置も考えないといけないから大変だな
マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。
マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。
306デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 16:49:46.36ID:9sOuhtQV0 >>274
純粋にC言語の書き方するだけならコンパイラの能力次第だと思う
純粋にC言語の書き方するだけならコンパイラの能力次第だと思う
307デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 18:26:51.08ID:5nFESEae0 ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。特に組み込み
だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。
だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。
308片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 18:28:45.31ID:k1qoOab2d >>307
コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
309デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 18:58:48.05ID:9sOuhtQV0310デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:08:11.02ID:5nFESEae0 クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの?
例えば
clsAAA.h
clsBBB.h
...
clsXXX.h
main.cpp
の中で
include "cls\clsAAA.h"
include "cls\clsBBB.h"
....
include "cls\clsXXX.h"
例えば
clsAAA.h
clsBBB.h
...
clsXXX.h
main.cpp
の中で
include "cls\clsAAA.h"
include "cls\clsBBB.h"
....
include "cls\clsXXX.h"
311デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:13:52.28ID:5nFESEae0 >コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら
clsディレクトリにクラスファイルを入れて
prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする
方がいいと思う。
100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら
clsディレクトリにクラスファイルを入れて
prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする
方がいいと思う。
312デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:15:39.48ID:5nFESEae0 prtは自動生成できるって前提だy。
313デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:18:10.19ID:5nFESEae0 やっぱりメッソドがデータなんかと分離するのはわかり難い。他のオブジェクト指向のコンパイラでもそんなことはしないしね。
314デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 19:21:46.87ID:qxWnFrvp0 ヘッダだけだと循環参照起きるし、循環参照起きるところだけcppってのも気持ち悪い
315デフォルトの名無しさん (ワッチョイ 13e1-Zxfq)
2017/10/29(日) 19:34:33.73ID:XE573cMW0316片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 19:36:43.09ID:k1qoOab2d >>314
inlineキーワード使って定義もヘッダーに書いちゃえば?
inlineキーワード使って定義もヘッダーに書いちゃえば?
317デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 20:07:38.66ID:9sOuhtQV0318デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 20:13:48.53ID:5nFESEae0 >314
前方宣言でいいのでは?
そういうのは特殊な場合だけだから
前方宣言でいいのでは?
そういうのは特殊な場合だけだから
319デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:07:47.02ID:qxWnFrvp0320片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 22:10:20.28ID:k1qoOab2d >>319
宣言を両方最初に書いておき、定義を後に書く。
宣言を両方最初に書いておき、定義を後に書く。
321デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:21:25.90ID:qxWnFrvp0 >>320
class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ
class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ
322デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 22:40:54.16ID:5nFESEae0 いづれにしてもメソッドをばらして別ファイルに書くほうが良いという根拠にはならんだろ。
323デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:52:18.92ID:qxWnFrvp0 一部分けなきゃできないところがあるから全部分けるだけで、できるならc#とかみたいに全部一つのファイルに書きたい
324デフォルトの名無しさん (ワッチョイ 13e7-20SA)
2017/10/29(日) 23:53:27.12ID:OlzRTZr+0 それだとクラスが縦に長くなって範囲がぱっと見わからなる
1クラス1ファイルの場合はいいけどさ
1クラス1ファイルの場合はいいけどさ
325デフォルトの名無しさん (ワッチョイ eb81-peU6)
2017/10/30(月) 01:18:16.05ID:ImI1HNcW0 てかコードの利用者はヘッダしか見ねーんだから普通に分けとけよ
326デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/30(月) 03:59:29.97ID:XQpDzkmg0 >323
できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。
cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。
できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。
cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。
327デフォルトの名無しさん (ワッチョイ 6b3b-OCcV)
2017/10/30(月) 05:31:15.27ID:shFErbol0328デフォルトの名無しさん (ドコグロ MMa3-6HUO)
2017/10/30(月) 09:03:26.26ID:d9bwD/eVM >>327
ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ
ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ
329はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/30(月) 10:19:54.36ID:/9ncNuq00 モジュールについては検討中みたいだからそのうち仕様に入るんじゃね?
コンセプト並みのビッグトピックだからどんどん後ろ倒しされそうな気もするけど。
コンセプト並みのビッグトピックだからどんどん後ろ倒しされそうな気もするけど。
330デフォルトの名無しさん (ワッチョイ 6b5f-ZDdo)
2017/10/30(月) 22:49:10.56ID:ao9CiOaa0 vector<shared_ptr<T>>を使う場合、
shared_ptrから自分自身のvector上のindexを取得するにはvector要素を1つずつ走査していくしかないんかね?
vector[0]のアドレスをうまく引き算すればうまくいくかと思いきや、
shared_ptr自体は同じアドレスを持つインスタンスがvectorに格納されているわけでないのでうまく行かんのです
shared_ptrから自分自身のvector上のindexを取得するにはvector要素を1つずつ走査していくしかないんかね?
vector[0]のアドレスをうまく引き算すればうまくいくかと思いきや、
shared_ptr自体は同じアドレスを持つインスタンスがvectorに格納されているわけでないのでうまく行かんのです
331デフォルトの名無しさん (ワッチョイ 6b3e-qypI)
2017/10/30(月) 23:15:50.92ID:GaTL14js0332デフォルトの名無しさん (ワッチョイ d98a-1LOm)
2017/10/31(火) 01:31:02.70ID:Bb7HxcAo0 もしindexが変わらんのであれば別にmap<shared_ptr<T>, int>持つとか
Tにindex持たせるとか
Tにindex持たせるとか
333デフォルトの名無しさん (ワッチョイ 1b8a-zApk)
2017/10/31(火) 06:49:36.25ID:/ULkeF1E0 cppで作ったライブラリ(.a)をcに取り込むときって何か注意いる?
cppには公開apiを1つ用意して、そのなかでクラスを作って計算させようとしてる
cppには公開apiを1つ用意して、そのなかでクラスを作って計算させようとしてる
334デフォルトの名無しさん (ワッチョイ 6b3e-qypI)
2017/10/31(火) 08:34:02.64ID:tApLOrdW0 >>333
その公開apiをextern "C"するのを忘れない事。
その公開apiをextern "C"するのを忘れない事。
335はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/31(火) 09:33:49.44ID:54GXLgHP0 extern "C" しとかないと大抵はリンクの段階で失敗してくれるから、そんなにおかしなことにもならないだろうけどね。
あとは C++ 側で作ったライブラリから例外が送出されると C 側を通過できなくてクラッシュする環境がある。
あとは C++ 側で作ったライブラリから例外が送出されると C 側を通過できなくてクラッシュする環境がある。
336デフォルトの名無しさん (ワッチョイ 1b9f-20SA)
2017/10/31(火) 11:08:02.92ID:B8ReYjkr0 >>300
やり方しだいジャネーノ?C++推奨しないが、スタックが〜 ramが〜っていうなら自分で管理するか、newに任せるにして実験すればいいんじゃね?
#include <stdio.h>
#include <string.h>
char buf_hige[1000];
class Hoge {
private: char *m_pBuf; int m_size, m_IsNew;
public:
Hoge(char *p, int s) { m_size = s; m_pBuf = p; m_IsNew = 0; }
Hoge() : m_size(100) { m_pBuf = new char[m_size]; m_IsNew = 1; }
~Hoge() { if (m_IsNew) { delete[]m_pBuf; printf("~Hoge()自動削除\n"); } else printf("~Hoge()\n"); }
void zero() { memset(m_pBuf, 0, m_size); }
void show() { printf("アドレス %p size %d\n", m_pBuf, m_size); }
};
void main() {
char buf_hoge[200];
Hoge a(buf_hige, sizeof(buf_hige));// 自分でメモリー割り当ててクラスを使う 普通は ram.. #pragmaとかで移動できる?
Hoge b(buf_hoge, sizeof(buf_hoge));// 自分でメモリー割り当ててクラスを使う mainのstack
Hoge c;// 内部でnew/deleteして動的に使う ram
a.zero(); b.zero(); c.zero(); a.show(); b.show(); c.show();
}
やり方しだいジャネーノ?C++推奨しないが、スタックが〜 ramが〜っていうなら自分で管理するか、newに任せるにして実験すればいいんじゃね?
#include <stdio.h>
#include <string.h>
char buf_hige[1000];
class Hoge {
private: char *m_pBuf; int m_size, m_IsNew;
public:
Hoge(char *p, int s) { m_size = s; m_pBuf = p; m_IsNew = 0; }
Hoge() : m_size(100) { m_pBuf = new char[m_size]; m_IsNew = 1; }
~Hoge() { if (m_IsNew) { delete[]m_pBuf; printf("~Hoge()自動削除\n"); } else printf("~Hoge()\n"); }
void zero() { memset(m_pBuf, 0, m_size); }
void show() { printf("アドレス %p size %d\n", m_pBuf, m_size); }
};
void main() {
char buf_hoge[200];
Hoge a(buf_hige, sizeof(buf_hige));// 自分でメモリー割り当ててクラスを使う 普通は ram.. #pragmaとかで移動できる?
Hoge b(buf_hoge, sizeof(buf_hoge));// 自分でメモリー割り当ててクラスを使う mainのstack
Hoge c;// 内部でnew/deleteして動的に使う ram
a.zero(); b.zero(); c.zero(); a.show(); b.show(); c.show();
}
337デフォルトの名無しさん (ワッチョイ 138a-whYl)
2017/10/31(火) 14:04:56.90ID:QkT+8axj0 普通の opereter new 定義するだけじゃ駄目なの?
338デフォルトの名無しさん (ワッチョイ 0923-Lz9C)
2017/10/31(火) 15:27:26.38ID:ivXWtcCM0 その例なら m_pBuf とか m_size とか m_isNew がどこに置かれるかって話してるんだよ
339はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/31(火) 15:50:52.40ID:54GXLgHP0 >>300
リンカスクリプトで定義できるんじゃねーの
リンカスクリプトで定義できるんじゃねーの
340デフォルトの名無しさん (ブーイモ MMd5-ZDdo)
2017/10/31(火) 20:31:59.83ID:cRyJj2TVM341デフォルトの名無しさん (ワッチョイ 1b9f-20SA)
2017/11/01(水) 09:45:22.08ID:Rrk0WseL0 >>338
リンカーでMAP指定して確認したらいいんじゃねーの?アドレスわかるだろ?
リンカーでMAP指定して確認したらいいんじゃねーの?アドレスわかるだろ?
342デフォルトの名無しさん (ワッチョイ 0beb-nu9H)
2017/11/01(水) 23:49:32.94ID:KV/dR0JW0 共用体って使い道あるの?
素人目からしたら役に立つようには到底思えない
素人目からしたら役に立つようには到底思えない
343はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-lboT)
2017/11/02(木) 00:33:40.96ID:4tfXXWiS0 使わずに済むならそれにこしたことはないだろうけど、
部分的に動的型みたいにしたいときは有るよ。
yacc が生成するコードに出てきたりする。
部分的に動的型みたいにしたいときは有るよ。
yacc が生成するコードに出てきたりする。
344デフォルトの名無しさん (ワッチョイ 82b3-6lPO)
2017/11/02(木) 01:14:44.84ID:6O09mL2X0 >>342
例えば通信パケットとかで必ず固定長だけど、複数の箇所のコマンドとか意味とかのコードで
内容がコロコロ変わる様な時は便利かも知れない?
それぞれの構造体にキャストしろよって言いたくもなるけど、
複数の人で開発してると通信パケットの内容とかで下らない不具合出したくないから
1つのヘッダで全部規定したりって事はあったな
例えば通信パケットとかで必ず固定長だけど、複数の箇所のコマンドとか意味とかのコードで
内容がコロコロ変わる様な時は便利かも知れない?
それぞれの構造体にキャストしろよって言いたくもなるけど、
複数の人で開発してると通信パケットの内容とかで下らない不具合出したくないから
1つのヘッダで全部規定したりって事はあったな
345デフォルトの名無しさん (ワッチョイ 82b3-6lPO)
2017/11/02(木) 01:35:58.84ID:6O09mL2X0 あ、後H8開発してた時とか、メモリマップドIOとかがモードでコロコロ意味変わる時、
1バイトのデータになったりビットフィールドになったりなとことかがunionになってた
1バイトのデータになったりビットフィールドになったりなとことかがunionになってた
346デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/02(木) 04:56:03.82ID:i8MAyZKO0 union RGBA{
struct {R:5,G:5,B:5,A:1};
std::uint16_t Colors;
};
こんな感じのことするけど。たまに。
struct {R:5,G:5,B:5,A:1};
std::uint16_t Colors;
};
こんな感じのことするけど。たまに。
347デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/02(木) 04:57:25.31ID:i8MAyZKO0 あ、片宣言抜けてた。
たまにしか使わないからなぁ。
struct {std::uint16_t R:5,G:5,B:5,A:1};
たまにしか使わないからなぁ。
struct {std::uint16_t R:5,G:5,B:5,A:1};
348デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/02(木) 09:40:30.47ID:N8nuZaLN0 union { double d; int i; char c;} u;
は1番大きな要素、この場合は double d のサイズと
メモリアライメントを持つというのが union の重要な機能
これのおかげで非ワード境界からワードを読もうとするようなコードを避けられる
は1番大きな要素、この場合は double d のサイズと
メモリアライメントを持つというのが union の重要な機能
これのおかげで非ワード境界からワードを読もうとするようなコードを避けられる
349デフォルトの名無しさん (ワッチョイ 42d2-81c4)
2017/11/02(木) 21:55:55.26ID:JP+uyw1T0 #pragma data_seg
でdllの共有領域を作ってるんですけど
ここにクラスのインスタンスを置いておくことはできますか?
でdllの共有領域を作ってるんですけど
ここにクラスのインスタンスを置いておくことはできますか?
350デフォルトの名無しさん (エムゾネ FF62-S23b)
2017/11/02(木) 22:11:01.00ID:e7UKjGN4F コンストラクタのない、構造体にメンバ関数付いただけのクラスのインスタンスなら大丈夫じゃないかな。
動的にメモリをアロケーションするクラスではアロケーションしたメモリは共有されないので注意。
動的にメモリをアロケーションするクラスではアロケーションしたメモリは共有されないので注意。
351デフォルトの名無しさん (スップ Sdc2-S23b)
2017/11/02(木) 22:11:46.90ID:m+SMCXhed ↑
共有されないってのは「プロセス間で」ということね
共有されないってのは「プロセス間で」ということね
352デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/02(木) 23:18:08.17ID:H/ANuUhm0 >>348
『プログラミング言語C』のmalloc()の実装例のやつで見た
『プログラミング言語C』のmalloc()の実装例のやつで見た
353デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/03(金) 00:39:07.86ID:Xm/a3Zyv0 共用体は、パリティチェックで使う
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国民 居住目的でない住宅所有者に「空室税」課せる法案を提出 [少考さん★]
- 【おこめ】「有能だったんじゃ」おこめ券で批判殺到の鈴木農水大臣…ネットでは前任の“進次郎再評価” ★2 [ぐれ★]
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化へ 過去10年間に使用のメールアドレスや電話番号等も★3 [Hitzeschleier★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は ★2 [蚤の市★]
- バイク事故で入院ゆたぼん、見舞金「1円」振り込みの名義に衝撃「悲しい人ですね」「こういう人がいるから…」 [muffin★]
- 玉川徹氏、中国を猛獣に例え「いたずらに刺激して何も得はない」高市首相を厳しくただす [muffin★]
- ところで、氷河期の基礎年金が増える話どうなった?厚生年金の溜まり分を活用して付け替える話!!! [252835186]
- 高市早苗、森元総理の愛人だった [347751896]
- ひろゆき「冬の朝って「あ、今日無理かも」の日が多すぎる」
- 高市内閣の支持率、下落wwwwwwwwwww [834922174]
- 来年からPCの価格がガチのマジで超ヤバイ程値上がる模様。お前ら買ったか?Sandy高市 [484676894]
- PayPayスクラッチチャンスの声やってるけどあの声出なくなった
