K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[1968] Re:疑りぶかいあなたのためのオブジェクト指向再入門
返信


投稿者:(ぱ)こと管理人
2016/09/06 23:32:31

Link:
>そこで、出来ましたら、Java の良い本をご紹介願えますと幸いです。
>何卒、宜しくお願い致します。

すみません、最近の本は知らないのですが……
手前味噌でよければ、

「Java謎+落とし穴徹底解明」
https://www.amazon.co.jp/Java-%E8%AC%8E-%E8%90%BD%E3%81%A8%E3%81%97%E7%A9%B4-%E5%BE%B9%E5%BA%95%E8%A7%A3%E6%98%8E-%E6%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/dp/4774113611

amazonマーケットプレイスで1円とかで買えるようです。
3章の「継承をどう使うか? どこまで使えるか?」あたりは、ある意味「疑り深い〜」の
続きと言えるかと思います。
ただ、かなり古い本ですので(JDK1.3の頃)、今となっては古くなってしまっている
ところもあります。Genericsや列挙がないことに不満を述べていますが、それらは
Java5で実装されましたので。

あとは定番で、Effective Javaとかでしょうか……
https://www.amazon.co.jp/EFFECTIVE-JAVA-Java-Joshua-Bloch/dp/4621066056
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1967] Re:疑りぶかいあなたのためのオブジェクト指向再入門
返信


投稿者:晶夫(あきお)
2016/09/05 11:13:19

Link:
前橋 殿

返信ありがとうございます。
私は小企業のIT派遣会社で働いています。
現在、常駐先が見つからず、本社にて「待機」の状況です。
そのため、この様な掲示板にカキコできる時間が取れています。


>私自身割と大手のSIerにいる身ですので、私より年上の方がコード書きの勉強を
>されているとなると尊敬しますし励みになります。

私の24年間は大手の製造メーカーで従業員は2万人規模の大会社でした。
そこで、「生産管理システム・MES」の
要件定義〜概要設計〜基本設計〜詳細設計〜(開発・単体テスト)〜結合テスト〜
システムテスト〜本番化〜保全
という流れで、プログラムは保全でしか見ていませんでした。
しかし、24年間務めた会社を辞め、転職して今の小企業に居ます。

小企業なので、上述の 要件定義〜以下すべて〜保全
まで出来る人が派遣先が見つけやすいのです。
年齢も高いので、派遣先の年齢制限に引っかかる場合も多く贅沢は言えないのです。
そのため、保全でしかやっていなかったコーディングをやらざるを得ない状況で、
コードの勉強をしています。

「疑りぶかいあなたのためのオブジェクト指向再入門」は継続しない、との事、
残念ですが、忙しい前橋殿に置いては致し方ないと思います。

そこで、出来ましたら、Java の良い本をご紹介願えますと幸いです。
何卒、宜しくお願い致します。

晶夫
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1966] Re:疑りぶかいあなたのためのオブジェクト指向再入門
返信


投稿者:(ぱ)こと管理人
2016/09/05 02:39:55

Link:
はじめまして。

>SE歴は24年になります。前橋殿より5歳上になります。

私自身割と大手のSIerにいる身ですので、私より年上の方がコード書きの勉強を
されているとなると尊敬しますし励みになります。

>それが、昨日、「疑りぶかいあんたのためのオブジェクト指向再入門」
>を読ませて頂き、目からウロコが落ちました。

ありがとうございます。

>この連載は、まだ、続くと書いてありました。
>本当に期待しています。

すみません、「これから随時書き足していくつもりです」と書いたのが
かれこれ10年以上前の話ですので、今から続きを書くかというとちょっとお約束
できかねるところではあります。
続きを書くとすると次のネタは「継承」ですが、よくある「Shapeを継承して
PolylineやRectangleやCircleを作る」という例は、Pascalの可変レコード型や
Cでそれを共用体と列挙型で真似する例のような「データメンバを拡張する例」としては
なかなか便利でわかりやすいのですが、
メソッドのオーバーライドの例として、図形を描画するdraw()メソッドを作ろう、
となったあたりでかなりうさんくさくなります。よく入門書では出てくる例ですが、
実のところこの使い方は「間違い」だと私は思っています(本にも何度か書いていますが)。

その辺でうんうんうなっているうちに、10年過ぎた感じです……
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1965] 疑りぶかいあなたのためのオブジェクト指向再入門
返信


投稿者:晶夫(あきお)
2016/09/02 15:39:38

Link:
前橋和弥 殿

晶夫と申します。
学生時代からPascal やC などを個人的に勉強してきて、就職と同時にSEになった
者です。
SE歴は24年になります。前橋殿より5歳上になります。

その私でも、オブジェクト指向に入れていませんでした。
正直、オブジェクト指向のメリットが分からず、Java や VB.Net や C# の勉強をしていて、
とにかく、全然、自分の物になっていませんでした。
それが、昨日、「疑りぶかいあんたのためのオブジェクト指向再入門」
を読ませて頂き、目からウロコが落ちました。

これから、本格的にオブジェクト指向を学ぶ自信になりました。

思わず、お礼が言いたくて、この投稿を致しました。

この連載は、まだ、続くと書いてありました。
本当に期待しています。

オブジェクト指向のメリットが分からず、先へ進めずにいたのが、
進めます。

とにかく、続きをお願いいたします。

ありがとうございました。
晶夫
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1964] Re:Apacheへのリクエストがタイムアウト
返信


投稿者:stonehand
2016/08/03 08:01:20

Link:
ありがとうございました。

>一応、client_send.txtの末尾の、HTTPリクエストヘッダの終わりを示す
>空行を抜いたら、同様のタイムアウトが返りました。
>念のための確認ですが、同様になっていないでしょうか。

client_send.txtに改行を加えて試したところ、正しく動作しました。
今後とも、よろしくお願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1963] Re:Apacheへのリクエストがタイムアウト
返信


投稿者:(ぱ)こと管理人
2016/08/03 00:22:11

Link:
>>(2)client_send.txtをここに貼ってください。
>GET /index.html HTTP/1.1
>Accept: text/html, application/xhtml+xml, */*
>Accept-Language: ja-JP
>User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
>Accept-Encoding: gzip, deflate
>Host: localhost:8001
>DNT: 1
>Connection: Keep-Alive

見たところ不審なところはないですし、これをコピーして作った
client_send.txtで、当方では正常動作しました。

症状からして、
・タイムアウトとはいえレスポンスが返ってきているので、
 Apacheと通信すること自体はできている。
・しかし、Apacheは、HTTPリクエストを最後まで受け取れず、
 タイムアウトを返している。
という状況です。

一応、client_send.txtの末尾の、HTTPリクエストヘッダの終わりを示す
空行を抜いたら、同様のタイムアウトが返りました。
念のための確認ですが、同様になっていないでしょうか。

[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1962] Re:Apacheへのリクエストがタイムアウト
返信


投稿者:stonehand
2016/08/02 08:29:53

Link:
お手数をおかけしております。

>(1)TcpClient.javaの修正ですが、修正版のソースが「TcpClient.java(Apache版)」という
> ファイル名で同梱されています。これを使ったのでないのなら、一度こちらで
> 試していただけますか。

こちらでも同様にタイムアウトしました。


>(2)client_send.txtをここに貼ってください。
GET /index.html HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ja-JP
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: localhost:8001
DNT: 1
Connection: Keep-Alive

以上ですが、よろしくお願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1961] Re:Apacheへのリクエストがタイムアウト
返信


投稿者:(ぱ)こと管理人
2016/08/02 01:52:28

Link:
>書籍26-27ページの、client_send.txt、TcpClient.javaの内容を変更して実行すると
>タイムアウトとなり、client_recv.txtの内容は以下のようになります。
>何が原因なのでしょうか。

情報ありがとうございます。
ただ、当方でも試しましたが再現しません。
念のためApacheのバージョンを2.4.23に上げてみましたが同じでした。

(1)TcpClient.javaの修正ですが、修正版のソースが「TcpClient.java(Apache版)」という
 ファイル名で同梱されています。これを使ったのでないのなら、一度こちらで
 試していただけますか。
(2)client_send.txtをここに貼ってください。

よろしくお願いいたします。

[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1960] Apacheへのリクエストがタイムアウト
返信


投稿者:stonehand
2016/08/01 22:10:47

Link:
またまた、お世話になります。
書籍26-27ページの、client_send.txt、TcpClient.javaの内容を変更して実行すると
タイムアウトとなり、client_recv.txtの内容は以下のようになります。
何が原因なのでしょうか。
よろしくお願いいたします。

HTTP/1.1 408 Request Timeout
Date: Mon, 01 Aug 2016 12:49:29 GMT
Server: Apache/2.4.23 (Win64)
Content-Length: 221
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>408 Request Timeout</title>
</head><body>
<h1>Request Timeout</h1>
<p>Server timeout waiting for the HTTP request from the client.</p>
</body></html>
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1959] Re:書籍「Webサーバを…」の1.3.3について
返信


投稿者:(ぱ)こと管理人
2016/08/01 01:02:12

Link:
>実際に先にブラウザを閉じてしまうと、TcpServerは「java.net.SocketException: Connection reset」の例外をcatchしてスタックトレースを吐いた後に終了します。

確認しました。
確かにIEで試すと、例外を吐いて終了しました。
ただ、Firefoxで試すと、やはり-1を返して無限ループに入りました。

本書は対象をIEとうたっているので何らかのフォローはしようと思いますが、
FirefoxとIEで動きがどう違うのか、現時点ではわかっていません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1958] 書籍「Webサーバを…」の1.3.3について
返信


投稿者:E2E4E9E4
2016/07/30 00:31:48

Link:
お世話になります。
以前に1.5.4について質問させていただいたものです。
その節はありがとうございました。(お礼が遅れてすみません)

今回もまた質問させてください。

p24では、「( 先にブラウザを閉じてしまうと、ソケットが閉じられて、ソケット切断後はInputStream.read()は-1を返すのですが、TcpServerはそれに対するチェックを入れていないので無限ループに入ります……)」とあります。
これは、
「(TcpServerは、17行目でクライアントから終了マークである0を受け取るまで処理を継続するようになっていますが、本物のWebブラウザはこのような終了マークを送らないからです)」
とすべきではないでしょうか。

実際に先にブラウザを閉じてしまうと、TcpServerは「java.net.SocketException: Connection reset」の例外をcatchしてスタックトレースを吐いた後に終了します。

[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1957] 最新版を導入、解決しました
返信


投稿者:stonehand
2016/07/29 09:11:04

Link:
お手数をおかけしました。
ご指摘の通り、最新版を導入し正しく動作いたしました。

C:\>javac -version
javac 1.8.0_101

C:\oza\src\chap01>javac TcpServer.java

C:\oza\src\chap01>java TcpServer
クライアントからの接続を待ちます。

今後とも、よろしくお願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1956] Re:コンパイルできない
返信


投稿者:stonehand
2016/07/29 08:22:06

Link:
お世話になります。
>お使いのJavaが、Java6以前のものなのではないでしょうか。
>javac -versionで何が表示されますか?

C:\>java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, mixed mode)

C:\>javac -version
javac 1.6.0_21

となっています。
よろしく、お願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1955] Re:コンパイルできない
返信


投稿者:(ぱ)こと管理人
2016/07/28 22:16:22

Link:
>例えば
>C:\oza\src\chap01>javac TcpServer.java
>TcpServer.java:6: '{' がありません。
>        try (ServerSocket server = new ServerSocket(8001);

これで見当が付きました。このtryの構文は、Java7から導入された
try-with-resource文です。

http://docs.oracle.com/javase/jp/7/technotes/guides/language/try-with-resources.html

お使いのJavaが、Java6以前のものなのではないでしょうか。
javac -versionで何が表示されますか?

なお、この本の対象はJava8です。本の中に明記した個所があったのでは、
と思い探してみたのですが、あれ? 見当たらない……
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1954] Re:コンパイルできない
返信


投稿者:stonehand
2016/07/28 14:30:44

Link:
お手数をおかけしております。

>・そもそもOSは何ですか? この本はWindowsを想定しているので、
Windows7Pro 64 bit

> ソースの文字コードはShift-JIS, 改行はCR LFになっています。
>・どこからダウンロードしたファイルですか? ページのURLと
> ファイル名を教えてください。
書籍8ページにあります
http://kmaebashi.com/webserver/index.html
より、ダウンロードはこちらから。
./src_20160619.zip

>・javacを実行したディレクトリに入っているファイルの一覧を教えてください。
Chap01ディレクトリの内容
C:\oza\src\chap01>dir /b
C
CSharp
Modoki01
server_send.txt
TcpClient.java
TcpClient.java(Apache向け)
TcpServer.java
TcpServer.txt


>・エラーメッセージをコピペして、ここに貼ってください。
例えば
C:\oza\src\chap01>javac TcpServer.java
TcpServer.java:6: '{' がありません。
        try (ServerSocket server = new ServerSocket(8001);
           ^
TcpServer.java:6: ')' がありません。
        try (ServerSocket server = new ServerSocket(8001);
                         ^
TcpServer.java:8: ';' がありません。
             FileInputStream fis = new FileInputStream("server_send.txt")) {
                                                                         ^
TcpServer.java:27: 'catch' への 'try' がありません。
        } catch (Exception ex) {
          ^
TcpServer.java:27: ')' がありません。
        } catch (Exception ex) {
                          ^
TcpServer.java:27: 文ではありません。
        } catch (Exception ex) {
                ^
TcpServer.java:27: ';' がありません。
        } catch (Exception ex) {
                             ^
TcpServer.java:6: 'try' への 'catch' または 'finally' がありません。
        try (ServerSocket server = new ServerSocket(8001);
        ^
TcpServer.java:31: 構文解析中にファイルの終わりに移りました
}

 ^
エラー 9 個

以上のようですが、よろしくお願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1953] Re:コンパイルできない
返信


投稿者:(ぱ)こと管理人
2016/07/28 00:32:19

Link:
>「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」を購入し
>悪戦苦闘しております。

こんにちは。お買い上げいただきありがとうございます。

> 始めの一歩、ソースをダウンロードし、TcpServer.javaおよびTcpClient.java等をコンパイルしようとし、
>
>>javac *.java
>
>などとしましたが、エラーが出てしまい先に進めません。
>エラーの内容は、(がありませんとか、{がありませんとか等です。

本を見ながら手で打ち込んだのならともかく、ダウンロードしたソースで、
「(がありませんとか、{がありませんとか」レベルのコンパイルエラーが出るのは
考えにくいのですが…

・そもそもOSは何ですか? この本はWindowsを想定しているので、
 ソースの文字コードはShift-JIS, 改行はCR LFになっています。
・どこからダウンロードしたファイルですか? ページのURLと
 ファイル名を教えてください。
・javacを実行したディレクトリに入っているファイルの一覧を教えてください。
・エラーメッセージをコピペして、ここに貼ってください。

よろしくお願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1952] Re:PHPで掲示板を作りたい
返信


投稿者:(ぱ)こと管理人
2016/07/28 00:13:08

Link:
>そんな私がこれからPHPを学ぶために掲示板を一から作っていきたいのですが、
>どのようにして始めればいいでしょうか?

まず、私のサイトにある「PHPとMySQLで掲示板を作る」は、PHP ver.4の頃に
書いたものなので内容が古くなっておりお勧めできません。

Google等で検索のうえ、新しめの記事を探してみてはいかがでしょうか。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1951] コンパイルできない
返信


投稿者:stonehand
2016/07/27 17:22:42

Link:
 ばじめまして、よろしくお願いします。
 このような質問をすると、対象読者ではないのではとお叱りを受けそうですが、
「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」を購入し
悪戦苦闘しております。
 始めの一歩、ソースをダウンロードし、TcpServer.javaおよびTcpClient.java等をコンパイルしようとし、

>javac *.java

などとしましたが、エラーが出てしまい先に進めません。
エラーの内容は、(がありませんとか、{がありませんとか等です。

 初歩の初歩、基本的な質問で申し訳ありませんが、コンパイルの手順について詳しく教えていただけますか。よろしくお願い申し上げます。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1950] PHPで掲示板を作りたい
返信


投稿者:nikuudon
2016/07/26 16:43:44

Link:
はじめまして

PHPは超がつくほどの初心者です。

if文やらfor文やらは内容は理解できたのですが、どう使っていけばいいのかが
わかりません。

そんな私がこれからPHPを学ぶために掲示板を一から作っていきたいのですが、

どのようにして始めればいいでしょうか?

すいません、お教え下さい。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1949] Re:書籍「Webサーバを…」の1.5.4について
返信


投稿者:(ぱ)こと管理人
2016/07/17 17:06:07

Link:
はじめまして。ご意見ありがとうございます。

>この2点を実装するためにやるべきことして「マルチスレッド」を挙げていますが、マルチスレッドは必須ではないはずです。実際にマルチスレッド化しなくても(単純な永久ループ化)それなりに動きました。 
>この点についてWeb版の記述を見たのですが、そこでは「たくさんの接続先からの接続を並行して受け付けられなければなりません。 」とありマルチスレッドの必要性を説明していました。 
>書籍版よりもWeb版の方が親切な説明だと思うのですが、なぜ書籍版のような説明にしたのでしょうか。  

書籍版はWeb版を元にしていますから、この記述については「意図して抜いた」のだと思います。
記憶はだいぶあいまいですが、おっしゃるように、単純な永久ループでもそれなりに動く以上、「たくさんの接続先からの接続を『並行して受け付けられなければなりません』」と書いてしまうと、それはそれで不正確というか、ツッコミを受けてしまうかなあ、と腰が引けて抜いたように思います。
もちろん複数スレッドで応答した方がパフォーマンスがよいのは確かですから、陽にそう書くべきだったかも、とは思います。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1948] 書籍「Webサーバを…」の1.5.4について
返信


投稿者:E2E4E9E4
2016/07/17 15:46:09

Link:
はじめまして。 
Webサーバの勉強をしようと思い、書籍「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」を読んでおります。 
少し疑問に思うことがあり、質問させていただきます。 

"1.5.4 普通にWebページを表示できるようにする"では、以下の機能を実装しようとしています。 
・tcp接続を繰り返し受け付けるようにする 
・ファイル種別に応じたContent-typeの設定 
この2点を実装するためにやるべきことして「マルチスレッド」を挙げていますが、マルチスレッドは必須ではないはずです。実際にマルチスレッド化しなくても(単純な永久ループ化)それなりに動きました。 
この点についてWeb版の記述を見たのですが、そこでは「たくさんの接続先からの接続を並行して受け付けられなければなりません。 」とありマルチスレッドの必要性を説明していました。 
書籍版よりもWeb版の方が親切な説明だと思うのですが、なぜ書籍版のような説明にしたのでしょうか。  

[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1944] Re:magic_quotes_gpc
返信


投稿者:(ぱ)こと管理人
2016/07/06 08:01:57

Link:
……。

これは、何を言いたいのでしょうか……。

「PHPとMySQLで掲示板を作る」
http://kmaebashi.com/programmer/bbs_dev/index.html

の内容が古いので、注意書き付けるなり削除するなりしろよってこと?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1943] magic_quotes_gpc
返信


投稿者:Naohiro19
2016/07/05 08:57:46

Link:
PHPにおいて
「magic_quotes_gpc」は5.4.0以降は、デフォルトでOFFに設定されています。
また、mysql_connectなどの巻数がPHP5.5.0以降は非推奨となり、PHP7.0.0で拡張ライブラリが削除されています。

PHPからMySQLに接続するには PDO(PHP Data Object)を使わなければなりません。
PDOの prepare(プリペア)メソッドを使うと名前付きパラメータ(:nameなど)や疑問符パラメータ(?)を利用できます。

例えば ホスト:localhost ユーザー名:root パスワード:なし データベース名:bbs_phpとしてutf-8で接続する場合はこのように書けばOKです。

PDOクラスはPDOExceptionという例外を投げてくるので try-catchで囲む必要があります。

try {
   $dbh = new PDO('mysql:host=localhost;dbname=bbs_php;charset=utf8','root','');
   $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
   echo $e->getMessage();
   exit;
}
で接続が完了します。
PDOでのデータベースを操作する場合は「ドットインストール」というサイトの「PHPデータベース入門」という動画を視聴してください。

フォームにおいてユーザー入力を$_POST/$_GETで入力を受け取ってはいけないらしいので代わりとなるのが filter_input関数です。
たとえば
<input type="text" name="message">
とフォームを入力する欄があるとします。

受け取る場合は
$message = isset($_POST['message'] ? $_POST['message'] : null;
とするのではなく

$message = (string)filter_input(INPUT_POST, 'message');
とするべきでしょう。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1942] Re:変数とは何か
返信


投稿者:var
2016/06/16 23:47:13

Link:
ご回答ありがとうございました。

なるほど。

>コンパイル後の オブジェクトファイルに残ってすらいません。 
このあたりでピンときました。

スタックマシンタイプであれば、スタックポインタからの位置で参照できるため、
処理系が紐付けてくれているんですね。

変数という文字列なのかシンボルみたいなものがどこかで管理され、
それが参照する先が、例えば数字の5の格納位置を見ている、のようなイメージを持ってしまい混乱していまいました。


大変ありがとうございました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1941] Re:変数とは何か
返信


投稿者:(ぱ)こと管理人
2016/06/16 04:05:24

Link:
はじめまして。

>変数hogeのアドレス(&hoge)は"0xbfbfd9e4"。 
>そこに数値5をint型で配置する。 
>これは分かるのですが、変数hoge自体は、誰がどこで管理しているのでしょうか。 
>
>図表では、0xbfbfd9e4アドレスからの始まりに5が格納されており、これは分かります。 
>しかし、同時に、"hoge"もあります。この辺りで混乱しております。 

誤解を招いたなら申し訳ないですが、p.034のFig.1-1において、
図の中に「hoge」が書いてあるのは、読者にとってわかりやすくするためで、
プログラムの実行時に「hoge」という名前がどこかに保持されているわけではありません。
Cの場合、コンパイル時にデバッグオプションを付けたりしない限り、
たいていは、ローカル変数の変数名(この場合hoge)は、コンパイル後の
オブジェクトファイルに残ってすらいません。

ではどのように変数hogeを参照しているのかといえば、素朴な実装では、スタック内の、
現在実行中の関数の使用領域(p.095のFig.2-5において、「func()から見える領域」と
書いてある範囲。スタックフレームと言います)内の位置が、コンパイル後の
機械語コードに埋め込まれていて、それを使用して参照します。
こちらの図↓で言えば、BPからの相対位置でアクセスします。

http://www.c-tipsref.com/words/stackframe.html

グローバル変数やstatic変数は、リンクの時点でアドレスが決まります。
「2-4-2 分割コンパイルとリンク」を参照してください。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[1940] 変数とは何か
返信


投稿者:var
2016/06/14 23:48:25

Link:
変数とは何か?という議論がWEBでされているのを見かけ自分の一抹の理解の不足を感じ、"C言語ポインタ完全制覇"を開きました。 

非常に分かりやすい説明で、変数の理解が得られた、と思ったと同時に、新しい疑問が湧きました。 

先の本の序盤で以下の例があります。 

int hoge = 5; 

変数hogeのアドレス(&hoge)は"0xbfbfd9e4"。 
そこに数値5をint型で配置する。 
これは分かるのですが、変数hoge自体は、誰がどこで管理しているのでしょうか。 

図表では、0xbfbfd9e4アドレスからの始まりに5が格納されており、これは分かります。 
しかし、同時に、"hoge"もあります。この辺りで混乱しております。 

0xbfbfd9efアドレスからintの大きさまで == hogeという変数

というその紐付けはまたどこかでやっている?ということでしょうか。 

恐らく基礎中の基礎のような気もしますが、調べる限り解答にたどり着けず、 
理路整然とした解説で好感持っている前橋様に質問させていただいた次第です。 

※ご迷惑おかけします。誤字あったため同内容で再投稿。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]