C言語なら俺に聞け 163 (987レス)
前次1-
抽出解除 レス栞

88
(1): デフォルトの名無しさん (ワッチョイ a6b5-RtM0) [sage] 2024/09/11(水) 08:00:07.84 ID:eq6A6T9x0(1) AAS
>>81
81(1): デフォルトの名無しさん (アウアウエー Sa52-t/33) [] 2024/09/10(火) 13:19:09.36 ID:KGjTz1X0a(1) AAS
>sやtは const
constっていつからあったか知らんけど
constない頃からsもtも*pや*qとは扱いが違ったんじゃね
アセンブラにして考えるとわかりやすい

char s[] = "hoge";
アセンブラの表現↓
s:
   .db "hoge¥0"

char *s = "hoge";
アセンブラの表現↓
s_org:
   .db "hoge¥0"
s:
   .dw s_org

上の場合書き換えようにもsには実体がない
アドレス定義ラベルでしかない

*ただし完全に最適化されると下も上と同じになる
   
115: 警備員[Lv.1][新芽] (ワッチョイ 1e86-ztXh) [sage] 2024/09/13(金) 13:50:08.30 ID:cjEIJ97r0(2/4) AAS
>>108
108(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 65e8-hr+9) [sage] 2024/09/13(金) 10:12:57.71 ID:9XTDQHQm0(1/2) AAS
C の仕様は抽象機械の動作として記述される。
抽象機械の動作をどのように実際の機械と対応させるかは自由で、見かけ上の動作が同じならどういう機械語になってもいい。
生成された機械語から言語仕様を理解しようとすべきではないよ。

低レイヤプログラミングするならどう対応付くか知る必要がある場合もあるのは否定しないけど……
ありがとうございます

そもそも >>88 で sの実体がないとはどういうことか、というのが疑問だったためで、言語の仕様(というか実装)がどうかには着目していませんでした

printf("%s\n", s); が .sではputs(s); に置き換えられていたり
そうだよな〜
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 2.429s*