- PR -

C言語で初心者本を読んだ次の一手は?

投票結果総投票数:55
ポインタを徹底的に 47 85.45%
コンパイル周辺を理解しろ 3 5.45%
関数群を叩き込め 2 3.64%
初心者本もう一冊? 3 5.45%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2004-08-21 22:23
コブラさんの書き込みを見て思い出したのですが、
非常に古いCでは、+= や -= ではなくて =- や =+ という表記が使われていました。
SystemIII の Portable C Compiler には、これと互換性を取るための機能が残っていて、
i=-1;
と書くと、「old fashioned operator 云々」という warning が出ました。

# しかも、生成されたコードは「i-=1;」になっていたような記憶が・・・(笑)
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-08-22 00:31
うははは、マジっすか?
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-08-22 02:22
引用:

coasmさんの書き込み (2004-08-21 22:23) より:
非常に古いCでは、+= や -= ではなくて =- や =+ という表記が使われていました。


"Lions' Commentary on UNIX" とかみると、ごろごろしてますな。
=| とか。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-08-22 23:38
はにまるです。

 なちゃさん、ぽんすさん、ukさんご返答ありがとうございます。
 ukさんご指摘の通り、一般的なデータ管理の手法の方を想像していました。
 内部的な話だったんですね。

 また、ぽんすさんの情報とおりGoogle検索した一発目のスレッドが
 内部的な話で勉強になりそうだ!と直感的に感じました。

 では早速、読んでまいります。
soluna
ベテラン
会議室デビュー日: 2004/06/15
投稿数: 59
投稿日時: 2004-08-25 12:00
反応が遅すぎ...。

引用:

ぽんすさんの書き込み (2004-08-20 01:08) より:
そうです。ここでは、アセンブラで push、pop するものを指しています。
詳しくは、なにか解説記事とか解説書とかを読んで頂くとして...
# 「自動変数 スタック」で検索すればいろいろヒットすると思います。


引用:

ukさんの書き込み (2004-08-20 14:01) より:
一般的なデータ管理の手法としてのスタックではなく、処理系(通常はOS)が用意するスタック
領域の話です。たとえば関数呼び出しの場合は、そのスタック領域に関数からの戻り先の
アドレスや引数の値を積んで(push)呼び出し、呼び出された関数は引数の値や戻り先の
アドレスをスタックから取得(pop)して処理をおこないます。よくあるバッファオーバーラン
によるセキュリティホールは、スタックに積まれた戻り先のアドレスを書き換えてしまうこと
によって実行されます。


実装的なお話をすると、自動変数やパラメータには、スタックを利用するコンパイラはあまり無いと思います。
なぜかというと、まさに、
引用:

ぽんすさんの書き込み (2004-08-20 01:08) より:
このスタックは利用できる数に制限があるので、自動変数は無尽蔵に


と、言うことですね。
VCなどでも自動変数のための領域をリンカオプションで指定出来るようになっているはず。
それらをインデックスレジスタで、スタック管理するという実装になっているはずです。
で、それらはCで言うところのallocで確保されるので、自動変数は初期値不定になります。
# で、これがLinux Square 会議室にも少し繋がると..>ぽんず さん

スキルアップ/キャリアアップ(JOB@IT)