1 名前:デフォルトの名無しさん [2020/09/28(月) 14:41:30.00 ID:QxfbhGyV0.net] !extend:checked:vvvvv:1000:512 (新スレ立ての際上記コマンドを2行書き込んでください) C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ ※前スレ C言語なら俺に聞け 155 https://mevius.5ch.net/test/read.cgi/tech/1589120427/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
129 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 00:55:54.98 ID:y5Dl22i00.net] HNをNGに登録し、レス書いた奴ごとアボーンすると比較的すっきりする
130 名前:デフォルトの名無しさん [2020/10/11(日) 01:44:57.79 ID:yV/54YAK0.net] >>126 意訳すれば「代入式の値は、左辺へ代入後に取り出してたら処理が無駄に重くなるから、代入直前の値を返すべき。返されるものは、左辺と同じ(値と型が)」 まあ端的に言うと、左辺が返されてると理解しとけばいいね。
131 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 07:57:55.20 ID:Oo+TUOYr0.net] >>128 「左辺へ代入後に取り出してたら処理が無駄に重くなるから、代入直前の値を返すべき」なんて書いてない 脚注に > 111) The implementation is permitted to read the object to determine the value but is not required to, even when the object has volatile-qualified type. とはあるが, どう実装すべきなどとは書いていないのだから, それは意訳ではなくお前の意見だ
132 名前:デフォルトの名無しさん [2020/10/11(日) 08:44:36.55 ID:yV/54YAK0.net] >>129 いやく【意訳】 《名・ス他》原文の語句の一つ一つにこだわらず、全体の意味に重点をおいて訳すこと。その訳。
133 名前:デフォルトの名無しさん [2020/10/11(日) 09:21:01.70 ID:yV/54YAK0.net] あと、そういうなら、君の書いた >代入式の値は「左辺式(left operand)に右辺式(right operand)の値を代入した後の値を右辺値(rvalueの意味)として評価した値」 これだって君の意訳で意見だよね。 言葉は通じるためにある。ネット検索しても、世間一般的にも代入のことは副作用と呼んでるよね。 副作用を検索すれば「代入」という言葉が頻出する。 なので「The side effect of updating the stored value of the left operand」⇒ 代入 となる 次に、「(代入) is sequenced after the value computations of the left and right operands.」を訳すると「代入は両オペランドの値を処理後に行われる」となる。 つまり、「代入は最後に行われる」とは読めないかな? よって、返す値はその前に原則的に決まってるということ。 なので「代入した後の値を」という表現は違和感あるし、ワタスの代入直前の方が正解に近くはないかな? まあ、ワタスは、C言語の超初心者なので、君の挙げてくれた英文を周辺状況と合わせて普通に読んでるだけだけども。 そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。
134 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:24:54.54 ID:1n9mnEAt0.net] >>120 ご返答有難うございます。 やはり、色々と複雑なようですね。
135 名前:デフォルトの名無しさん [2020/10/11(日) 12:23:08.94 ID:kZXFoyze0.net] >>125
136 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 15:19:35.65 ID:Ryz1amqZK.net] >>114 >一文字ずつ' 'の方法 その場合は最後に'\0'が必要
137 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 16:59:31.64 ID:Oo+TUOYr0.net] >>131 阿呆かな? >>128 は>>126 の原文中に無く脚注で書かれている内容だしその脚注にも「左辺へ代入後に取り出してたら処理が無駄に重くなるから」などとは書かれていない > 次に、「(代入) is sequenced after the value computations of the left and right operands.」を訳すると「代入は両オペランドの値を処理後に行われる」となる。 > つまり、「代入は最後に行われる」とは読めないかな? 正しい > よって、返す値はその前に原則的に決まってるということ。 妄想 規格ではunspecified (実装の自由度) > そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。 逆だろ, 処理系を指定しないなら規格に従うしかない。
138 名前:デフォルトの名無しさん [2020/10/11(日) 17:27:29.04 ID:yV/54YAK0.net] >>135 全部反論になってなくて、相手の言ってる言葉を都合のいいように解釈してるだけだね。
139 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 17:45:12.56 ID:0ARGcdMRM.net] 反論できないことは全部反論になってないで片付けるタイプ
140 名前:135 mailto:sage [2020/10/11(日) 17:51:10.03 ID:jw/lLa/Ba.net] >>136 出先からで済まんな 妄想で仕様書を改竄する言い訳にはならんから注意しな
141 名前:デフォルトの名無しさん [2020/10/11(日) 17:52:06.99 ID:yV/54YAK0.net] 全然反論になってないし、第一、第一声が「阿呆かな?」と頭に血が昇ってる人の相手しても意味ないじゃん。
142 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 18:39:36.02 ID:u/XktDCx0.net] 意味ないのに書き込んじゃうのはなんでだろうね?
143 名前:デフォルトの名無しさん [2020/10/11(日) 19:03:18.63 ID:yV/54YAK0.net] 結局、原則的には、返す値は代入前に決まってるよね。gccもVC++もそうみたいだし。
144 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 19:54:22.88 ID:vwOca/6s0.net] > > そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。 > 逆だろ, 処理系を指定しないなら規格に従うしかない。 同感
145 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 20:21:00.36 ID:qb0SAJQcM.net] まぁ過去の恨みで絡むのはやめとこうな 非建設的すぎる
146 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 21:19:40.64 ID:qb0SAJQcM.net] 一般論と規格の噛み合わない話が続いてるな 例えば日本語を表すのは大抵の処理系でshift jisかunicodeだが 一般論としてshift jisかunicodeだというと 規格として規定されてないみたいな お互いの話してる主語が違ってて噛み合わない
147 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 21:45:50.38 ID:/f4IUzXt0.net] >>144 下段の喩えが分かりませぬ。
148 名前:デフォルトの名無しさん mailto:sage [2020/10/12(月) 17:32:23.08 ID:Fn8G8w4j0.net] ファイルオープンできない visualstudioにてfopen_s err = fopen_s(&fp,"test.txt","r");
149 名前:デフォルトの名無しさん [2020/10/12(月) 17:53:16.57 ID:941JO02hF.net] FILE *fp; なら err = fopen_s(fp,"test.txt","r");
150 名前:デフォルトの名無しさん [2020/10/12(月) 18:26:02.48 ID:YDN8KrDa0.net] ttps://qiita.com/softnakikaiya/items/dec17bd471913e1038a1 >>146 これ?
151 名前:デフォルトの名無しさん mailto:sage [2020/10/12(月) 20:07:04.33 ID:XcjAzDTUM.net] 初心者にありがちなのは相対パスを理解してなくてファイルが無いから開けないってやつ
152 名前:デフォルトの名無しさん mailto:sage [2020/10/12(月) 20:19:27.43 ID:UculHi610.net] >>146 それじゃファイル開けないよ 第二引数にファイルパス指定してくださいクソが
153 名前:デフォルトの名無しさん [2020/10/13(火) 19:59:14.31 ID:NHAZjg2T0.net] 初歩的な質問で大変恐縮ですが、 平成6年度基本情報技術者試験のC言語について質問がありまして、 https://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H6b2/g11.html 問2のCですが、答えが2つありませんか? ウでもエでもどちらでも正解の気がします。 コンパイルして両方の回答で試してみましたが、問題なく動きます。 なぜ答えがウになってエではいけないのか、どなたか知恵を貸していただけませんでしょうか?
154 名前:デフォルトの名無しさん mailto:sage [2020/10/13(火) 20:23:51.05 ID:FgDiRT1ia.net] 146です。パス入力しデバッグしたら なにかわけわからんBOX でてきて思い通りになりません。
155 名前:デフォルトの名無しさん mailto:sage [2020/10/13(火) 22:42:18.30 ID:ciG+8HNI0.net] グローバル変数として宣言した変数j0とj1がmathcalls.hにもあるようで、コンパイルするとエラーが出ます ヘッダファイルを書き換えずに回避するにはどうすればいいですか? よろしくお願いします
156 名前:デフォルトの名無しさん mailto:sage [2020/10/13(火) 22:43:11.29 ID:b7C863zx0.net] >>151 エだと、60文字目と61文字目が' 'の行があるときに余分な改行が入る
157 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 01:03:48.89 ID:9cyhkhnyp.net] モバイルC[C/C++コンパイラ]というアプリケーションを使っています do~while()文で1!+2!+…+n!が1000を超える最初のnの値を求める問題です 以下の画像のどこが間違ってるか教えて頂きたいです https://i.imgur.com/WEfqdXB.jpg
158 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 01:22:34.34 ID:6pvowPnvM.net] どうなって欲しくてどうなってしまうかくらい書け
159 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 02:05:50.62 ID:9cyhkhnyp.net] 14と表示されてほしいのですが実行すると以下の画像のようになります https://i.imgur.com/ztqzJy1.jpg
160 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 03:22:45.65 ID:GZXcc9JpM.net] >>151 出題者が想定していた回答から察するに、「正しい答えを選べ」=「最適なものを選べ」という題意なんだろうね。 「エ」の場合、009〜012が必ず実行される。 「ウ」の場合、空白が連続していない場合のみ、009〜012が実行される。 なので「エ」よりも「ウ」の方が、実行時のコードが少なくなる可能性≒処理速度が速い≒より最適化されている。 ということで、「エ」を排しても「ウ」が選ばれるべき理由は説明できるけど、その逆は説明できそうになさげ
161 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 05:08:01.62 ID:GZXcc9JpM.net] >>155 モバイルCのことは、よく知らないのだけど。 11行目を削除するか、↓のようにコメントアウト(行頭に // を追加)してみるとか。 // int fact(int n); >>157 「1!+2!+…+n!が1000を超える最初のnの値」が「14」ということなのかな。 1!+2!+3!+4!+5!+6!=873 1!+2!+3!+4!+5!+6!+7!=5913 ということで(14ではなく)7あたりが正解であるように思える、なんとなくだけどね
162 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 05:26:43.66 ID:z5Uy/Vd30.net] 画像でコードを見せられても、テストできない paiza.IO などに書いて下さい!
163 名前:デフォルトの名無しさん [2020/10/14(水) 06:30:51.16 ID:8SMXEVrO0.net] >>154 >>158 回答ありがとうございます。 よくわかりました!
164 名前:デフォルトの名無しさん [2020/10/14(水) 10:47:06.71 ID:ssGc8zMA0.net] >>151 クソみたいなマルチポスト野郎だな 俺らはこういうゴミに手を貸してたのか 騙された気分だ C言語について質問です。平成6年度基本情報技術者試験のC言語につ... - Yahoo!知恵袋 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12232834992
165 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 11:51:52.20 ID:+mJN3MGTM.net] >>155 https://file3-d.kuku.lu/files/20201014-0239_c7aaeee8e9128bbdf0223997ba9de974.jpeg #include <stdio.h> int fact(int n){ if(n==1)return 1; return n*fact(n-1); } int main(void){ int n=1,a=0; while( (a+=fact(n)) <= 1000 ) n++; printf("%d", n); } 普通に7って出たけど? https://file3-d.kuku.lu/files/20201014-0239_d20849c5db09546cee5a312db4c7b83e.jpeg
166 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 13:06:19.00 ID:8/BbynCKp.net] >>163 試したら7になりました、ありがとうございます
167 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 01:13:51.72 ID:1WZYXiCK0.net] >>163 インデントがキモい
168 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 08:49:06.08 ID:q8Z69frHa.net] systemのパスが通らない ファイルに入力して コンソールで表示する プログラムだが ファイルと同じパスでエラー 当方初心者
169 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 08:55:48.28 ID:0IrscxF80.net] まずはその日本語をなんとかしろ
170 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 09:22:30.31 ID:wzOsKsv00.net] >>166 パスって何か知ってる限り書いてみな
171 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 10:05:35.78 ID:qYYfNILyM.net] >>165 んな事言われましても一応、HTML系の書き方なんで https://ja.m.wikipedia.org/wiki/字下げスタイル bannerスタイルは、ブロックのヘッダ部だけを字下げレベルで特別に目立たせるスタイルである。 ちょうど、K&Rスタイルでブロックの終わりの中括弧の字下げレベルを戻さないスタイルである。
172 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 10:22:20.38 ID:wzOsKsv00.net] どっちもどっちだ 自分のスタイルと違うだけでキモいとか言い出すやつも 自分のスタイルを気に入らない人に言い訳するやつも 協調性を欠くという点で同じだ プロジェクトに参入するたびに顰蹙かうやつ
173 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 10:32:37.64 ID:qYYfNILyM.net] 追い訳しますけど、質問者が読みやすいように 質問者のスタイルに合わせてあげたという事も忘れないで頂きたい。
174 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 10:49:54.94 ID:2QIfR1k/H.net] 質問者がそのスタイル使ったのは最後の行だけだ 意図して使っているわけではないのに無駄にマイナーなスタイルで答えるな
175 名前:デフォルトの名無しさん [2020/10/20(火) 10:51:18.57 ID:pHiz9StDF.net] >>166 ideone.com pastebin.com
176 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 11:18:11.29 ID:69CHk5Nl0.net] ここでは俺が無法者だ!!
177 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 15:12:59.44 ID:aEz3U6LC0.net] 環境変数PATH なら、; 区切り。 PowerShell で以下を入力してみ $env:Path.split( ";" )
178 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 10:15:31.31 ID:KGhWJPjI0.net] >>172 このスレにコーディング規約がある訳じゃないんだからスタイルは回答者の自由だが
179 名前:デフォルトの名無しさん [2020/10/21(水) 10:45:56.94 ID:CZ2/iovY0.net] わかったわかった お前はキモい、もうそれでいいよ キモいことを自覚してそのスタイルを使い続けてくれ 心理的にダメ、気持ち悪いんだよお前
180 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 11:02:14.79 ID:nW5Wnc+BM.net] おまえツイッターでも文脈見ずにクソリプばっかりしてるだろ
181 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 12:17:24.48 ID:EPxGxCCv0.net] MinGWをインスコしてあれば path | sed "s/[=;]/\n/g"
182 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 16:41:05.37 ID:gYHxZT9P0.net] >>155 エラーメッセージからするとmain()関数内部でfact()関数の宣言を 書いていることが原因らしい。 素朴なCだと、そう書くとまだ名前が宣言されて無いグローバル関数を main()関数内部で使えるようにする意味になるが、現在のC/C++だと それぞれのコンパイラが独自に拡張したりした結果、 「(関数内部における)内部関数」なるものが使えるコンパイラが出てきたため、 意味が違ってしまっていることがある。 今の例の場合、main関数の中で後から定義するfactという名前の関数を先に 宣言する意味だとコンパイラは認識してしまっている可能性が高い。 だから、main関数の中にfact関数の関数定義が書かれて無いのでそのような エラーが出る。 もし、素朴なCのプロトタイプ宣言にしたい場合、 main()関数の外側に書くのが普通だが、なんらかの事情でmain()関数の内側に 書きたい場合には、 int main(void){ extern int fact(int n); ・・・ } のようにexternキーワードを書くと通ることがあるかも知れない。
183 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 16:52:54.92 ID:EPxGxCCv0.net] 関数のブロック内に関数原型があるのは完全に合法 実用上まず使わないけどね
184 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 17:02:00.07 ID:gYHxZT9P0.net] >>181 もとは合法だったが、それぞれのコンパイラが独自拡張をした結果、 意味が変わってしまってる場合がある。
185 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 17:14:09.48 ID:EPxGxCCv0.net] 日本語でおk
186 名前:蟻人間 mailto:sage [2020/10/21(水) 17:17:08.30 ID:vNonm69Zd.net] >>182 さん、思い込みが激しすぎて証拠がないのに持論を主張する。
187 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 17:58:35.70 ID:gYHxZT9P0.net] gccなんかは関数の中に内部関数を作れる。 だから、関数内でプロトタイプ宣言を書くと元定義の pure Cとは 異なった意味になる可能性が高い。
188 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 18:02:50.56 ID:gYHxZT9P0.net] >>184 現にその宣言が無ければコンパイルが通り、有ればエラーになっている。 それが一つの根拠。 実験してみたわけじゃないがそれらが本当におきているとすれば 入れ子関数(内部関数)の独自拡張が原因だと洞察できる。
189 名前:蟻人間 mailto:sage [2020/10/21(水) 18:05:50.18 ID:vNonm69Zd.net] >>186 再現可能な最小コードを用意して下さい。
190 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 18:11:05.50 ID:gYHxZT9P0.net] 他の人の実験結果から推定しているだけだから、事実かどうかは分からんよ。
191 名前:蟻人間 mailto:sage [2020/10/21(水) 18:23:13.18 ID:vNonm69Zd.net] モバイルCっつー奴にバグ報告せよ。
192 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 18:35:10.36 ID:gYHxZT9P0.net] PythonやLuaもサポートしているが、Clang, LLVMという言葉があった。 使ってるコンパイラはClangなのかな?
193 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 20:31:51.31 ID:z1b04ciPa.net] 簡単な質問申し訳ないです。 漢字を文字コードにて受け putcで標準出力できるかな?
194 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 20:57:42.76 ID:GehgBoqYM.net] もちろんできるけど、 入力される文字コードの種類と出力する文字の符号化方式は何にしたいか分かってるの?
195 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 21:05:35.53 ID:Cabs0W0/M.net] 文字が文字コードで扱われるのは普通の事だ 画像とかではないなら
196 名前:デフォルトの名無しさん [2020/10/21(水) 22:53:14.42 ID:sHBY55kz0.net] putw putwc
197 名前:蟻人間 mailto:sage [2020/10/21(水) 23:01:37.11 ID:T/uvMZ2i0.net] 全角文字はマルチバイト文字かUnicode文字。
198 名前:デフォルトの名無しさん [2020/10/22(木) 04:18:40.19 ID:OxqRNNZs0.net] フリーランス向け報酬即日払いサービス『先払い』が、オンライン資金調達プラットフォーム『資金調達freee』β版に掲載開始 https://prtimes.jp/main/html/rd/p/000000037.000047439.html フリーランスやパラレルワーカー同士のマッチングプラットフォーム「conema」が、 案件依頼・仲間募集を中心とした掲示板機能(β版)をリリース! https://prtimes.jp/main/html/rd/p/000000004.000059389.html フリーランス薬剤師専門エージェントサービス「きょうりょく薬剤師」、リリース開始。薬剤師の新しい働き方を提唱。 https://prtimes.jp/main/html/rd/p/000000002.000058526.html 中卒、新聞配達員から月収4億の不動産王へ。姫路の不動産王の投資哲学 https://hbol.jp/184178 【アプリ開発で起業】必要な心得とマネタイズ方法のすべて https://www.dreamgate.gr.jp/contents/column/application-development 副業を認める企業に対して「より魅力的に感じる」人は6割以上。 一方、副業を認めない企業に対する魅力度は6割超が「低下した」と回答 https://prtimes.jp/main/html/rd/p/000000016.000040832.html みんなが知らない「サラリーマンの生存戦略」副業年収1億円!motoさん伝授 https://diamond.jp/articles/-/247070
199 名前:デフォルトの名無しさん mailto:sage [2020/10/24(土) 23:58:39.57 ID:3PXn8xmW0.net] なぜ int* a = 0; *(PBYTE*)&a += 5; は動作するのに int* a = 0; (PBYTE)a += 5; はエラーになるのですか?
200 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:02:11.04 ID:TZHfVi9W0.net] >>197 (PBYTE)a += 5; どこに5を加算していると思う?
201 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:12:03.26 ID:5nJTYzvV0.net] >>198 キャストしているとはいえ、ポインタaに加算していると思うのですが、、 ポインタはアドレス0を指しているので、加算することによってアドレス5を参照したいのですが なぜかエラーが出てしまうのかわかりません..
202 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:42:02.50 ID:LNYSWk6n0.net] それだけじゃ参照してないしエラーなんてならなそうだけど いつどんなエラーになるの? 参照した時?なら、5番地を読んでいい環境なの? windowsやlinux等高級なOS上なら、絶対番地を勝手に読んじゃダメだよ
203 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:46:43.39 ID:TZHfVi9W0.net] (PBYTE)a は 変数ではなく、値になる
204 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:51:22.10 ID:5nJTYzvV0.net] >>200 コンパイルエラーになるんです。 エラー内容は"式は変更可能な左辺値である必要があります"です。 このコードはここに投稿するためのテストのために書いたコードなので、 参照関係の問題は理解しています。 *(PBYTE*)&a += 5; と (PBYTE)a += 5; はやってることは同じと思うのですが、なぜエラーになるのかなと。 そういうものとして理解するしかないのでしょうかね
205 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:57:14.44 ID:TZHfVi9W0.net] *(PBYTE*)&a = 変数aの現在の値を&で取り出し、 それをポインタ値として扱い、 そのポインタ値が指し示すところに代入する ということじゃないかな
206 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 01:18:53.38 ID:TWzqhGL8M.net] (PBYTE)a みたいにキャストすると、値の解釈の変更ということになり、 代入先(左辺値)にはできなくなる。 int i; (float)i = 1.1; って意味あると思う?
207 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 01:33:16.78 ID:5nJTYzvV0.net] あ〜〜 なるほど floatなどの小数点以下を扱う型は以下のようにdが1になる特別な仕様があるから そのためにエラーになるようになってるんですかね。 float c = 1.5f; int d = (int)c; int e = *(int*)&c; この場合、dは1になるけど、eは1069547520になるから、 エラーになる現象はこれと近いのかな この解釈であってるのだろうか
208 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 01:35:55.99 ID:TWzqhGL8M.net] それそれ。 それ追記しようとしてた。
209 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 01:54:40.07 ID:5nJTYzvV0.net] とはいえ int i; (float)i = 1.1; これはiを一時的にfloatにキャストしてるだけだから、エラーにせずにiは1として動作させるとこはできなかったんだろうか
210 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 02:21:39.27 ID:COZe3KfC0.net] >>202 「なぜエラーになるのか」はエラーメッセージに出てる。 理解を深めたいなら、エラーメッセージのどこがわからないのか(どこまでわかってるのか)を言ってもらわないと。
211 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 02:57:11.72 ID:5nJTYzvV0.net] >>208 そもそもなぜコンパイラがこれをエラーと捉えるのかというのがわからないと言う意味で言っておりました。
212 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 03:00:35.23 ID:COZe3KfC0.net] >>209 kikakurui.com/x3/X3010-2003-01.html#71 > 制約 代入演算子の左オペランドは,変更可能な左辺値でなければならない。
213 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 03:18:58.54 ID:COZe3KfC0.net] >>207 ルールがこうなってる理由がわからないという話なら、それは (float)i = 1.1 が i = 1 と同じになるようにルールを複雑化させてもそれに見合うほどうれしくないから、ね。
214 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 03:28:10.91 ID:UGl+6vH40.net] >>202 キャストの結果は常に右辺値 右辺値を代入してるから右辺値には代入出来ないというエラーが出る ポインタのデリファレンスの結果は左辺値なので代入も問題ない あとエスパーするにPBYTEってuint8_t (unsigned char)なんだろうけど(それ以外の場合はデリファレンスの結果が未定義), > *(PBYTE*)&a += 5; はint型の先頭バイトを書き換えたいという意図で, > (PBYTE)a += 5; こっちはメモリのどの位置を書き換えたいのか自明じゃないからやってること自体全く異なる
215 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 08:17:29.39 ID:B8Qi0Gue0.net] キャスト式の結果は左辺値ではない 間接演算式の結果は左辺値となる これだけのことだろ
216 名前:はちみつ餃子 mailto:sage [2020/10/25(日) 09:56:54.64 ID:63196X630.net] gcc3 の頃までは cast-as-lvalue が有ったけど 4 になるときに廃止された。 古いコードでこの機能をあてにしているものはあるかもね。
217 名前:デフォルトの名無しさん [2020/10/25(日) 13:18:04.05 ID:FzqccguI0.net] >>197 (PBYTE)*a += 5;
218 名前:デフォルトの名無しさん [2020/10/25(日) 13:19:58.42 ID:FzqccguI0.net] >>202 答えだけ言うとやってることが同じではない
219 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 16:44:12.86 ID:5nJTYzvV0.net] >>215 (PBYTE)*a += 5; これはaのポインタが指す値に5を加算しているのではないでしょうか? なので *(PBYTE*)&a += 5; と同じではないと思うのですが
220 名前:デフォルトの名無しさん [2020/10/25(日) 16:58:46.13 ID:FzqccguI0.net] (PBYTE *) って (BYTE **) のことか それなら同じじゃないな っていうか「左辺値が変更出来ない型になってる」 これでこの話は終わり
221 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 17:29:39.65 ID:0u/0rMBT0.net] それなら「左辺値」ではなく「左辺」だろう
222 名前:はちみつ餃子 mailto:sage [2020/10/25(日) 18:23:36.88 ID:63196X630.net] >>217 型とは独立して (一部関係もあるが) lvalue (左辺値) と rvalue (右辺値) という概念があるってのは理解できてる? たとえば int x=5; x = 2; と書いたら OK だけど 5 = 2; と書いたらもちろん NG だというのはわかるよね。 変数は評価したら値が出てくるけどそれとは別に場所としての性質も持ってる。 場所と値としての性質を併せ持っているのが lvalue なんだ。 で、キャスト演算子を適用するというのは取り出した値に対して型変換することになるので、 型変換した結果は場所としての性質が失われてしまう。 つまり lvalue ではなく rvalue になってしまってこれは代入先としては有効ではない。 ---- 余談 ---- 実際には代入先は lvalue の中でも特に modifiable lvalue (変更可能な左辺値) である必要があって そのあたりの詳細は 6.3.2.1 あたりに記述がある。 kikakurui.com/x3/X3010-2003-01.html#page38-div
223 名前:デフォルトの名無しさん [2020/10/26(月) 03:47:15.23 ID:zDyo5E1K0.net] >>191 出力する端末が漢字を出すような端末で、尚且つその端末で漢字とされるコードを引き渡すのであれば出る。 しかしメジャーな文字コード体系で1バイトだけで漢字を表すようなものはなく、そういった端末も(おそらく自作しない限りは)ないだろうから putc() 1回だけで漢字が出ることはまずないと思う。
224 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 07:27:20.32 ID:ddH/1NYY0.net] >>217 間接演算子は単項なので、代入演算子よりも先に結合する よって意味的にはこうなっている ((PBYTE)(*a)) += 5;
225 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 09:07:00.12 ID:ePNtOm9AM.net] >>215 >>222 恥ずかしいから出てくるな
226 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 09:39:14.29 ID:ddH/1NYY0.net] >>223 ん? 俺は、おまえさんに恥をかかせたのか? そういう意図はなかったが
227 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 10:11:22.50 ID:ePNtOm9AM.net] >>224 最初の質問が *(PBYTE*)&a += 5; (PBYTE)a += 5; の違いなのに、 (PBYTE)*a += 5; を解説するというトンチンカンで質問者を困らす回答見せられたら、 質問者に申し訳ないし同じ回答者としてこっちが恥ずかしくなるわ
228 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 11:15:20.28 ID:ddH/1NYY0.net] 俺は別に回答なんかしてねえよ > ポインタが指す値に5を加算 これは間違いだよと指摘しただけだ 俺と217の対話に横レスしてきて勝手に恥ずかしいとか言ってる恥ずかしいやつに用はない
229 名前:デフォルトの名無しさん [2020/10/26(月) 15:09:18.69 ID:EltRWJ/HF.net] int a = 123; int *p = &a; unsigned c = (unsigned long)p; みたいにすると怒られるので unsigned c = *(unsigned long *)&p; みたいに参照すると ok だったりするけど 本来は参照するだけだったコードが いつの間にか事情を知らない人によって *(unsigned long *)&p += 5; にすり替わったんじゃないかと最近思うようになった