次スレを立てる時は本文の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/5PI4P0290デフォルトの名無しさん (ワッチョイ 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 共用体は、パリティチェックで使う
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか
354デフォルトの名無しさん (ブーイモ MM6d-5Y2u)
2017/11/03(金) 01:31:20.38ID:f3hy7vD8M355デフォルトの名無しさん (ワッチョイ 4d08-S32u)
2017/11/03(金) 07:14:49.06ID:3SB+84d60 境界調整はalignasでできるようになった
356デフォルトの名無しさん (ワッチョイ 6e5f-Osc9)
2017/11/03(金) 18:27:07.09ID:6x/Gce9W0 string::format()マダァー?
<<は失敗だったって早く認めようぜ
<<は失敗だったって早く認めようぜ
357デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/03(金) 21:32:49.68ID:A4m/loi/0 printf()系関数とstring::c_str()(ていうかbasic_string<T>::c_str())があるから無問題
358デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/03(金) 21:34:26.06ID:A4m/loi/0 入力はscanf()系とか使うとCの経験が長いプログラマーには軽蔑の眼差しで見られるが
cinとかより速くて使い勝手も良いのだから仕方が無い
cinとかより速くて使い勝手も良いのだから仕方が無い
359デフォルトの名無しさん (ワッチョイ ad2d-7GNV)
2017/11/03(金) 21:46:14.60ID:+rn5t+yk0 boost::format よく使ってる
360デフォルトの名無しさん (ワッチョイ e178-HrHe)
2017/11/03(金) 23:08:11.68ID:veVAWEWL0 可変テンプレート使えるんならprintfにクラス喰わせたりすることぐらいできるだろ
361デフォルトの名無しさん (ワッチョイ 6e5f-Osc9)
2017/11/04(土) 00:02:18.18ID:9Iye7uTf0 snprintfじゃstringstreamの代わりとしては役者不足だろ
362デフォルトの名無しさん (ワッチョイ 6278-9hO9)
2017/11/04(土) 07:27:21.97ID:CbR/PKzh0 「役者不足」は造語なんで使わないほうが無難
363デフォルトの名無しさん (ワイモマー MMa5-FISE)
2017/11/04(土) 09:25:02.17ID:v7stxdd6M >>362
しかも「役不足」じゃあ、「役より実力が遥かに高い」の意味だしね。
しかも「役不足」じゃあ、「役より実力が遥かに高い」の意味だしね。
364デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/04(土) 12:54:53.20ID:z55RyEJo0 「力不足」な
365デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/04(土) 14:09:16.93ID:CaxSQdEs0 >>361
全然wwwwwwwwwww
自作クラスのシリアライズ/デシリアライズの下請け関数として使う分には
機能上全く困らない上に速いのだから
で、シリアライズ/デシリアライズおあ
void ISeriarizable::seriarize(FILE* fp)とvoid ISeriarizable::deseriarize(FILE* fp)
にして「<<」や「>>」のオーバーロードみたいな変態じみたことはせずに同等の柔軟性を確保できる
全然wwwwwwwwwww
自作クラスのシリアライズ/デシリアライズの下請け関数として使う分には
機能上全く困らない上に速いのだから
で、シリアライズ/デシリアライズおあ
void ISeriarizable::seriarize(FILE* fp)とvoid ISeriarizable::deseriarize(FILE* fp)
にして「<<」や「>>」のオーバーロードみたいな変態じみたことはせずに同等の柔軟性を確保できる
366デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/04(土) 14:29:00.75ID:+71Y93dj0 設計が古いな。
367デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 15:30:32.32ID:2OIo1NJb0 cin,cout って組み込みで使えるんかい?
何処をどう書き換えるとそうなるん?
何処をどう書き換えるとそうなるん?
368デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 15:34:07.08ID:2OIo1NJb0 string s1("foo");
const char *p = NULL;
p = s1.c_str();
cout << p << endl;
return 0;
????
cout << s1<<endl; じゃダメなん?
const char *p = NULL;
p = s1.c_str();
cout << p << endl;
return 0;
????
cout << s1<<endl; じゃダメなん?
369デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 22:22:05.63ID:2OIo1NJb0 Coutを実験してみたがコードがバカでかくなるので駄目だな。組み込みでは使えない。
370デフォルトの名無しさん (ドコグロ MM29-r/51)
2017/11/04(土) 22:34:50.04ID:WXoZTt/lM >>369
組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
371デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/04(土) 22:37:40.26ID:z55RyEJo0 組み込みに使うなら実験とかじゃなくちゃんとどんなコードか把握しろよw怖いわ
372デフォルトの名無しさん (ワッチョイ d2eb-7T4N)
2017/11/04(土) 22:57:54.30ID:GShvEvWZ0 そもそも組み込みの標準入出力がどんなもんなのかすら想像できないw
373デフォルトの名無しさん (ワッチョイ c2e1-bcP5)
2017/11/04(土) 23:37:09.27ID:wPtyVAZ40 組み込みでは使えないなんていう次元ならそもそも標準ライブラリ使わないだろ
374デフォルトの名無しさん (ワッチョイ e178-HrHe)
2017/11/05(日) 00:56:53.05ID:1GSqUY/t0 デバッグ担当「なぁ?なんかログにアホとかハゲとかあるんだけどナニコレ?オレの事おちょくってんじゃねーだろうなぁ?!あ!!!!」
375デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 05:24:49.90ID:qHZ+DCMx0 streamの変更ムズいんだけど。
入力だとstreambufのunderflow実装すると思うけど、エラー発生したときどうやってistreamに通知すんの?
入力だとstreambufのunderflow実装すると思うけど、エラー発生したときどうやってistreamに通知すんの?
376デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:18:13.15ID:vRj0Z3ir0 struct lock_interrupt {
lock_interrupt() : masked(get_imask_ccr()) {
set_imask_ccr(1);
}
〜lock_interrupt() {
set_imask_ccr(masked);
}
bool masked;
};
// in some function...
lock_interrupt lk;
// do critical action, lets forget unmask interrupt flag!
}
このコード lock_interrupt() : masked(get_imask_ccr()) {
ここの部分の”:”ってどういう意味なの?
何となくコンストラクタとディストラクタがせっとになってるだろうなー
だから”}”に出会うと自動的にディストラクトされるコードだろうか?
ってくらいしかわからないレベルだから、、、、是非ともこのコードを
使い倒してみたい。
lock_interrupt() : masked(get_imask_ccr()) {
set_imask_ccr(1);
}
〜lock_interrupt() {
set_imask_ccr(masked);
}
bool masked;
};
// in some function...
lock_interrupt lk;
// do critical action, lets forget unmask interrupt flag!
}
このコード lock_interrupt() : masked(get_imask_ccr()) {
ここの部分の”:”ってどういう意味なの?
何となくコンストラクタとディストラクタがせっとになってるだろうなー
だから”}”に出会うと自動的にディストラクトされるコードだろうか?
ってくらいしかわからないレベルだから、、、、是非ともこのコードを
使い倒してみたい。
377デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 06:23:01.44ID:U5vPVsbz0 メンバイニシャライザでググれ
てか初等文法くらい勉強しろよ
てか初等文法くらい勉強しろよ
378デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:27:09.42ID:vRj0Z3ir0 >組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
ん?
普通はcoutを使わないという意味だろうか? それなら同意する。
#include <iostream>
を追加しただけで256kbyteを超えてしまう。これではマイコンじゃ使えないな。
もちろんcoutが使えないって意味だよ。使えないなら書き換える? まあそれは
むりだな。なぜなら書き換える場合でもiostramをインクルードするひつようがあるからね。
つまり書き換えなんてできない。つまり使えないし使わない。すなわち結論としては
Cのsprintfを使うってのが順当かと思う。
ん?
普通はcoutを使わないという意味だろうか? それなら同意する。
#include <iostream>
を追加しただけで256kbyteを超えてしまう。これではマイコンじゃ使えないな。
もちろんcoutが使えないって意味だよ。使えないなら書き換える? まあそれは
むりだな。なぜなら書き換える場合でもiostramをインクルードするひつようがあるからね。
つまり書き換えなんてできない。つまり使えないし使わない。すなわち結論としては
Cのsprintfを使うってのが順当かと思う。
379デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 06:30:56.15ID:U5vPVsbz0 >>376
あとついでにクラス全体を説明すると、コンストラクタで割り込みをマスクして
デストラクタで元に戻している。
こんな感じで使う
void foo () {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
.....
return;
}
割り込み禁止を解除するコードを書き忘れたり複数書いたりせずに済む。
あとついでにクラス全体を説明すると、コンストラクタで割り込みをマスクして
デストラクタで元に戻している。
こんな感じで使う
void foo () {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
.....
return;
}
割り込み禁止を解除するコードを書き忘れたり複数書いたりせずに済む。
380デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:35:39.18ID:vRj0Z3ir0 >メンバイニシャライザでググれ
キーワードありがとう。
ググってみた。メンバーイニシャライザってことはわかったんだがなんか特殊だな
masked = get_imask_ccr();
こういうことか? なるほど。
キーワードありがとう。
ググってみた。メンバーイニシャライザってことはわかったんだがなんか特殊だな
masked = get_imask_ccr();
こういうことか? なるほど。
381デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:06:11.45ID:vRj0Z3ir0 ここでlockという名称は何でもいいんですよね。要するにstructを生成するだけだから。
2か所でlockしたいような場合には使えないという欠点があるね。
void foo() {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
lock.unlock();
.....
.....
.....
lock.relock(); // ここでも割り込み禁止
if (...) {
....
return;
}
.....
return; // ここでlock(割り込み禁止)した部分が解除される。
}
こうするにはどうしたらいい?
2か所でlockしたいような場合には使えないという欠点があるね。
void foo() {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
lock.unlock();
.....
.....
.....
lock.relock(); // ここでも割り込み禁止
if (...) {
....
return;
}
.....
return; // ここでlock(割り込み禁止)した部分が解除される。
}
こうするにはどうしたらいい?
382デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:09:12.73ID:vRj0Z3ir0 なんでclassにしないでstructなのだろうか?
383デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:26:22.28ID:vRj0Z3ir0 C++の本見るとcout,cinの例が必ず出ているが、これは大きな間違いだな。なぜなら
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。
384デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:28:47.99ID:vRj0Z3ir0 というか、もっとmiimaizeしたiostream実装しろよな。といいたい。
385デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 08:04:41.58ID:3uuR82Hq0 >>381
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
{
lock_intterupt lock; // 以下割り込み禁止
if(...){
...
return;
}
}
...
...
{
lock_interrupt lock; // ここでも割り込み禁止
if(...){
...
return;
}
}
return; // ここでlock(割り込み禁止)した部分が解除される。
}
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
{
lock_intterupt lock; // 以下割り込み禁止
if(...){
...
return;
}
}
...
...
{
lock_interrupt lock; // ここでも割り込み禁止
if(...){
...
return;
}
}
return; // ここでlock(割り込み禁止)した部分が解除される。
}
386デフォルトの名無しさん (ワッチョイ d2fb-K7eU)
2017/11/05(日) 09:19:24.45ID:fHP76uUy0 メンバーイニシャライザーなんて上級者向け
387デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:44:11.28ID:vRj0Z3ir0 >>ブロックも知らんのかよ...
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。
388デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:47:03.86ID:vRj0Z3ir0 >メンバーイニシャライザーなんて上級者向け
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。
389デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:49:48.35ID:vRj0Z3ir0 lock_interrupt(){
masked = get_imask_ccr();
set_imask_ccr(1);
}
これでいいじゃん。
masked = get_imask_ccr();
set_imask_ccr(1);
}
これでいいじゃん。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ [蚤の市★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 「働いて働いて」の流行語大賞に懸念 「言葉が独り歩き」 過労自殺遺族 [尺アジ★]
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化へ 過去10年間に使用のメールアドレスや電話番号等も★3 [Hitzeschleier★]
- 【EV新税】最大2万4千円で検討 28年から、普及妨げると異論も [蚤の市★]
- 【山形】クマ駆除で誤射した猟友会隊員に町が1663万円請求へ...弾当たり男性大けが2023年 小国町 [nita★]
- 愛国者「中国と戦争になったら100%勝てる」 [834922174]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★3
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★2
- 【悲報】高市早苗、被災民に対し「自分の命くらいは自分で守ってくださいね」と切り捨てし大炎上 [339712612]
- 🏡
- 【高市悲報】JA、発狂www「臨時に経費率を下げるので、どうかお米券を使ってください」 [246620176]
