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
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; にすり替わったんじゃないかと最近思うようになった
230 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 15:20:36.35 ID:lJWYL04O0.net] ポインタ(アドレス)の距離を求めるのに ポインタ値を整数化することはあるかもしれないしエラーにはならんね unsigned long c1 = (unsigned long)p1; unsigned long c2 = (unsigned long)p2; c1 - c2 のような (p1 - p2 はあくまで要素数だしね)
231 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 15:49:43.24 ID:qF0DukLxF.net] #include <iostream> using namespace std; class A{public: int a; A(int b):a(b){}}; int main() { A a(123), b(456); A *p = &a, *q = &b; unsigned long r = (unsigned long)p, s = (unsigned long)q; cout << s - r << endl; cout << (unsigned long)q - (unsigned long)p << endl; cout << (unsigned long)&b - (unsigned long)&a << endl; cout << (unsigned long)&q - (unsigned long)&p << endl; return 0; } 特に問題無いか
232 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:55:35.80 ID:pV+9Vnjg0.net] >>227 の p を unsigned として抜き出すのに なんでわざわざ変数のポインタを取り直してるんだ? int *p; unsigned c = *(unsigned *)p; で十分なのに
233 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:56:38.86 ID:pV+9Vnjg0.net] × p を ○ p の指し先を
234 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:41:34.62 ID:P78swXdWM.net] *pじゃなくてpを取り出してるからだろ
235 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:55:26.21 ID:ZLlt5QiZ0.net] pの指し先をunsignedとして抜き出しているわけではないよ p(ポインタ)自体をunsignedに無理やり変換している
236 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:58:46.96 ID:rHcuqZcg0.net] >>227 OKではない。 intとunsigned longは互換性のある型ではないし, アラインメントが異なる場合もあるから一般に未定義動作。 >>228-229 間違ってないけどそのための型としてintptr_tやuintptr_tがあるからそっち使ってくれると可読性がよくてすき
237 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:01:39.15 ID:pV+9Vnjg0.net] ん? ポインタの整数値化 intptr_t な意図なの? intptr_t c = *(intptr_t *)&p; がなおさら混乱するな
238 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:08:25.93 ID:rHcuqZcg0.net] >>235 long a = 10; uintptr_t addr_a = (uintptr)&a;
239 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:09:01.82 ID:rHcuqZcg0.net] uintptr_t addr_a = (uintptr_t)&a; _tが抜けた
240 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:12:25.39 ID:pV+9Vnjg0.net] >>237 それはわかる >>227 のコードが何を意図してそう書いたのかがワカランのよね
241 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 12:22:27.85 ID:telUcSp60.net] 警告出るね codepad.org/wCwz9aAV
242 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 08:19:02.64 ID:HwPze+NQ0.net] どーせ、プロセッサのプロテクトモードとかで、純粋にポインタの計算すると意図しないオーバーフローやアンダーフローするからじゃね?
243 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 06:41:32.43 ID:TJdrJp6g0.net] ポインタは符号付きなわけか
244 名前:デフォルトの名無しさん mailto:sage [2020/11/07(土) 11:29:01.04 ID:zMpN0fYG0.net] ファミコンってC言語でもプログラミングできるんだねえ すごいねえ
245 名前:デフォルトの名無しさん mailto:sage [2020/11/07(土) 15:37:28.16 ID:vm8bz31qM.net] そんなのコンパイラ次第じゃないのか? 知らんけど
246 名前:デフォルトの名無しさん [2020/11/08(日) 15:22:32.44 ID:iVjroALJ0.net] >>242 ファミコンのCPUは2A03(6502互換)だからかなり苦しい感じだと思うけどな。 スタックポインタが8bitしかないしな。つまりスタックは256バイト固定。もちろんメモリは最大64KB。 それでもCコンパイラはあったようなのでかなり工夫したんだろうと思う。
247 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 16:57:10.35 ID:qvYN+WNM0.net] 今も昔もゲーム機の開発なんかはクロス環境だろ ターゲット上で直接コンパイラ走らせているとは思えないのだが
248 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 17:19:43.81 ID:fW7gwItS0.net] 任天堂から高価な開発機を借りるか買うかしてやるんじゃなかった?