エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
2018/07/01(日) 03:44:53.53ID:4MMF8cDN
720デフォルトの名無しさん
2018/11/10(土) 10:11:13.71ID:D3ftxXru >>717
リテラルという言葉に「文字列」的なイメージを持っているならそれはなくした方がいいよ
リテラルという言葉に「文字列」的なイメージを持っているならそれはなくした方がいいよ
721デフォルトの名無しさん
2018/11/10(土) 10:14:48.88ID:D3ftxXru >>717
さらに追加
言うように3や3.14を定数と呼ぶとしても、リテラルと呼ぶことを排除できないと思うよ。
例えばこうなる。
「ソース中に3や3.14などの定数を記述する場合は数値リテラルを用いる。
数値リテラルは8進数、16進数、10進数の3種に大別されそれぞれ以下の形式である」
など。
さらに追加
言うように3や3.14を定数と呼ぶとしても、リテラルと呼ぶことを排除できないと思うよ。
例えばこうなる。
「ソース中に3や3.14などの定数を記述する場合は数値リテラルを用いる。
数値リテラルは8進数、16進数、10進数の3種に大別されそれぞれ以下の形式である」
など。
722デフォルトの名無しさん
2018/11/10(土) 10:16:41.25ID:p/77GMIT そうなの? TIのCCSってのを使いはじめたところだが、warning出まくりでいやになる。
TI独自の問題? それとも警告レベル下げてるんじゃない。
問題なしだなんてとんでもない。問題大ありだよ。
そもそもC++ってCompileが全く通らない。なんでこんなにいちいちエラーをだすのかと腹が立つ。w
TI独自の問題? それとも警告レベル下げてるんじゃない。
問題なしだなんてとんでもない。問題大ありだよ。
そもそもC++ってCompileが全く通らない。なんでこんなにいちいちエラーをだすのかと腹が立つ。w
723デフォルトの名無しさん
2018/11/10(土) 10:22:01.23ID:0TCzpeyH >>722
お前なあ。 素人さんだったんだな
お前なあ。 素人さんだったんだな
724デフォルトの名無しさん
2018/11/10(土) 10:23:11.75ID:D3ftxXru >>714
c でも c++ でも const char * 版だけ作っておけばいい
c でも c++ でも const char * 版だけ作っておけばいい
725デフォルトの名無しさん
2018/11/10(土) 10:23:27.63ID:p/77GMIT >>721
>「ソース中に3や3.14などの定数を記述する場合は数値リテラルを用いる。
>数値リテラルは8進数、16進数、10進数の3種に大別されそれぞれ以下の形式である」
違和感あるのは俺だけ?
「ソース中に3や3.14などの定数を記述する場合がある。。
定数は8進数、16進数、10進数の3種に大別されそれぞれ以下の形式である」
このほうが自然とおもうが、、、
>「ソース中に3や3.14などの定数を記述する場合は数値リテラルを用いる。
>数値リテラルは8進数、16進数、10進数の3種に大別されそれぞれ以下の形式である」
違和感あるのは俺だけ?
「ソース中に3や3.14などの定数を記述する場合がある。。
定数は8進数、16進数、10進数の3種に大別されそれぞれ以下の形式である」
このほうが自然とおもうが、、、
726デフォルトの名無しさん
2018/11/10(土) 10:33:18.23ID:ZI6ornmy 俺はこっちの説明の方がしっくりくるな。リテラルと定数は意味合いが違う。
https://ja.wikipedia.org/wiki/定数_(プログラミング)
https://ja.wikipedia.org/wiki/定数_(プログラミング)
727デフォルトの名無しさん
2018/11/10(土) 10:47:21.32ID:9vqEahoA >>725
一般的な意味での定数なら8,16,10進数に限らず3進数だろうが78進数だろうが好きに考えることができるけど、ここで8,16,10進数だと限定していっているのは、あくまでもC/C++の構文の要素である「数値リテラル」な訳だから、全く別の概念として明確に区別して考えた方がいいよ。
言語仕様のBNFとか見てくればもう少し理解できるようになるかも。
一般的な意味での定数なら8,16,10進数に限らず3進数だろうが78進数だろうが好きに考えることができるけど、ここで8,16,10進数だと限定していっているのは、あくまでもC/C++の構文の要素である「数値リテラル」な訳だから、全く別の概念として明確に区別して考えた方がいいよ。
言語仕様のBNFとか見てくればもう少し理解できるようになるかも。
728デフォルトの名無しさん
2018/11/10(土) 11:43:56.10ID:p/77GMIT Wikiの説明はわかりやすいね。
でもconstのサンプルにはメッセージテーブルとかが良くかいてあるけど、ROM配置
じゃなくてRAM配置になるんだね。組み込みだとRAMが少ないから使えない。
constは役立たずというか貴重なRAMを消費する邪魔もの。
でもconstのサンプルにはメッセージテーブルとかが良くかいてあるけど、ROM配置
じゃなくてRAM配置になるんだね。組み込みだとRAMが少ないから使えない。
constは役立たずというか貴重なRAMを消費する邪魔もの。
729デフォルトの名無しさん
2018/11/10(土) 11:44:26.40ID:/RO766KL そういう話ではなく
コンピュータサイエンスにおける「リテラル」の用法についての批判でしょ。
恐らくコンピュータサイエンスを学び始めたばかりの日本人が、
リテラルという用語を使い始めた英米の専門家に対して行う、
英語として不自然である、という批判。
コンピュータサイエンスにおける「リテラル」の用法についての批判でしょ。
恐らくコンピュータサイエンスを学び始めたばかりの日本人が、
リテラルという用語を使い始めた英米の専門家に対して行う、
英語として不自然である、という批判。
730デフォルトの名無しさん
2018/11/10(土) 11:47:06.40ID:p/77GMIT731デフォルトの名無しさん
2018/11/10(土) 11:53:57.16ID:/RO766KL >>730
頼むからまずはcの基本を勉強してくれ
頼むからまずはcの基本を勉強してくれ
732デフォルトの名無しさん
2018/11/10(土) 12:03:55.29ID:jxhvzDRc733デフォルトの名無しさん
2018/11/10(土) 12:49:34.25ID:hWkce6N8 これのどこが、「初心者歓迎」なんだよ。
734デフォルトの名無しさん
2018/11/10(土) 12:54:49.76ID:bQHYOdt1 嘘つきは歓迎しない
735デフォルトの名無しさん
2018/11/10(土) 12:55:21.30ID:fEBEuUFJ >>819が悪い。反省しろ
736デフォルトの名無しさん
2018/11/10(土) 12:57:37.55ID:hWkce6N8 a = a+10;
の意味も分からない人も、受け入れろよ。
の意味も分からない人も、受け入れろよ。
737デフォルトの名無しさん
2018/11/10(土) 13:51:00.28ID:4Oh2WWEl >>819にあつい期待
738デフォルトの名無しさん
2018/11/10(土) 14:10:49.25ID:AVLSNDa3 >>736
そこを否定している人はいない
そこを否定している人はいない
739デフォルトの名無しさん
2018/11/10(土) 19:49:46.05ID:p/77GMIT >頼むからまずはcの基本を勉強してくれ
これが基本じゃなのか? 高度な質問をしているつもりはないが、、、
頼むからまずは基本に答えてくれよ。
まずVSなど他のC++はしらない。自分の感想はTIのCCSコンパイラについてだけ。しかし一般的に
組み込み系には通じると思う。
const 定義すると.bssに配置される。.bssはRAMである。組み込みマイコンではRAMとROMに分かれて
いるがRAMは非常に貴重だ。ちなみに今使ってるCPUは4kしかない。ROMは256kバイトある。
constでメニューテーブルなどを書くのは愚の骨頂だろ。そもそもconstなどなければこういう間違いは起こらない。
故にconstは有害だ。
どうだ理路整然としてるだろ。
これが基本じゃなのか? 高度な質問をしているつもりはないが、、、
頼むからまずは基本に答えてくれよ。
まずVSなど他のC++はしらない。自分の感想はTIのCCSコンパイラについてだけ。しかし一般的に
組み込み系には通じると思う。
const 定義すると.bssに配置される。.bssはRAMである。組み込みマイコンではRAMとROMに分かれて
いるがRAMは非常に貴重だ。ちなみに今使ってるCPUは4kしかない。ROMは256kバイトある。
constでメニューテーブルなどを書くのは愚の骨頂だろ。そもそもconstなどなければこういう間違いは起こらない。
故にconstは有害だ。
どうだ理路整然としてるだろ。
740デフォルトの名無しさん
2018/11/10(土) 19:53:11.97ID:dq/THaAw741さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/10(土) 19:53:33.64ID:GxjHn4EZ トイレは水を大量に消費する。
ここには十分な水がない。
よってトイレは有害だ。
ここには十分な水がない。
よってトイレは有害だ。
743デフォルトの名無しさん
2018/11/10(土) 20:01:42.68ID:2010ximS constだけで飯が3杯食えるスレってあったよな確か。
飯一食1000円とすると、3杯で3000円。
constには3000円の価値があるってことだ。
しらべえによると、3文は90円だそうだから、早起きの33倍、constのほうが価値があるってことだ。
飯一食1000円とすると、3杯で3000円。
constには3000円の価値があるってことだ。
しらべえによると、3文は90円だそうだから、早起きの33倍、constのほうが価値があるってことだ。
744デフォルトの名無しさん
2018/11/10(土) 20:03:36.88ID:p/77GMIT >>741
そういうトイレは有害だ。ただしい。
結局んところconstはリードオンリーの意味しかない。リードオンリーのテーブルを作るのであればconstexprを
使えばいい。
リードオンリーの変数って何か意味があるんだろうか? 先ずは変数でありながら変更できない
のだから、実質的には変数ではない。本質的に存在自体が矛盾している。
たとえばリードオンリーであってもロックしたりアンロックできるのであれば意味がある。一旦ロックしたら
そのまんまってのでは、録に役にたたない。
そういうトイレは有害だ。ただしい。
結局んところconstはリードオンリーの意味しかない。リードオンリーのテーブルを作るのであればconstexprを
使えばいい。
リードオンリーの変数って何か意味があるんだろうか? 先ずは変数でありながら変更できない
のだから、実質的には変数ではない。本質的に存在自体が矛盾している。
たとえばリードオンリーであってもロックしたりアンロックできるのであれば意味がある。一旦ロックしたら
そのまんまってのでは、録に役にたたない。
745デフォルトの名無しさん
2018/11/10(土) 20:04:25.53ID:2010ximS >>744
ヒント:メモリーフェンス。
ヒント:メモリーフェンス。
746デフォルトの名無しさん
2018/11/10(土) 20:09:30.23ID:p/77GMIT >>740
ん。それは矛盾するだろ。基本的にC++のconstは変数だ。だから初期値は代入する。
それ以後はアクセスできない。少なくともRAMに配置する変数だ。ということは言える。
.bssに配置されるのかどうかはリンカでコントロールできるのかもしれない。ROMにだって無理やり配置は
可能だ。そういう無理やりのことをいってるのではない。あくまで自然なありかたとしてのconstだ。
ん。それは矛盾するだろ。基本的にC++のconstは変数だ。だから初期値は代入する。
それ以後はアクセスできない。少なくともRAMに配置する変数だ。ということは言える。
.bssに配置されるのかどうかはリンカでコントロールできるのかもしれない。ROMにだって無理やり配置は
可能だ。そういう無理やりのことをいってるのではない。あくまで自然なありかたとしてのconstだ。
747デフォルトの名無しさん
2018/11/10(土) 20:10:49.63ID:p/77GMIT >>745
言いたいことはわかるが、チャンと説明してみて、自分の間違いに気が付いた方がいい。
言いたいことはわかるが、チャンと説明してみて、自分の間違いに気が付いた方がいい。
748デフォルトの名無しさん
2018/11/10(土) 20:11:09.68ID:2010ximS 変数じゃなくてもメンバはconstで修飾できるぞ。
749さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/10(土) 20:16:00.60ID:zzsAm3V1 変数のconst,
文字列リテラルのconst,
メンバー関数のconst,
関数の仮引数のconst
文字列リテラルのconst,
メンバー関数のconst,
関数の仮引数のconst
750デフォルトの名無しさん
2018/11/10(土) 20:24:15.32ID:p/77GMIT >>749
それは知らなかったが、その肝はなんなの? 結局はリードオンリーってディフェンスしたいって
ことではないの?
物理的に書き込み可能ならリードオンリーにしてもディフェンスになんかならないでしょ。
ディフェンスするならライトプロテクト機能がどうしても必要だからね。
アクセスできないようにするには、Privateにして不可視にすればいい。これでディフェンスになる。
グローバルにさらしてなお且つリードオンリーにしておきたい変数がはたして必要だろうか?
必要性はないと思う。
具体的にどんな意味があるのよ。
それは知らなかったが、その肝はなんなの? 結局はリードオンリーってディフェンスしたいって
ことではないの?
物理的に書き込み可能ならリードオンリーにしてもディフェンスになんかならないでしょ。
ディフェンスするならライトプロテクト機能がどうしても必要だからね。
アクセスできないようにするには、Privateにして不可視にすればいい。これでディフェンスになる。
グローバルにさらしてなお且つリードオンリーにしておきたい変数がはたして必要だろうか?
必要性はないと思う。
具体的にどんな意味があるのよ。
751デフォルトの名無しさん
2018/11/10(土) 20:25:53.82ID:2010ximS 知らないで難癖付けてたのかよ。
752デフォルトの名無しさん
2018/11/10(土) 20:26:38.74ID:p/77GMIT >変数じゃなくてもメンバはconstで修飾できるぞ。
出来て何の意味があるのかということが知りたい。意味がないなら邪魔だな。
出来て何の意味があるのかということが知りたい。意味がないなら邪魔だな。
753デフォルトの名無しさん
2018/11/10(土) 20:30:17.34ID:2010ximS 高橋マナ著やさしいC++から始めたほうがよい。
754さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/10(土) 20:37:38.39ID:GxjHn4EZ メンバ関数プロトタイプの後ろをconstで修飾すれば、その関数の中ではthisがconstなポインタになり、
その関数の中ではconstではないメンバー関数は呼べなくなる。
つまり、constキャストを使わないと、thisを変更できなくなる。
その関数の中ではconstではないメンバー関数は呼べなくなる。
つまり、constキャストを使わないと、thisを変更できなくなる。
755デフォルトの名無しさん
2018/11/10(土) 20:38:58.59ID:AVLSNDa3756さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/10(土) 20:43:43.52ID:GxjHn4EZ 関数の仮引数の型をconstで修飾すると、対応する実引数は変更できなくなる。
ただし、その仮引数にconstではない引数を渡すことはできる。
const付ければ多分変更されない。変更しようとすると、多分コンパイルエラー。
ただし、その仮引数にconstではない引数を渡すことはできる。
const付ければ多分変更されない。変更しようとすると、多分コンパイルエラー。
757さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/10(土) 20:46:16.75ID:GxjHn4EZ struct X
{
void func1();
void func2() const;
};
func1からfunc2を呼び出せるが、その逆はできない。
{
void func1();
void func2() const;
};
func1からfunc2を呼び出せるが、その逆はできない。
758さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/10(土) 20:51:32.82ID:GxjHn4EZ void func(const int& n)
{
...
}
funcの内部では(constキャストしないと)nは変更できない。多分。裏技使えば出来るかも。
{
...
}
funcの内部では(constキャストしないと)nは変更できない。多分。裏技使えば出来るかも。
759さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/10(土) 20:56:23.68ID:GxjHn4EZ 組み込みでもC++使うんか?
760デフォルトの名無しさん
2018/11/10(土) 21:00:48.87ID:hLxIIZfE761デフォルトの名無しさん
2018/11/10(土) 21:06:11.15ID:p/77GMIT >>754
説得力がありそうな意見だが、残念ながら意味がよくわからないので一寸調べてみた。
2のことかな。
メリット
1.参照渡しに const 修飾子をつけることにより、引数の中身を書き換えないことを宣言することができる。
ポインタ渡しに const 修飾子をつけることにより、引数の中身を書き換えないことを宣言することができる。
2.const オブジェクトを引数にすると、そのオブジェクトのなかで呼び出せるメソッドは const メンバ関数のみ。
1はたしかにメリットがあると言わざるを得ない。
2は使い方次第だな。自分の場合はわざわざそこまで面倒なことはしない。
説得力がありそうな意見だが、残念ながら意味がよくわからないので一寸調べてみた。
2のことかな。
メリット
1.参照渡しに const 修飾子をつけることにより、引数の中身を書き換えないことを宣言することができる。
ポインタ渡しに const 修飾子をつけることにより、引数の中身を書き換えないことを宣言することができる。
2.const オブジェクトを引数にすると、そのオブジェクトのなかで呼び出せるメソッドは const メンバ関数のみ。
1はたしかにメリットがあると言わざるを得ない。
2は使い方次第だな。自分の場合はわざわざそこまで面倒なことはしない。
762デフォルトの名無しさん
2018/11/10(土) 21:07:06.71ID:p/77GMIT >>755
一理ある。
一理ある。
763デフォルトの名無しさん
2018/11/10(土) 21:11:56.84ID:p/77GMIT >>759
自分も最近しったんだが、組み込みで使うとC++は非常に効果を発揮する。(らしい。あまりできてない、、、)
すくなくても、クラスやnamespaceを使えるだけでも大いに助かる。Cと滅茶苦茶相性がいい。
ごちゃ混ぜでもスパゲティでも何ら問題ない。
組み込みでは絶対にC++を使うべき。
自分も最近しったんだが、組み込みで使うとC++は非常に効果を発揮する。(らしい。あまりできてない、、、)
すくなくても、クラスやnamespaceを使えるだけでも大いに助かる。Cと滅茶苦茶相性がいい。
ごちゃ混ぜでもスパゲティでも何ら問題ない。
組み込みでは絶対にC++を使うべき。
764デフォルトの名無しさん
2018/11/10(土) 21:18:06.51ID:p/77GMIT >マニュアルで .cinit section を検索しろよ
ありがと。検索してみます。
ありがと。検索してみます。
765デフォルトの名無しさん
2018/11/10(土) 21:30:31.24ID:0TCzpeyH766さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/10(土) 21:32:50.82ID:GxjHn4EZ 初心を忘れぬ初心者歓迎ってことで
767デフォルトの名無しさん
2018/11/10(土) 21:35:12.51ID:D3ftxXru >>746
君は何も知らずに妄想だけから判断して>>730の考えに至ったわけじゃん。>>714からの流れでね。
関数の引数を char* と const char * にしたときの違いは、
君が勘違いしている、ではなく、なにかを読んで知ろうともせず
自分だけの想像で決めつけているような「このポインタが定数(変更不可)かどうか」ではなく、
ポインタが差している char 値が変更不可かどうかなんだ。
で、
君の考えはおそらくここに書いてないものも含めて8割がた
間違ってるから誰にもそれを一々教えることは無理なんだよ。
だから本を読むとかして基本を学んで欲しい。
今の君は想像で英語に文句つけてるくせにアルファベットも知らない子供みたいな状態。
君は何も知らずに妄想だけから判断して>>730の考えに至ったわけじゃん。>>714からの流れでね。
関数の引数を char* と const char * にしたときの違いは、
君が勘違いしている、ではなく、なにかを読んで知ろうともせず
自分だけの想像で決めつけているような「このポインタが定数(変更不可)かどうか」ではなく、
ポインタが差している char 値が変更不可かどうかなんだ。
で、
君の考えはおそらくここに書いてないものも含めて8割がた
間違ってるから誰にもそれを一々教えることは無理なんだよ。
だから本を読むとかして基本を学んで欲しい。
今の君は想像で英語に文句つけてるくせにアルファベットも知らない子供みたいな状態。
768デフォルトの名無しさん
2018/11/10(土) 21:35:33.57ID:p/77GMIT >高橋マナ著やさしいC++から始めたほうがよい。
C++は使い始めたばかりでよくわからないが、多重人格的で昔のC++と最近のC++が混在している
気がする。C++は糞って言ってる人は昔のC++をみていて、C++は最高って言ってる人は最近追加
された仕様を見ていると思う。
だからC++は基礎からやると駄目な言語だね。基礎は飛ばしてしまったほうがいい。
追加された仕様部分が秀逸だね。
だからあくまでも自分の意見だが「やさしい、、、、」ってのは寧ろ難解で駄目なのが多い気がする。
特にC++の生みの親が書いたような本が最も駄目だと思う。
C++は使い始めたばかりでよくわからないが、多重人格的で昔のC++と最近のC++が混在している
気がする。C++は糞って言ってる人は昔のC++をみていて、C++は最高って言ってる人は最近追加
された仕様を見ていると思う。
だからC++は基礎からやると駄目な言語だね。基礎は飛ばしてしまったほうがいい。
追加された仕様部分が秀逸だね。
だからあくまでも自分の意見だが「やさしい、、、、」ってのは寧ろ難解で駄目なのが多い気がする。
特にC++の生みの親が書いたような本が最も駄目だと思う。
769デフォルトの名無しさん
2018/11/10(土) 21:37:16.52ID:0TCzpeyH ID:p/77GMIT
もうこいつの相手をするのはやめよう。 単なる荒しだわ。 ここで終わり
もうこいつの相手をするのはやめよう。 単なる荒しだわ。 ここで終わり
770デフォルトの名無しさん
2018/11/10(土) 21:37:40.22ID:D3ftxXru771デフォルトの名無しさん
2018/11/10(土) 21:39:45.42ID:p/77GMIT772デフォルトの名無しさん
2018/11/10(土) 21:45:54.25ID:9vqEahoA >>768
C++は近年追加された仕様の方が複雑怪奇で迷走しているという意見もあるし、勝手な思い込みで基礎を蔑ろにするのはやめた方がいい。
constの理解についても、組み込みのCをやった経験に基づく自分の経験と思い込みを当然のものとして他人の話を聞くから理解が進まないのでは?
RAMにおくかROMに置くかとかも本来はC言語としては未定義とか処理系依存な部分であって、組み込みにおける常識をベースにCの言語仕様を理解しようとするから齟齬が生まれるのだと思う。
C++は近年追加された仕様の方が複雑怪奇で迷走しているという意見もあるし、勝手な思い込みで基礎を蔑ろにするのはやめた方がいい。
constの理解についても、組み込みのCをやった経験に基づく自分の経験と思い込みを当然のものとして他人の話を聞くから理解が進まないのでは?
RAMにおくかROMに置くかとかも本来はC言語としては未定義とか処理系依存な部分であって、組み込みにおける常識をベースにCの言語仕様を理解しようとするから齟齬が生まれるのだと思う。
773デフォルトの名無しさん
2018/11/10(土) 21:48:12.38ID:bQHYOdt1 >>761でよかったのか
まあ腑に落ちたようでなにより
まあ腑に落ちたようでなにより
774デフォルトの名無しさん
2018/11/10(土) 21:48:35.96ID:dq/THaAw 組み込みだってconst変数がRAMに置かれるなんて常識は無いよ。この人の思い込み。
775デフォルトの名無しさん
2018/11/10(土) 22:12:42.07ID:mjExs0JA このスレにいるような低学歴知恵遅れは
引数だけでなくメソッドにもconstつけるべきというのすら分かってない
クラスの引数にconstつける意味を分かってなさそうだからな
引数だけでなくメソッドにもconstつけるべきというのすら分かってない
クラスの引数にconstつける意味を分かってなさそうだからな
776デフォルトの名無しさん
2018/11/10(土) 23:08:29.94ID:yzCMB8/E セクション配置の話なのにメソッドのconst関係ねーだろ
意味わかってないのはてめーだ、いつものことだが
意味わかってないのはてめーだ、いつものことだが
777デフォルトの名無しさん
2018/11/10(土) 23:17:52.02ID:mjExs0JA やっぱり低学歴知恵遅れはなにも分かってない
778デフォルトの名無しさん
2018/11/11(日) 02:36:59.36ID:ARqR0CiK bss セクションは、リンカの文書を見れば?
メモリ配置と、文法のconst は関係ない。
基本的に、言語の文法と実装は、関係ない
実装は、JavaScript の文法に関係ない、DOM とか
できる限り、const を使うべき!
使っても、マイナスにはならないから
たぶん、Effective 本にも書いてある
メモリ配置と、文法のconst は関係ない。
基本的に、言語の文法と実装は、関係ない
実装は、JavaScript の文法に関係ない、DOM とか
できる限り、const を使うべき!
使っても、マイナスにはならないから
たぶん、Effective 本にも書いてある
779デフォルトの名無しさん
2018/11/11(日) 05:11:06.80ID:mI2pOyKp >組み込みだってconst変数がRAMに置かれるなんて常識は無いよ。この人の思い込み。
そのことを初心者にもわかるように詳しく説明してみてください。といっても解り過ぎている人には
初心者が何がわからないのかわからないとおもう。解らない人はどこまでもわからない。なので
質問を変えて差しあげます。
質問1.constは多用な機能がある。そしてその機能を実現するには最初の一回だけは書き換え
可能である必要があると思うが、もしconstをROMに配置してその機能をどう実現すればいいのだろうか?
実現不可能だとおもう。
このことが正しいならconstは当然RAMに配置されるのが常識だろう。いかがだろうか?
質問2.もしconstが一度も書き換え可能である必要がないとすれば、constはROMに配置
されるべきだろう。だからconstは必ずROMに配置すべきだというのが常識となる。この考えは
どこがまちがっているだろうか?
質問3.質問1と質問2の前提はどちらが正しいのだろうか?
そのことを初心者にもわかるように詳しく説明してみてください。といっても解り過ぎている人には
初心者が何がわからないのかわからないとおもう。解らない人はどこまでもわからない。なので
質問を変えて差しあげます。
質問1.constは多用な機能がある。そしてその機能を実現するには最初の一回だけは書き換え
可能である必要があると思うが、もしconstをROMに配置してその機能をどう実現すればいいのだろうか?
実現不可能だとおもう。
このことが正しいならconstは当然RAMに配置されるのが常識だろう。いかがだろうか?
質問2.もしconstが一度も書き換え可能である必要がないとすれば、constはROMに配置
されるべきだろう。だからconstは必ずROMに配置すべきだというのが常識となる。この考えは
どこがまちがっているだろうか?
質問3.質問1と質問2の前提はどちらが正しいのだろうか?
780デフォルトの名無しさん
2018/11/11(日) 05:52:29.65ID:mI2pOyKp 完璧な質問のつもりだったが、質問を書いてみて今初めて見落としている穴が分かった。
781デフォルトの名無しさん
2018/11/11(日) 06:05:13.74ID:zHXRpmYL 質問して最後に分かるつまり
ケツの穴である
ケツの穴である
782デフォルトの名無しさん
2018/11/11(日) 09:46:34.66ID:mI2pOyKp >>772
C++は低レベルの処理に向いているのだから当然のように処理系のハードとの接点が多い。
処理系依存の部分はC++でフォローできないというだけで、だからといって処理系を意識しないでいい
ということにはならない。C++を使う場合には処理系を強く意識する必要がある。
>できる限り、const を使うべき! 使っても、マイナスにはならないから
処理系を強く意識するなら、こういう結論にはならないと思う。constは意に反してRAMに配置され得る。
組み込み系においては、RAMを多用すればすぐにRAMがパンクする。
constはいくつかのメリットがあることは解ったが、無条件に使えばやはり有害になる。少なくとも自分が使った
限りでは滅茶滅茶有害だった。
では被害を少なくするにはどうすればよいか? それに答えてほしい。
static const char* s_A; // -> BSS section
static const char* s_B = "b";// -> Data section
static const char* const s_C = "c";// -> Data section
static const char s_D[] = "d";// -> Read only Data section
static char s_E[] = "e";// -> Data section
static char s_F[128]; // -> BSS section
const char* s_B = "b";// -> ここで嵌った。これは.bssに配置される。
C++は低レベルの処理に向いているのだから当然のように処理系のハードとの接点が多い。
処理系依存の部分はC++でフォローできないというだけで、だからといって処理系を意識しないでいい
ということにはならない。C++を使う場合には処理系を強く意識する必要がある。
>できる限り、const を使うべき! 使っても、マイナスにはならないから
処理系を強く意識するなら、こういう結論にはならないと思う。constは意に反してRAMに配置され得る。
組み込み系においては、RAMを多用すればすぐにRAMがパンクする。
constはいくつかのメリットがあることは解ったが、無条件に使えばやはり有害になる。少なくとも自分が使った
限りでは滅茶滅茶有害だった。
では被害を少なくするにはどうすればよいか? それに答えてほしい。
static const char* s_A; // -> BSS section
static const char* s_B = "b";// -> Data section
static const char* const s_C = "c";// -> Data section
static const char s_D[] = "d";// -> Read only Data section
static char s_E[] = "e";// -> Data section
static char s_F[128]; // -> BSS section
const char* s_B = "b";// -> ここで嵌った。これは.bssに配置される。
783デフォルトの名無しさん
2018/11/11(日) 10:28:56.96ID:R/5kDxSy ID:mI2pOyKp = ID:p/77GMIT
784デフォルトの名無しさん
2018/11/11(日) 13:40:16.62ID:96wp+TZd '\0' と L'\0' って違うんだな
785デフォルトの名無しさん
2018/11/11(日) 13:56:09.62ID:D6x0hMat すいません、C++でゲームやGUIアプリなどを開発したいのですが
メソッド抽出やクラス設計といったプログラム設計に関する書籍って
どんなものを読めばいいんでしょうか?おすすめとかありますか?
ググっても、プログラム設計の本があまり見つかりませんでした・・
デザインパターンに関するものはあったんですが
もうすこし初歩的な内容のものがあれば教えてくださいm(__)m
メソッド抽出やクラス設計といったプログラム設計に関する書籍って
どんなものを読めばいいんでしょうか?おすすめとかありますか?
ググっても、プログラム設計の本があまり見つかりませんでした・・
デザインパターンに関するものはあったんですが
もうすこし初歩的な内容のものがあれば教えてくださいm(__)m
786デフォルトの名無しさん
2018/11/11(日) 14:37:43.40ID:heRDhQmF >>784
L'\0' はUnicodeだから、必ず2バイトなので、 0x0000
L'\0' はUnicodeだから、必ず2バイトなので、 0x0000
787はちみつ餃子 ◆8X2XSCHEME
2018/11/11(日) 14:45:39.68ID:u4gHMHSK >>786
ワイド文字の内訳は未定義で、 Unicode になるとは限らないし、その大きさも決まってない。
2 バイトになって欲しいなら L ではなく u を使うと UTF-16 になることは保証されるよ。
ワイド文字の内訳は未定義で、 Unicode になるとは限らないし、その大きさも決まってない。
2 バイトになって欲しいなら L ではなく u を使うと UTF-16 になることは保証されるよ。
788デフォルトの名無しさん
2018/11/11(日) 14:47:19.00ID:FGv1lmue789デフォルトの名無しさん
2018/11/11(日) 16:46:50.89ID:FyMTXkCl >>782
> const char* s_B = "b";// -> ここで嵌った。これは.bssに配置される。
s_Bはconst宣言されてない只の変数だからいいとして
"b"がconstだけど.bssに配置されるってこと?
> const char* s_B = "b";// -> ここで嵌った。これは.bssに配置される。
s_Bはconst宣言されてない只の変数だからいいとして
"b"がconstだけど.bssに配置されるってこと?
790デフォルトの名無しさん
2018/11/11(日) 17:54:46.45ID:96wp+TZd791デフォルトの名無しさん
2018/11/11(日) 21:39:09.29ID:+3cDuFRf >>785
The Craft of Text Editing
The Craft of Text Editing
792デフォルトの名無しさん
2018/11/11(日) 21:59:31.70ID:YkGULP39 それ、C++でもないただのCでEmacs風エディタ作るっていう古臭い本だろ。
しかも一般的な設計論みたいなものはほとんどなくてエディタの実装テクニックがメイン。
しかも一般的な設計論みたいなものはほとんどなくてエディタの実装テクニックがメイン。
793デフォルトの名無しさん
2018/11/11(日) 22:09:04.04ID:+3cDuFRf 本当に読んだ事があればそんな感想にならないと思う
794はちみつ餃子 ◆8X2XSCHEME
2018/11/12(月) 01:54:44.09ID:Y5bf1y1v795デフォルトの名無しさん
2018/11/12(月) 03:01:49.28ID:+lslfuGS そういうのはお母さんに頼めよ
796デフォルトの名無しさん
2018/11/12(月) 06:57:24.59ID:kRp5sQt8 使えねえコテだわ
797デフォルトの名無しさん
2018/11/12(月) 14:29:20.92ID:AHq3PbYw 初心者です。
bool変数hogeの真偽で反対の代入をする場合につきまして、
int a, b;
if (hoge) { a=1; b=2; } else { a=2; a=1; }
と
int a=1, b=2;
if (! hoge) { a=2; a=1; }
はどちらのほうが好ましい書き方ですか?
完全に好みの問題ですか?
bool変数hogeの真偽で反対の代入をする場合につきまして、
int a, b;
if (hoge) { a=1; b=2; } else { a=2; a=1; }
と
int a=1, b=2;
if (! hoge) { a=2; a=1; }
はどちらのほうが好ましい書き方ですか?
完全に好みの問題ですか?
798デフォルトの名無しさん
2018/11/12(月) 14:48:27.20ID:pBxTFjIu 訊くなら正確に書いてくれ
799デフォルトの名無しさん
2018/11/12(月) 15:37:05.52ID:D6ILV7Jx >>797
偽(false)の時だけならif(!hoge){...}の方。
偽(false)の時だけならif(!hoge){...}の方。
800デフォルトの名無しさん
2018/11/12(月) 15:38:56.82ID:Tf74ZWQr 新スレを作りました。利用してください。
0からの、超初心者C++相談室
https://mevius.5ch.net/test/read.cgi/tech/1542002113/
***********************************************************************
1 名前:デフォルトの名無しさん[] 投稿日:2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr
何にも知らない0からの出発、超初心者のためのC++相談室
***********************************************************************
0からの、超初心者C++相談室
https://mevius.5ch.net/test/read.cgi/tech/1542002113/
***********************************************************************
1 名前:デフォルトの名無しさん[] 投稿日:2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr
何にも知らない0からの出発、超初心者のためのC++相談室
***********************************************************************
801デフォルトの名無しさん
2018/11/12(月) 17:46:22.89ID:AHq3PbYw802785
2018/11/12(月) 18:39:23.46ID:x/TsFEZq803デフォルトの名無しさん
2018/11/12(月) 18:44:42.38ID:D6ILV7Jx >>801
そこまで初心者なら一回GP0触った方がいいかもね。
PG0がプログラミング研修に向いている理由
https://qiita.com/nakka_/items/16c99e3279c87a70fafc
そこまで初心者なら一回GP0触った方がいいかもね。
PG0がプログラミング研修に向いている理由
https://qiita.com/nakka_/items/16c99e3279c87a70fafc
804デフォルトの名無しさん
2018/11/12(月) 20:59:20.33ID:CbD+/v6g int a=1;
int b=2;
if (!hoge) {
const int c = a;
a=b;
b=c;
}
俺だったらこうかな。
int b=2;
if (!hoge) {
const int c = a;
a=b;
b=c;
}
俺だったらこうかな。
805デフォルトの名無しさん
2018/11/13(火) 18:27:28.63ID:90McxFB4 >>796
+1
+1
806デフォルトの名無しさん
2018/11/13(火) 18:30:06.08ID:90McxFB4 >>797
int a, b = 2 - !!hoge, 1 + !!hoge;
int a, b = 2 - !!hoge, 1 + !!hoge;
807デフォルトの名無しさん
2018/11/13(火) 18:38:22.78ID:ZGzDar6q ここは、初心者を歓迎するスレ
初心者を虐めてどうする
初心者を虐めてどうする
808デフォルトの名無しさん
2018/11/13(火) 21:24:39.67ID:2zv/Jtnj >>807
最近やたら気になるみたいだけど、なんで自分は初心者に回答してあげないの?
最近やたら気になるみたいだけど、なんで自分は初心者に回答してあげないの?
809デフォルトの名無しさん
2018/11/13(火) 22:19:44.32ID:kE0CzrCg >>797
多人数で開発する場合は、前者のほうが好まれると思います。
可読性が高いのでコードレビューしやすいですし、改修もしやすいです。
後者は、1行目と2行目の間で、aかbの値を変更する改修が入ってしまうと
2行目のif文に入らない場合に、望む結果が得られません。
プログラマになりたいとかでなければどっちでもいいと思いますが
難しい書き方をすると、時間経って読み返したときに、
自分でも何を書いたかわからなくなりますよw
多人数で開発する場合は、前者のほうが好まれると思います。
可読性が高いのでコードレビューしやすいですし、改修もしやすいです。
後者は、1行目と2行目の間で、aかbの値を変更する改修が入ってしまうと
2行目のif文に入らない場合に、望む結果が得られません。
プログラマになりたいとかでなければどっちでもいいと思いますが
難しい書き方をすると、時間経って読み返したときに、
自分でも何を書いたかわからなくなりますよw
>>797
else を使わなくて済むのなら、そうしたほうがいい、とはよくききます
else を使わなくて済むのなら、そうしたほうがいい、とはよくききます
811デフォルトの名無しさん
2018/11/14(水) 00:10:43.22ID:sDCxHRwn 聞いたことねえなあ
812はちみつ餃子 ◆8X2XSCHEME
2018/11/14(水) 02:13:50.61ID:I7yQY6ax >>797
状況によっても違ってくると思う。 一般的には前者だろうけど、
{ a=2; a=1; } が例外的な場合として特別扱いしてるってことを強調したい理由があるなら後者で書くこともあるかもしれん。
状況によっても違ってくると思う。 一般的には前者だろうけど、
{ a=2; a=1; } が例外的な場合として特別扱いしてるってことを強調したい理由があるなら後者で書くこともあるかもしれん。
813デフォルトの名無しさん
2018/11/14(水) 02:36:40.11ID:JMGKlnVy いや、効率を考えたら断然最初の else を使う方では?
後者のやり方では hoge が偽の場合、無駄な代入をすることになる
もっともコンパイラが賢ければ無意味な代入を端折るコードを生成するかもしれんけど
後者のやり方では hoge が偽の場合、無駄な代入をすることになる
もっともコンパイラが賢ければ無意味な代入を端折るコードを生成するかもしれんけど
814デフォルトの名無しさん
2018/11/14(水) 02:38:54.17ID:JMGKlnVy すまん自己レス
> もっともコンパイラが賢ければ無意味な代入を端折るコードを生成するかもしれんけど
これはムリだった。てことでやっぱり前者
> もっともコンパイラが賢ければ無意味な代入を端折るコードを生成するかもしれんけど
これはムリだった。てことでやっぱり前者
815デフォルトの名無しさん
2018/11/14(水) 05:51:53.25ID:AO05/l3R >>814
clangで試したらきちんと最適化されたぞ
clangで試したらきちんと最適化されたぞ
816デフォルトの名無しさん
2018/11/14(水) 11:29:46.12ID:Hh1ptiAj 設計者の意図が伝わりやすいのは前者
817デフォルトの名無しさん
2018/11/14(水) 11:45:30.11ID:ND9bKuyE int a=1;
if(!hoge){
a=2;
}
のa=1は通常の代入じゃないからね。
これは基準値で初期化しんだからよ。
こっちのが効率は良いよ。
if(!hoge){
a=2;
}
のa=1は通常の代入じゃないからね。
これは基準値で初期化しんだからよ。
こっちのが効率は良いよ。
818デフォルトの名無しさん
2018/11/14(水) 11:49:18.98ID:484vhzMZ int a = hoge? 1 : 2;
はどう?
はどう?
819デフォルトの名無しさん
2018/11/14(水) 12:07:57.04ID:XWwMTSMS 多分タイポでa,bの値を条件によって入れ替える処理だと思うぞ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「日本はドイツと違い反省せず」…中国外相、独外相に対日批判 台湾問題で理解求める [少考さん★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【苺ましまろ】立民衆院議員、人気漫画の水着少女画像を「醜悪」タイ人少女の性搾取事件と関連付け…党内で反発 [少考さん★]
- 「残業キャンセル界隈」若者が増加?「職務放棄」との批判も…“定時退社の権利”どこまで通用するか [七波羅探題★]
- 高市政権「かけてもつながらない。機能していない」防衛当局間のホットライン機能せず [834922174]
- あたしゃやだよ
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑 [931948549]
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑★2 [931948549]
- 30過ぎた大人おじさんが大学生(昔)のままのファッションをする「おじさんキッズコーデ」、炎上して問題視される。 [153490809]
- 【朗報】ケンモジサンが買うふりかけ、二択に絞られる [394133584]
