エスケープシーケンスや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
645デフォルトの名無しさん
2018/11/02(金) 23:47:26.58ID:NDSywfh9 環境に関して質問です。
windows10でcの環境作りたくて、コンパイラにminGWを入れたのですが、実行時エラーがでなくて不便です。
例えば、
char c='x';
printf("c: %s",c);
のように出力時のフォーマットを間違えたら、LinuxではRuntime error〜となにかしらエラーがでていたのに、エラーも何も出ずに(c: すら出ないで)終了します。
minGWの仕様なのか否か。
または、
windows10でminGWを使い、実行時エラーを出す方法を教えてください。
windows10でcの環境作りたくて、コンパイラにminGWを入れたのですが、実行時エラーがでなくて不便です。
例えば、
char c='x';
printf("c: %s",c);
のように出力時のフォーマットを間違えたら、LinuxではRuntime error〜となにかしらエラーがでていたのに、エラーも何も出ずに(c: すら出ないで)終了します。
minGWの仕様なのか否か。
または、
windows10でminGWを使い、実行時エラーを出す方法を教えてください。
646はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 00:16:22.42ID:q3m1JbMq647デフォルトの名無しさん
2018/11/03(土) 00:23:55.55ID:v6aDDcip648デフォルトの名無しさん
2018/11/03(土) 00:52:51.51ID:JdxI4C+o >>647
gdbで捕捉できるんですが、gcc実行のみでRuntimeErrorを表示させるにはコンパイラ変えるしかないですかね?
もともとvmにLinux入れて、c言語を学ぼうとしてた初心者の集まりなんですが、vm重いからwindowsに移行しようと、環境設定が簡単な方法をいろいろ試してるところです。
なので、Linuxでできてたことができなくなることが不安という感じです。
gdbで捕捉できるんですが、gcc実行のみでRuntimeErrorを表示させるにはコンパイラ変えるしかないですかね?
もともとvmにLinux入れて、c言語を学ぼうとしてた初心者の集まりなんですが、vm重いからwindowsに移行しようと、環境設定が簡単な方法をいろいろ試してるところです。
なので、Linuxでできてたことができなくなることが不安という感じです。
649デフォルトの名無しさん
2018/11/03(土) 01:02:20.38ID:v6aDDcip650デフォルトの名無しさん
2018/11/03(土) 01:09:09.93ID:JSD3MLAZ たまたまアクセスしたアドレスがアクセス違反でもない限り、そもそもエラーにしようがない気がするのだけど、どうやって補足してるの?
651デフォルトの名無しさん
2018/11/03(土) 01:36:19.09ID:v6aDDcip 多分リンクするランタイムライブラリ側の仕様ではないかと
652デフォルトの名無しさん
2018/11/03(土) 04:50:14.05ID:AAuGyX2A653デフォルトの名無しさん
2018/11/03(土) 04:51:37.68ID:AAuGyX2A あ、実行時か。
Cは実行時エラーの処理も自分で補足して書くものよ?
そう言う言語としか言えない。
Cは実行時エラーの処理も自分で補足して書くものよ?
そう言う言語としか言えない。
654デフォルトの名無しさん
2018/11/03(土) 09:37:50.89ID:1nZCEE4t 不定や未定儀を自らトラップするコードを記述するのは難易度高いな… 例外が捕まれば御の字だが
655はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 10:13:55.37ID:q3m1JbMq アドレスが 0 付近のページはプログラムミスでアクセスされやすいってことはわかっているので、
Windows でもなんか特別に予約してたような気がしたんだが、手元の資料で見つからんな……。
Windows でもなんか特別に予約してたような気がしたんだが、手元の資料で見つからんな……。
656デフォルトの名無しさん
2018/11/03(土) 11:07:57.01ID:LENdvKRs MMU付きのシステムなら、0番地をTLB missさせるのは一般的だね
けど、これ見るとwin95は違ったみたい。winNTはそうしてたみたい
Why is 0x00400000 the default base address for an executable?
https://blogs.msdn.microsoft.com/oldnewthing/20141003-00/?p=43923
けど、これ見るとwin95は違ったみたい。winNTはそうしてたみたい
Why is 0x00400000 the default base address for an executable?
https://blogs.msdn.microsoft.com/oldnewthing/20141003-00/?p=43923
657デフォルトの名無しさん
2018/11/03(土) 11:18:28.44ID:v6aDDcip 0番地ってNULLポインタ値に割り当ててなかった?
658はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 11:26:29.27ID:q3m1JbMq >>657
NULL はあくまでも「無効なポインタ」を表し、意味のある番地ではない。
けど、うっかり意味のある番地としてアクセスしたら 0 番地だから、
その付近へのアクセスがあったらたぶん駄目なプログラムとして検出しようねっていう話。
NULL はあくまでも「無効なポインタ」を表し、意味のある番地ではない。
けど、うっかり意味のある番地としてアクセスしたら 0 番地だから、
その付近へのアクセスがあったらたぶん駄目なプログラムとして検出しようねっていう話。
659はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 11:29:39.54ID:q3m1JbMq 今回の場合は char をポインタとして解釈してしまった場合ってことになるけど、
(0 ではないが) 0 に近いアドレスなので、その付近のページは
トラップ用に予約しておいたらあかんプログラムの検出に便利やんというわけ。
(0 ではないが) 0 に近いアドレスなので、その付近のページは
トラップ用に予約しておいたらあかんプログラムの検出に便利やんというわけ。
660はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 11:36:04.04ID:q3m1JbMq 本筋とは関係ないけど念のために補足しておくと、ヌルポインタがゼロというのは、
そういうアーキテクチャがほとんどだと思うけど言語仕様の保証はない。
整数のゼロと互換性はあるという扱いで、
つまりは、ヌルポインタを整数にキャストするとゼロだし、
ゼロをポインタにキャストするとヌルポインタになることは保証されるが、
ヌルポインタのビットパターンが整数のゼロと等しいことは保証されない。
(なので移植性が必要ならポインタの配列を memset とかで初期化したりするのは駄目)
そういうアーキテクチャがほとんどだと思うけど言語仕様の保証はない。
整数のゼロと互換性はあるという扱いで、
つまりは、ヌルポインタを整数にキャストするとゼロだし、
ゼロをポインタにキャストするとヌルポインタになることは保証されるが、
ヌルポインタのビットパターンが整数のゼロと等しいことは保証されない。
(なので移植性が必要ならポインタの配列を memset とかで初期化したりするのは駄目)
661デフォルトの名無しさん
2018/11/03(土) 13:12:43.48ID:LENdvKRs >>ゼロをポインタにキャストするとヌルポインタになることは保証されるが
そうだっけ。定数のゼロだけでは?
そうだっけ。定数のゼロだけでは?
662はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 14:56:28.34ID:q3m1JbMq663はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 15:04:23.69ID:q3m1JbMq >>661-662
リテラルの 0 じゃなきゃダメなように改められたのは C++14 からだった。
リテラルの 0 じゃなきゃダメなように改められたのは C++14 からだった。
664デフォルトの名無しさん
2018/11/04(日) 13:52:28.75ID:5RY1Lh2I >printf("c: %s",c);
va_list な関数でフォーマットからパラメータの妥当性チェックって
コンパイル時に出来るもんなのか?
va_list な関数でフォーマットからパラメータの妥当性チェックって
コンパイル時に出来るもんなのか?
665デフォルトの名無しさん
2018/11/04(日) 13:54:42.83ID:zQzIf+EH >>664
無理
無理
666デフォルトの名無しさん
2018/11/04(日) 14:31:45.47ID:zimjubMH コンパイル時にprintfのフォーマットチェックくらい出来る
667デフォルトの名無しさん
2018/11/04(日) 14:35:28.83ID:niqPtY0w >>664
標準ライブラリ関数みたいに、コンパイラ作成時点で仕様が確定してれば可能。
https://wandbox.org/permlink/d1F80sYjt6FhgjY8
> prog.cc:5:19: warning: format specifies type 'char *' but the argument has type 'int' [-Wformat]
標準ライブラリ関数みたいに、コンパイラ作成時点で仕様が確定してれば可能。
https://wandbox.org/permlink/d1F80sYjt6FhgjY8
> prog.cc:5:19: warning: format specifies type 'char *' but the argument has type 'int' [-Wformat]
668はちみつ餃子 ◆8X2XSCHEME
2018/11/05(月) 15:55:21.21ID:ZanvjWBP 逆に言えばコンパイラが特別扱いする必要があるってことだね。
669デフォルトの名無しさん
2018/11/05(月) 22:44:26.18ID:3jCTliha 面倒なので出力書式には%sのみを使うこととし引数の型の分だけstringに変換する同名関数用意して必ず文字列にしてしまうという力技
670デフォルトの名無しさん
2018/11/06(火) 11:51:03.34ID:rqFrnjhJ >>669
オブジェクト指向的にはそれが正解なんだよな
オブジェクト指向的にはそれが正解なんだよな
671デフォルトの名無しさん
2018/11/06(火) 12:45:23.65ID:ARgE5xEK >>669
まあ結局どこかで文字列化するんだからその考え方もありだね
まあ結局どこかで文字列化するんだからその考え方もありだね
672デフォルトの名無しさん
2018/11/06(火) 13:01:56.11ID:tKDIv/D4 cout << left << hex << showbase << setfill('0') << setw(8) << i << eol;
より
cout << i.tostring("0x%-08x") << eol;
とかなら %書式 にはあまりこだわらないんだけど
前者の仕様だと %書式 の方が描きやすいから
結局普及しない原因
より
cout << i.tostring("0x%-08x") << eol;
とかなら %書式 にはあまりこだわらないんだけど
前者の仕様だと %書式 の方が描きやすいから
結局普及しない原因
673デフォルトの名無しさん
2018/11/07(水) 23:51:04.79ID:JJvWWnsQ よくint型のサイズとかエンディアンが処理系依存って解説を目にしますが
この「処理系」ってコンパイルするマシンのCPUですか?
それともプログラムを実行するマシンのCPUですか?
この「処理系」ってコンパイルするマシンのCPUですか?
それともプログラムを実行するマシンのCPUですか?
674デフォルトの名無しさん
2018/11/07(水) 23:57:40.81ID:vv5bGR61 >>673
コンパイルするプログラムや出来たプログラムを実行するOSやハードウェアなどの諸々の環境
コンパイルするプログラムや出来たプログラムを実行するOSやハードウェアなどの諸々の環境
676デフォルトの名無しさん
2018/11/08(木) 00:05:29.53ID:M68F6j6d ターゲットになる処理系にあわせてコンパイルするからな
べつにターゲットになる処理系でコンパイルする必要はない
べつにターゲットになる処理系でコンパイルする必要はない
677673
2018/11/08(木) 00:44:14.28ID:ZMRuomnT ありがとうございます
ちょっとプログラムを見直してみます
ちょっとプログラムを見直してみます
678デフォルトの名無しさん
2018/11/08(木) 10:49:50.86ID:2uuB+50R679デフォルトの名無しさん
2018/11/08(木) 21:31:49.37ID:2V1Zc+AV constexpr char *mes[] ={(char *)"error", (char *)"ok" ,(char *)"abc"};
みたいにキャストしないとワーニングがでるんだが、めんどくさいね。なんか方法ないの?
みたいにキャストしないとワーニングがでるんだが、めんどくさいね。なんか方法ないの?
680デフォルトの名無しさん
2018/11/08(木) 21:41:57.89ID:YKdO2F6s constexpr const char *mes[] ={"error", "ok" , "abc"};
constexprが何にかかっていたか考えてみれ
constexprが何にかかっていたか考えてみれ
681デフォルトの名無しさん
2018/11/09(金) 03:42:19.86ID:RK/u55Qe constつけたらワーニングが無くなるのだろうか? 何故なくなるの?
ポインタにかかるのか、ポインタの中身にかかるのか?という問いだろうけれども恐らくはポインタ自体
にかかるのだろう。そしてconstがポインタの中身にかかる。順番が逆だといろいろ不都合がしょうじる
から、このようになる筈だ。
しかし、constを追加しただけでwarnningが消える理由はなんなのだろうか? (char*)でキャストするのと
同じ効果を持ちうるのはなぜか? constにはそんな意味はない。「単に書き換えできないようにする」
と言う意味だろう。書き換えできないsringももちろんあるから矛盾が生じるのだ。その矛盾を
解決する可能性があるとすれば書き換えできないstringがすなわちchar*と同じである場合に限る。
つまり
const string とは char* の事なのだ。
あってる?
もしあってるとすれば、
constexpr (char*) char *mes[] ={"error", "ok" , "abc"};
でもOKな筈だね。そうでないと矛盾する。この方が分かりやすいね。
ポインタにかかるのか、ポインタの中身にかかるのか?という問いだろうけれども恐らくはポインタ自体
にかかるのだろう。そしてconstがポインタの中身にかかる。順番が逆だといろいろ不都合がしょうじる
から、このようになる筈だ。
しかし、constを追加しただけでwarnningが消える理由はなんなのだろうか? (char*)でキャストするのと
同じ効果を持ちうるのはなぜか? constにはそんな意味はない。「単に書き換えできないようにする」
と言う意味だろう。書き換えできないsringももちろんあるから矛盾が生じるのだ。その矛盾を
解決する可能性があるとすれば書き換えできないstringがすなわちchar*と同じである場合に限る。
つまり
const string とは char* の事なのだ。
あってる?
もしあってるとすれば、
constexpr (char*) char *mes[] ={"error", "ok" , "abc"};
でもOKな筈だね。そうでないと矛盾する。この方が分かりやすいね。
682デフォルトの名無しさん
2018/11/09(金) 04:05:10.44ID:RK/u55Qe そしてワーニングはすべてきえたが、エラーになった。w
683デフォルトの名無しさん
2018/11/09(金) 04:08:12.56ID:RK/u55Qe constexpr const char *mes[] ={"error", "ok" , "abc"};
これをクラスのなかで定義したいのだが、クラスの中で定義するとエラーになる。クラス内だけで使いたいのに
外部に引き出すのは面倒だ。どうしたらいいの?
これをクラスのなかで定義したいのだが、クラスの中で定義するとエラーになる。クラス内だけで使いたいのに
外部に引き出すのは面倒だ。どうしたらいいの?
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
ヒント:メモリーフェンス。
ヒント:メモリーフェンス。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【和訳付き】レーダー照射問題 中国軍と自衛隊との“音声データ”公開 中国国営メディア [♪♪♪★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 「中国側も日本機のレーダーを感知していた」 中国メディアが報道 [♪♪♪★]
- 中国とロシアの爆撃機、日本周辺で共同飛行 [少考さん★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★2 [597533159]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★3 [597533159]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
- 俺が突拍子もないレスするとスクリプト扱いされるの不満なんだが
- 中国の日本向けレアアースの輸出止まる、高市のせいで日本終了のお知らせ [931948549]
- そういえば草だけ食ってるヤツらどこいったの?
