エスケープシーケンスや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
684デフォルトの名無しさん
2018/11/09(金) 08:48:09.13ID:B4AEy6G3 static
685はちみつ餃子 ◆8X2XSCHEME
2018/11/09(金) 11:35:02.44ID:yH/J6wNO >>681
書いている意味はさっぱりわからんが、文字列リテラルの型は const char[] だ。
そんでもって >>679 の場合の文字列リテラルは暗黙の型変換で const char* になる。
const char* を char* に入れようとしたら型が合わないがキャストで無理やり合わせることも出来るという簡単な話。
だが、型から const を剥がしたからといって文字列リテラルを書き換えてよくなるわけではない。 (← 重要!)
const を剥がすだけなら問題はないが、
書き換えたら駄目 (未定義) にもかかわらず型から const を外すのは馬鹿馬鹿しい間違いの元。
よくわからんままキャストしたら警告が消えた〜〜っていうのはC/C++ の歴史で何十年も繰返してるので
古参ならうんざりするほど見てきた駄目なパターンだと思う。
とりあえずキャストってのはほんとにやめて……。
(ちなみに C では文字列リテラルの型は char[] だが、書き換えるのは未定義ってことになってるという更なる闇がある)
書いている意味はさっぱりわからんが、文字列リテラルの型は const char[] だ。
そんでもって >>679 の場合の文字列リテラルは暗黙の型変換で const char* になる。
const char* を char* に入れようとしたら型が合わないがキャストで無理やり合わせることも出来るという簡単な話。
だが、型から const を剥がしたからといって文字列リテラルを書き換えてよくなるわけではない。 (← 重要!)
const を剥がすだけなら問題はないが、
書き換えたら駄目 (未定義) にもかかわらず型から const を外すのは馬鹿馬鹿しい間違いの元。
よくわからんままキャストしたら警告が消えた〜〜っていうのはC/C++ の歴史で何十年も繰返してるので
古参ならうんざりするほど見てきた駄目なパターンだと思う。
とりあえずキャストってのはほんとにやめて……。
(ちなみに C では文字列リテラルの型は char[] だが、書き換えるのは未定義ってことになってるという更なる闇がある)
686デフォルトの名無しさん
2018/11/09(金) 11:51:24.81ID:p9aTnaT/ x ワーニング
△ ウォーニング
△ ウォーニング
687はちみつ餃子 ◆8X2XSCHEME
2018/11/09(金) 12:19:21.70ID:yH/J6wNO >>686
カタカナにする時点で元の発音からずれまくりなので×も△も五十歩百歩だろ。
カタカナにする時点で元の発音からずれまくりなので×も△も五十歩百歩だろ。
688デフォルトの名無しさん
2018/11/09(金) 12:31:06.48ID:OW/zGENl ウォァニンぐらいでもOK
689デフォルトの名無しさん
2018/11/09(金) 12:33:34.59ID:LkGmFgiv 五十歩くらいマシ
690デフォルトの名無しさん
2018/11/09(金) 12:36:43.84ID:OW/zGENl pingをピングと言っちゃう国だから大丈夫だ
691デフォルトの名無しさん
2018/11/09(金) 12:44:17.18ID:CtgAvQda 壊れかけのレイディオ
692デフォルトの名無しさん
2018/11/09(金) 12:46:06.80ID:p9aTnaT/ KING KONG
693デフォルトの名無しさん
2018/11/09(金) 13:58:07.89ID:s4ONASkx694デフォルトの名無しさん
2018/11/09(金) 13:59:30.86ID:s4ONASkx ウォーニングが×
ワーニングの方がまし
ワーニングの方がまし
695デフォルトの名無しさん
2018/11/09(金) 15:56:52.94ID:6nxjQRlc >>693
アホ
アホ
696デフォルトの名無しさん
2018/11/09(金) 17:01:38.84ID:s4ONASkx 今調べてきた。確かにwikiとかでもウォーニングってなってんな
発音記号もcの逆みたいのが使われている
でも実際の発音を聞くと、あの方が近いぞ。まあどっちでもええわ
発音記号もcの逆みたいのが使われている
でも実際の発音を聞くと、あの方が近いぞ。まあどっちでもええわ
697デフォルトの名無しさん
2018/11/09(金) 19:27:01.40ID:PDy1KIPj 君のアナルはウサイン・ボルト
698デフォルトの名無しさん
2018/11/09(金) 19:47:28.26ID:gcFuq4sF 「警告」で良いだろう
699デフォルトの名無しさん
2018/11/09(金) 20:21:57.93ID:GUqFOdkW 5chで発音ガーとか何回見たことか…
なのでそういう奴が居そうなスレでは原語(warning)で書くのが基本
なのでそういう奴が居そうなスレでは原語(warning)で書くのが基本
700デフォルトの名無しさん
2018/11/09(金) 21:19:39.32ID:RK/u55Qe 「文字列リテラル型」って表現はよくわからない。文字列はリテラルじゃないの?
文字列のリテラル型というのであればリテラル型でない文字列ってあるんだろうか?
リテラルって何? 英語をやくしたら文字列って意味だろ。
文字列のリテラル型というのであればリテラル型でない文字列ってあるんだろうか?
リテラルって何? 英語をやくしたら文字列って意味だろ。
701デフォルトの名無しさん
2018/11/09(金) 21:21:10.22ID:OW/zGENl 即値というこれまた訳のわからない訳が出てくるからw
702デフォルトの名無しさん
2018/11/09(金) 21:29:35.20ID:RK/u55Qe A character literal is a type of literal in programming for the representation of a single character's value within the source code of a computer program.
「文字列リテラル」ってキャラクターリテラルのことだろうか?
それなら日本語にすると「文字列」でOKと思う。文字列リテラルって文字列列ってことか?
つまりA character literal literal **str のこと?
「文字列リテラル」ってキャラクターリテラルのことだろうか?
それなら日本語にすると「文字列」でOKと思う。文字列リテラルって文字列列ってことか?
つまりA character literal literal **str のこと?
703デフォルトの名無しさん
2018/11/09(金) 21:30:17.80ID:D+VwENVN char a[] = "abcd";
左辺のaが文字列で 右辺の "abcd" が文字列リテラル
左辺のaが文字列で 右辺の "abcd" が文字列リテラル
704デフォルトの名無しさん
2018/11/09(金) 21:31:35.81ID:RK/u55Qe それなら文字列配列だよな。
705デフォルトの名無しさん
2018/11/09(金) 21:33:21.78ID:D+VwENVN のんのん \0終端の文字配列 で 文字列になねるー
706デフォルトの名無しさん
2018/11/09(金) 21:33:25.58ID:RK/u55Qe707デフォルトの名無しさん
2018/11/09(金) 21:39:02.77ID:RK/u55Qe literalって頭が固くて融通が利かないって意味があるみたいだから、”abc”というように値が固定した
文字列って意味なんだね。
ということは
char literal 'a'
char literal "abc"
int literal 0x111
ということか。
文字列って意味なんだね。
ということは
char literal 'a'
char literal "abc"
int literal 0x111
ということか。
708デフォルトの名無しさん
2018/11/09(金) 21:40:08.63ID:RK/u55Qe まちがってる
char [] literal --> "abc"
char [] literal --> "abc"
709デフォルトの名無しさん
2018/11/09(金) 21:41:35.53ID:OW/zGENl 無名定数って感じかな
710デフォルトの名無しさん
2018/11/09(金) 21:56:52.98ID:9K071fMF "literal"って「文字通り」ってことだろう。
ソースコード中に埋め込まれた、値そのものを表す記述のこと。
ソースコード中に埋め込まれた、値そのものを表す記述のこと。
711デフォルトの名無しさん
2018/11/10(土) 01:12:58.35ID:4XqvBzsA int a = 10;
の「10」もリテラル
の「10」もリテラル
712はちみつ餃子 ◆8X2XSCHEME
2018/11/10(土) 01:32:44.99ID:BAJLxFPC リテラル型という用語もあるが、リテラル型がいわゆる「リテラル」とは限らないので気を付けてな。
713デフォルトの名無しさん
2018/11/10(土) 04:45:24.06ID:p/77GMIT >よくわからんままキャストしたら警告が消えた〜〜っていうのはC/C++ の歴史で何十年も繰返してるので
>古参ならうんざりするほど見てきた駄目なパターンだと思う。
>とりあえずキャストってのはほんとにやめて……。
void uprint( char * message);
こういう関数って普通にあると思うが、そうすると
uprint((char *)"abc");
こんなふうにキャストしないでwarnigを取る方法ってありますの?
そもそも関数の定義の仕方が悪いって意見? C++ってcと混在一体で使うところに多大な
メリットがあるわけで、cだとstringとか使えないし、どうすりゃいいのよ。
>古参ならうんざりするほど見てきた駄目なパターンだと思う。
>とりあえずキャストってのはほんとにやめて……。
void uprint( char * message);
こういう関数って普通にあると思うが、そうすると
uprint((char *)"abc");
こんなふうにキャストしないでwarnigを取る方法ってありますの?
そもそも関数の定義の仕方が悪いって意見? C++ってcと混在一体で使うところに多大な
メリットがあるわけで、cだとstringとか使えないし、どうすりゃいいのよ。
714デフォルトの名無しさん
2018/11/10(土) 04:56:10.50ID:p/77GMIT あっ、わかった。C++の場合はvoid uprint( const char * message); も作っておけばいいのか。
納得。
納得。
715デフォルトの名無しさん
2018/11/10(土) 06:25:16.23ID:7XNdxnac >>702
>for the representation of a single character's value
a がついてるだろ。 つまりこれは1文字のことを言ってるんであって、複数文字ではないよ
で、主語を見ると、A character literalってあるから、そもそもこれは1キャラクタのリテラルの定義
なので、複数キャラ、単語等のリテラルの定義は他にあるはず
>for the representation of a single character's value
a がついてるだろ。 つまりこれは1文字のことを言ってるんであって、複数文字ではないよ
で、主語を見ると、A character literalってあるから、そもそもこれは1キャラクタのリテラルの定義
なので、複数キャラ、単語等のリテラルの定義は他にあるはず
716デフォルトの名無しさん
2018/11/10(土) 06:27:24.70ID:7XNdxnac 書き忘れた
a と、わざわざsingle もつけている
a と、わざわざsingle もつけている
717デフォルトの名無しさん
2018/11/10(土) 07:11:22.05ID:p/77GMIT charactor literalって命名は違和感あるな。
float literal 123.4 だぜ。 おかしいだろ。 float leteral なら"123.4"なら許せる。そもそもliteral使うところが
おかしい。
英語にだってconstantって言葉あるんだから、constantをつかったらいいのに。ところがconstはconstant
のことかと思いきや、read only 変数のことなんだよね。w
float literal 123.4 だぜ。 おかしいだろ。 float leteral なら"123.4"なら許せる。そもそもliteral使うところが
おかしい。
英語にだってconstantって言葉あるんだから、constantをつかったらいいのに。ところがconstはconstant
のことかと思いきや、read only 変数のことなんだよね。w
718デフォルトの名無しさん
2018/11/10(土) 09:00:12.85ID:jxhvzDRc 何がおかしいのかさっぱり分からん。
"文字通りの"という意味に囚われてるのかもしれないが、ソースコード上に123.4とあったらまぎれもなく文字通りだろう
"文字通りの"という意味に囚われてるのかもしれないが、ソースコード上に123.4とあったらまぎれもなく文字通りだろう
719デフォルトの名無しさん
2018/11/10(土) 09:56:00.85ID:0TCzpeyH >>713
勘違いしてね?
void f(char * message)
void c_f( const char * message)
のとき、
char *p = "abcde";
f("abc");
c_f("abc");
f(p);
c_f(p);
は全部警告なしで通るぞ。 問題があるのは、
const char *cp = "abcde";
としたときの
f(cp);
だけがエラーあるいは警告になる
2017の最新のVC++
勘違いしてね?
void f(char * message)
void c_f( const char * message)
のとき、
char *p = "abcde";
f("abc");
c_f("abc");
f(p);
c_f(p);
は全部警告なしで通るぞ。 問題があるのは、
const char *cp = "abcde";
としたときの
f(cp);
だけがエラーあるいは警告になる
2017の最新のVC++
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' って違うんだな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 低所得層のマクドナルド離れが深刻に 広がる「ファストフード格差」の真相 米国 [少考さん★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★7 [七波羅探題★]
- 「そんなに米国が言う通りにやりたいのか」小泉氏、防衛費増額で立民・後藤祐一氏に反論 [少考さん★]
- 中国がここまで過敏になるのは日本に前科があるから。盧溝橋、満州事変。ジャップの先制攻撃は挙げればキリがないけど [472617201]
- 犬って顔くっつけて寝たがるよな
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
- ひらがなの"ふ"、"な"がかけないFラン新入社員に激怒。学歴フィルターは必要と厳格化に踏み切った企業 [737440712]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★4 [597533159]
- 実際、朝7~8時の電車通勤は確実にQOL下げてるけど、心に余裕のない社畜にそれ言ったら炎上するよな [315293707]
