C言語なら俺に聞け 159

■ このスレッドは過去ログ倉庫に格納されています
2022/08/04(木) 23:32:27.83ID:yWVViPyIM
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C2x ドラフト
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2731.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 158
https://mevius.5ch.net/test/read.cgi/tech/1640401906/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/12/01(木) 16:54:14.03ID:LIu803lba
>>707
Linuxではメモリの許す限りスタックが使えるから
2022/12/01(木) 16:54:27.16ID:ZPuEPm3M0
>>707
ありがとうございます
それでした
2022/12/01(木) 17:04:51.34ID:IEkrCGic0
おま環定期
2022/12/04(日) 21:55:28.56ID:7byHd/K/d
>>708
とはいえmallocにしたほうがいいんでない?
2022/12/04(日) 22:07:50.79ID:RAGda7mP0
VLAで足りることにmallocか
2022/12/04(日) 22:16:11.60ID:Yt2fANdLH
>>712
C++ で見捨てられた VLA なんか使いたくないですね
2022/12/04(日) 22:29:52.59ID:xXGWnQN3d
>>712
VLAはC99で採用されたけどC11でオプション仕様に格下げされたよ
2022/12/04(日) 22:31:57.30ID:JQ3spjvfM
>>708
それってどこ情報なん?
716デフォルトの名無しさん (ワッチョイ 3e04-g9pY)
垢版 |
2022/12/04(日) 23:03:10.81ID:UdvGlPZ+0
Cで通信系いじりたいんやけどなにからすればええ?
まずはゲームとか作ってC言語に慣れた方がええんやろか
「無線 C言語」と調べてもコロナ社の本しか出てこん
本買った方がええんか?
右も左もわからん、どなたか教えてください!!!
2022/12/04(日) 23:04:19.10ID:AOlAqVGT0
まず何がやりたいのかはっきりさせろ
何もわからんぞ
2022/12/04(日) 23:09:42.46ID:HgjSOVEG0
通信系って、無線通信?
C言語には電波を飛ばす機能はないよ
719デフォルトの名無しさん (ワッチョイ 3e04-g9pY)
垢版 |
2022/12/04(日) 23:14:41.99ID:UdvGlPZ+0
ネット通信とか無線通信はC言語だとどっかで耳にしたからとりあえずやりたくなったんや
なんかいい通信系の入門サイトとかあれば教えてほしい
720デフォルトの名無しさん (ワッチョイ 3e04-g9pY)
垢版 |
2022/12/04(日) 23:17:10.93ID:UdvGlPZ+0
>>718
無線通信系に興味ある
電波飛ばす機械をC言語でなんかするんじゃないん?
721デフォルトの名無しさん (ワッチョイ e2ad-4FAg)
垢版 |
2022/12/04(日) 23:26:26.75ID:MiJYA0Kr0
通信をする方法が無線かどうかはハードウェアの問題。
更にOSやデバイスドライバやOSのシステムコールをどのように呼べば良いかを知る必要がある。
C言語の知識が必要になるとすると通常はここからだ。

そうではなくてハードウェアはあるがOSがなくI/Oポートを直接読み書きするようなプログラムを
作る必要がある場合はアセンブラかC言語で作ることになると思う(必ずしもそうである必要は
ないが)。その場合はOSのデバイスドライバを自作するような感じになる。
2022/12/04(日) 23:27:41.55ID:HgjSOVEG0
有線にしろ無線にしろ、通信という以上は相手があって
その相手とルールの取り決めをしてからそのルールにしたがってやり取りする
だから最初に、誰と、どういう取り決めでデータのやり取りをするかを決めないといけない
インターネットもそういうルールをみんなで決めてやり取りをしている
とりあえずインターネットの通信を学んでみたらどうだろう
この掲示板に書き込みをしているのだから、その通信が可能だし、
その機種を使って試すところから始めると良い
2022/12/05(月) 00:30:23.98ID:ddGzHpStd
>>712
スタックの仕様は機種依存が激しいから可搬性を考えたらスタックは無限にあると考えないほうがいい
というかLinuxではデフォルト8MBみたいだけど
2022/12/05(月) 00:47:01.63ID:ddGzHpStd
というかスタックというのは一番効率の悪いメモリの使い方なので
本を片っ端から積み上げて下の方は取れなくなってしまうイメージ
大規模な配列はスタックに置かないほうがいいというのは基本では
断片化があるとはいえmallocのほうが効率的
2022/12/05(月) 00:55:05.00ID:d/jwcHzh0
一番上と、一番下でアクセスの速度は同じでしょう
726デフォルトの名無しさん (ワッチョイ 4697-KDKu)
垢版 |
2022/12/05(月) 01:09:57.27ID:rpvKYALB0
スタックが上のデータに埋もれて下のデータが取り出しにくくなるなら、ヒープでも全く同じことが発生するはず。
適当なアナロジーで間違った理解をしている典型例だと思う。
2022/12/05(月) 01:14:21.69ID:ZI2+JeHur
デカいデータで最適化が効くことがあるのはグローバル変数
2022/12/05(月) 01:15:32.38ID:m5vf/Aut0
Cのローカル変数は、マシン語レベルではスタック領域に生成されるが
相対アドレシングで自由にアクセスするので問題ない
729デフォルトの名無しさん (ワッチョイ 2135-1pGr)
垢版 |
2022/12/05(月) 01:21:11.87ID:op7KwCv70
領域の確保開放が上からしか出来ないだけで読み書きはどこでもできるもんな
2022/12/05(月) 06:17:33.64ID:0xhTnbB50
>>723
え、無限にあると考えることがあるの?
・・・あれか、マイクソソフトが吹聴してる例の有害なやつか
2022/12/05(月) 08:28:01.18ID:d0zhDPVSa
>>711
競プロだぞ
2022/12/05(月) 08:42:20.41ID:AHxKL62Z0
有限さん「おい、スタックが無限にあると考えられるとはどういうことだ?証明して見せろ!!」
ムゲンさん「わかりました。では無限なメモリを積んだコンピュータを用意してきてください。そしたら証明して見せます。」
有限さん「そんなことできるわけないだろ!」
ムゲンさん「ザンネン。じゃああなたのご希望に沿うことはできないですね。」

ボク「それってつまり、無限のスタックは存在しないってことなんじゃ?」

ムゲンさん「『無限なメモリを積んだコンピュータは存在しない』というのは悪魔の証明であって、存在しないと断言すること自体が不可能です。」

ボク「屏風の虎…一休さんかよ」
2022/12/05(月) 09:23:30.88ID:0xhTnbB50
観測可能な宇宙に原子が8e79個あり、
DDR4のセル電荷が2.4e-14クーロンとすると
メモリは6.7e73バイトまでしか作れない
∴ 無限のメモリは存在しない
2022/12/05(月) 09:27:43.41ID:AHxKL62Z0
観測不可能な宇宙領域がまだあるではないか
そこには無限の(ry
2022/12/05(月) 09:44:59.30ID:BaBCvHVhM
量子メモリであれば無限の状態を記憶できるか?
2022/12/05(月) 10:56:43.18ID:ddGzHpStd
>>725
速度の問題ではなく
用済みになっても開放できずにいつまでも抱え込んでいなければならないことが問題
2022/12/05(月) 11:14:13.11ID:d/jwcHzh0
スタック上の変数って、その関数内でしか用は無いのだから
関数が終了と同時二メモリーから消え去ります
抱え込むことはありません
2022/12/05(月) 11:22:51.84ID:hYIKK9DOp
児童変数の事?
2022/12/05(月) 11:23:28.04ID:E9Ntil7Ed
効率悪い実装してれば効率悪くなるだけの話やな
スタックは一時変数の効率的確保の極みなんだけど関数化を怠った結果そうなる
2022/12/05(月) 11:24:48.36ID:hYIKK9DOp
児童変数を関数の戻り値にするのは実体渡しだけにしておかないと痛い目に逢ったなぁ
2022/12/05(月) 11:28:42.22ID:d/jwcHzh0
>用済みになっても

と言うことだから、関数間の受け渡しは考慮しなくて良いでしょう
742デフォルトの名無しさん (ワッチョイ e2ad-4FAg)
垢版 |
2022/12/05(月) 18:42:27.81ID:M2dfOAYW0
自動変数用のスタックは本物のスタックポインタ無視して別に作っちゃってもできるな。
そういうコードを吐くコンパイラも作れるというだけのことではるが。
でもその方がリターンアドレスが詰まれている所に変数混ぜるより安全な感じはする。
特にC言語の場合は配列の範囲をオーバーしても平気でどんどん書き換えちゃって関数の終わりで明後日の方向にリターンなんてものも作れちゃうから。
2022/12/05(月) 18:46:56.29ID:d/jwcHzh0
ワープ航法w
2022/12/05(月) 19:26:38.80ID:3chMJcRmp
8ビット時代にゃスタックジャンプは普通にやってたなぁ
2022/12/05(月) 19:33:53.84ID:XYzlQpP/M
スタック保護
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c905.html
2022/12/05(月) 20:04:47.35ID:9YGPhFSH0
>>742
> 自動変数用のスタックは本物のスタックポインタ無視して別に作っちゃってもできるな。
当たり前だろ、その本物とやらのスタックポインタもたないマシン(例えば汎用機)もあるんだし

> でもその方がリターンアドレスが詰まれている所に変数混ぜるより安全な感じはする。
暴走するか変なデータになるかの違いしかない
どっちがマシかは状況による
2022/12/05(月) 20:08:14.24ID:AHxKL62Z0
いや暴走のがマシなんて状況あるん?
変なデータは使用する時点でチェックすれば防げるけど
2022/12/05(月) 21:05:25.92ID:9YGPhFSH0
>>747
> いや暴走のがマシなんて状況あるん?
今時のプロセッサーなら暴走したら不当命令とか>>745のリンク先にあるデータ実行防止で止まる可能性が高い

> 変なデータは使用する時点でチェックすれば防げるけど
それが完全なら良いけど例えば金額が多少間違っててもチェックできないケースもあるだろ
2022/12/05(月) 22:17:34.11ID:d/jwcHzh0
補助輪つき自転車みたいだ
2022/12/06(火) 00:15:19.77ID:XVvWtcz/d
>>737
抱えたまま他の関数を呼び出したり
あと再帰呼び出しとかスタックを利用する一番の利点とされてるけど?
問題なのは呼び出された関数がすでにスタックが残り少ないのを知る手段がなく
そこでクラッシュしても原因がわかりにくいという開発上のトラップだな
まあ大規模なソフト開発してみればわかるよ
2022/12/06(火) 00:17:55.95ID:PYPomZFd0
それはメモリー不足が何時起きるか分からないと言ってるのと同じ事ですが
2022/12/06(火) 00:44:18.64ID:8IYUkFNt0
スタックオーバーフローという
エラーメッセージがあるのでは?
2022/12/06(火) 00:44:54.36ID:8IYUkFNt0
スタックオーバーフローという
エラーメッセージがあるのでは?
754デフォルトの名無しさん (ワッチョイ 2135-1pGr)
垢版 |
2022/12/06(火) 00:47:21.54ID:qZ0a8ZvK0
スタックオーバーフローという
エラーメッセージがあるのでは?
755デフォルトの名無しさん (ワッチョイ 2135-1pGr)
垢版 |
2022/12/06(火) 00:47:27.32ID:qZ0a8ZvK0
スタックオーバーフローという
エラーメッセージがあるのでは?
2022/12/06(火) 00:48:27.88ID:PYPomZFd0
スタックオーバーフローは、大規模なソフト開発とはあまり関係ないデスね
大規模なソフト開発してて、スタックオーバーフローでプログラム落ちたら、
笑われると言うか、怒られるかも
2022/12/06(火) 01:09:59.63ID:LDJX4o340
スタック上に大領域確保するにしても
内部で余計な関数呼ばない結果だけ返す関数作って抱え込まない
深さを限定できない再帰呼び出しもありえないし
758デフォルトの名無しさん (ワッチョイ 9b5f-I/ml)
垢版 |
2022/12/06(火) 03:07:59.72ID:PbeCdWM30
699 デフォルトの名無しさん (ワッチョイ 972d-zuBb) sage 2022/12/01(木) 15:02:39.09 ID:ZPuEPm3M0
ttps://atcoder.jp/contests/abc273/submissions/35667282
このコードを実行するとscanfで入力を待つはずなのですが即座に終了してしまいます
たまにそういうコードを見かけるのですが何が原因なのでしょうか
printfを入れても実行されないのでmainがスキップしているような。。
759デフォルトの名無しさん (ワッチョイ 9b5f-I/ml)
垢版 |
2022/12/06(火) 03:09:09.32ID:PbeCdWM30
>>758
いまだにhを取るあたりがもう超絶無能
760デフォルトの名無しさん (ワッチョイ 9b5f-I/ml)
垢版 |
2022/12/06(火) 03:10:27.42ID:PbeCdWM30
>>758
25年くらい前のネットの書き方だな
2022/12/06(火) 08:24:16.80ID:zdZ3zkNx0
Win98時代は1Mバイト程度の配列変数作っただけで動作がおかしくなってたな。
スタック増やせって言われてコンパイルオプション弄ったけど改善しなかった記憶・・・。

DOSからWinに来たときは64kバイト以上のメモリ確保さえ避けてた。
2022/12/06(火) 08:27:50.69ID:63yxghiR0
そりゃー8086のセグメント方式なんだから64k超えは問題ありまくりんぐでそ
2022/12/06(火) 11:20:14.67ID:yvaEv+2ca
>>761
> Win98時代は1Mバイト程度の配列変数作っただけで動作がおかしくなってたな。
それは今でも一緒だろ
Windows の既定のスタックサイズは1MBのままだぞ
https://learn.microsoft.com/ja-jp/windows/win32/procthread/thread-stack-size
2022/12/06(火) 11:30:06.24ID:PYPomZFd0
MS-DOSの頃は、メモリ1MB積んだPCってスゴイ豪華な印象だったな
搭載メモリーを使い切る様なプログラムを、オレは書けるんかって思ってた
2022/12/06(火) 12:01:21.10ID:63yxghiR0
I/Oバンク方式かEMSかって時代か
2022/12/06(火) 14:59:37.11ID:iX2JPZR5d
本当のメインメモリとして使えたのは640kBまでで
残りの384kBはバンクかEMSの増設メモリだった
2022/12/06(火) 19:43:39.61ID:PYPomZFd0
最初はハードウェアで実装してたけれど
そのうち仮想86モードだったかで、
特別なハードを追加せずにメモリアクセス出来る様になってたね
2022/12/06(火) 20:33:29.46ID:zjGx1PLy0
>>766
残りはハードウェアのIOやらROMやらVRAMなどだ
EMSウインドウはその開いている隙間アドレスにねじ込んだだけ
2022/12/06(火) 21:49:14.42ID:63yxghiR0
>>767
あったねー、ソフトウエアEMS>ハードウエアEMSなんて珍現象
2022/12/09(金) 05:45:28.61ID:QbuGAkRx0
#include <stdio.h>
#include <time.h>

void
main(void)
{
time_t now, now2;

now = time(NULL);
now2 = time(NULL);
struct tm *tm1 = localtime(&now);
struct tm *tm2 = localtime(&now2);

tm2->tm_mday = 1;
tm2->tm_mon = 1;

printf("%d %d\n", tm1->tm_mday, tm1->tm_mon);
printf("%d %d\n", tm2->tm_mday, tm2->tm_mon);
}
2022/12/09(金) 05:46:27.95ID:QbuGAkRx0
tm2を変更するとtm1も同じ値になってしまいます。
回避方法を教えて下さい。
2022/12/09(金) 05:47:05.17ID:QbuGAkRx0
OS:Linux Mint
コンパイラ:gcc です
2022/12/09(金) 06:15:54.45ID:rdO0dbBS0
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/ctime.3.html
localtime_r()を使いましょう

struct tm *tm1 = localtime(&now);
こんな使い方をするって時点でlocaltime()が「何」を返すのか、察しましょう
2022/12/09(金) 06:58:19.07ID:QbuGAkRx0
>>773
サンクス、動いた
2022/12/09(金) 07:14:28.04ID:aKtIUC7D0
このへん、言っちゃなんだけどクソだね
なんでこんな変な設計にしたんだろう
776デフォルトの名無しさん (ワッチョイ 2135-BGgp)
垢版 |
2022/12/09(金) 07:27:22.65ID:G83XZmEL0
ローカルで構造体を定義してそこへのポインタを返すとスタックから消えてデータが壊れますか?
2022/12/09(金) 07:54:25.65ID:DDM/thjI0
>>775
いちいち使う人に領域確保させる手間をかけさせたくなかったってことでしょ
マルチスレッドなんてない時代だし
2022/12/09(金) 07:57:34.07ID:DDM/thjI0
>>776
構造体に限らずローカル変数へのポインタを返すとポインタの指す先の内容は壊れる(かもしれない)
2022/12/09(金) 13:31:15.00ID:RVIOSi06d
未定義の動作という
2022/12/09(金) 15:26:27.10ID:Z1cscK2ka
>>775
strtok
2022/12/09(金) 15:41:02.97ID:8zaQFmsV0
何らかの要因でテンパって煮詰まってコーディングしてて
変なものができてしまうこと、皆さんも経験あるのでは
2022/12/09(金) 17:25:23.52ID:Qnrm7z6h0
>>776
スタックから消えるというか、言語仕様的な用語でいうと生存期間が終了していることになる。
そんでオブジェクトを生存期間の外部で参照したときの動作は未定義なので何が起こるかわからん。
C でいう未定義ってのは「何が起きてもいい」なのでデータが壊れる (意味不明の値が読みだされる) だけでは済まないかもしれない。
2022/12/09(金) 17:34:59.55ID:i/ZE6Izl0
恋と同じで、はかなく消える運命
784デフォルトの名無しさん (ワッチョイ dfad-KKgq)
垢版 |
2022/12/10(土) 01:00:03.41ID:ap6EnRqC0
>>776
すぐ消えないことがあるので読めてしまうかも知れない。しかし何かをすると一瞬にして破壊されて終わるかも知れない。
あてにしてはいけない。

ていうかこの頃のコンパイラってそういうのは警告出したりエラー扱いにしない?
2022/12/10(土) 08:35:32.63ID:0yWWcyiC0
コンパイル時に常に摘出できるわけじゃないし
2022/12/10(土) 08:43:06.25ID:VZKCrGXt0
いやバグは睾丸みたいに摘出はできないだろ
2022/12/10(土) 11:08:12.32ID:8LaJbp4o0
warning C4172: ローカル変数またはテンポラリのアドレスを返します: hoge

VS2022
2022/12/10(土) 11:18:10.60ID:W5v0KihFa
>>787
https://learn.microsoft.com/ja-jp/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4172?view=msvc-170
2022/12/10(土) 11:34:37.41ID:FHzDIuwr0
そういうときはレジスタ変数のアドレスを返すようにコーディングしなさい
2022/12/10(土) 11:49:59.77ID:n733SMJ50
staticの出番は?
791デフォルトの名無しさん (アウアウウー Sa6b-uI1h)
垢版 |
2022/12/10(土) 12:13:19.32ID:9jPqI4Xva
そして>>773の仕様となるのであった…
2022/12/10(土) 12:55:16.29ID:8LaJbp4o0
int *fuga(void){
 register int i = 123;
 return &i;
}

error C2103: '&' レジスタ変数のアドレスを得ようとしました。

ふむ
793デフォルトの名無しさん (ワッチョイ a735-yK5Y)
垢版 |
2022/12/10(土) 13:24:22.34ID:HjLF/vvU0
>>788
説明とコードが対応してる気がしない
どういうこと?
2022/12/10(土) 13:32:02.53ID:GuAR5Ny/0
>>348
レジスタに割り当てた変数には左辺値はないよ
だって、ハードウェアのレジスタだから
2022/12/10(土) 13:43:23.28ID:VZKCrGXt0
言いたいことはわかるけど日本語が変
左辺値はメモリアクセスを意味する式なので
レジスタに左辺値がないのではなく
記憶クラスがregisterの変数の識別子は左辺値ではない
796デフォルトの名無しさん (ワッチョイ a735-yK5Y)
垢版 |
2022/12/10(土) 13:46:04.91ID:HjLF/vvU0
>>789への疑問やろ
2022/12/10(土) 14:05:33.41ID:lr6mtoK80
>>793
floatからdoubleへ変換したうえでその参照を返してる
パッと見分かり辛くて人間の認知への挑戦かと思うなw
2022/12/10(土) 15:12:06.94ID:brInbnm70
>>792
register 指定が付いたらアドレスを取る操作自体が出来なくなるように制限されてるよ。
配列を register 付きで宣言したらなにも出来なさ過ぎてワロタwwwというのはよくあるネタ。
(言語仕様的には配列 (の要素) へのアクセスもポインタ演算の構文等になってるから暗黙にアドレスを取る操作。)

>>794-795
左辺値であるかどうかと記憶クラスは関係ない。
必ずしもメモリにアクセスすることを意味しない。
register 宣言でアドレスを取れなくなるのは左辺値でなくなるからではなく
& のオペランドは register 付きで宣言されたものであってはならないという直接的な制約。
どこをどう見ても左辺値の定義自体には register 指定は関係しない。

更に C99 の 6.5.3.2 から単項 & の制約について抜粋

> The operand of the unary & operator shall be either a function designator, the result of a
> [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is
> not declared with the register storage-class specifier.

JIS の日本語だとこうなってる。

> 単項&演算子のオペランドは,関数指示子,[]演算子若しくは単項*演算子の結果,又は左辺値でな
> ければならない。左辺値の場合,ビットフィールドでもなく,register記憶域クラス指定子付きで宣言
> されてもいないオブジェクトを指し示さなければならない。

左辺値のときは register 指定されていてはいけないというのは逆に言えば register 指定されている左辺値というものも存在することを示唆する。
2022/12/10(土) 15:19:28.45ID:VZKCrGXt0
> register 指定されている左辺値というものも存在することを示唆する。

具体例ある?
2022/12/10(土) 15:24:22.50ID:brInbnm70
>>799
具体例というか、 register 指定は左辺値か右辺値かの定義に無関係なので
左辺値なものは register 指定されていようがいまいが左辺値って話。

変数の宣言のときに register 指定を付けたら全て register 指定のついた左辺値だよ。
2022/12/10(土) 15:44:01.19ID:VZKCrGXt0
メモリにアクセスすることを意味するでしょ。

6.3.2.1 左辺値
左辺値が評価されたときにオブジェクトを指し示していなければ,動作は未定義とする。

3.14 オブジェクト(object) その内容によって,値を表現することができる実行環境中の記憶域の部分。
参考オブジェクトを参照する場合,オブジェクトは,特定の型をもっていると解釈してもよい(6.3.2.1 参照)。

なんでそういう決まりになっているのかを理解せずに条文の字面に書いてあることだけ表面的に言う人とは歯車が噛み合わないな。
2022/12/10(土) 15:50:02.57ID:gyOVa4Se0
>>792みたいなのはレジスタ変数じゃなくてもやっちゃダメだけどw
2022/12/10(土) 15:51:48.45ID:zHuXawkZa
昔の CPU はレジスタが少なくて
なんでもかんでも register 付けて宣言すると
CPU の持ってる実 register 数以上に宣言してしまうことが多い
では使い切った後の変数はどこに割り当てられるのか?
2022/12/10(土) 16:30:03.16ID:brInbnm70
>>801
話を >>794 といっしょくたにしたのが誤りだった。 すまぬ。

> ハードウェアのレジスタだから
の続きで
> メモリアクセスを意味する式なので
をハードウェア的なメモリアクセスの意味で解釈してしまった。
むしろそんなん関係なく言語仕様上の意味で反論してたんだね。

(後から読む人のために補足すると C の言語仕様でいう実行環境は言語仕様で規定する仮想的な実行環境の
ことであって実際の機械語とどう対応づけるか規定されない。 どういう機械語が生成されるかは
言語の意味の根拠にならないので言語仕様で再解釈しようとしたのが >>795 だと私は解釈した。)

が、言語仕様の解釈として

> registerの変数の識別子は左辺値ではない

の部分が誤っているということには変わりないよ。
2022/12/10(土) 21:03:51.14ID:iVr3EzOTM
レジスターにもアドレスを割り当てておいたら良かったかも
2022/12/10(土) 22:47:45.19ID:37vQL6PeM
昔6800系CPUはメモリの固定番地をレジスターと同格に扱うダイレクトメモリアドレッシングで見かけのレジスタ数を増やしていた
2022/12/10(土) 22:55:13.62ID:FHzDIuwr0
レジスタを指すポインタをインクリメントすると、別のレジスタの値を書き換えられる、とか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況