K.Maebashi's BBS

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

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


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


[2200] X-Drawのページの画像について
返信


投稿者:(ぱ)こと管理人
2019/12/05 23:30:02

Link:
ポインタ完全制覇新版のX-Drawのページについて、

http://kmaebashi.com/seiha2/xdraw/index.html

画像がすべて表示できない状態になっていました。
画像ファイルがサーバになくて、404状態でした。

原因はわかりませんし、いつからこの状態だったのかもわかりません
(もしかして最初から?)。

ひとまず再アップロードしておきました。
ご迷惑をおかけしまして申し訳ありません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2199] Re:ポインタ完全制覇 - read_slogan.c
返信


投稿者:(ぱ)こと管理人
2019/11/16 02:04:54

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

>buf[slogan_len - 1] = '\0';
>
>したあと、
>
>slogan[i] = malloc(sizeof(char) * (slogan_len + 1));
>
>していますが、bufの大きさは、slogan_len byteで十分なので、

通常、文字数がlenのとき、'\0'の分を含めてlen+1だけmalloc()するのが
定石ですが、このケースではslogan_lenは改行文字を含んでいて、
その改行文字を'\0'に置き換えるので、malloc()するのはslogan_lenの
分だけでよいですね。

改定前のものからのミスだと思います。正直、まだポカが残っているとは
思いませんでした……

正誤表に入れさせていただきます。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2198] ポインタ完全制覇 - read_slogan.c
返信


投稿者:Tom
2019/11/13 20:20:20

Link:
はじめまして、ポインタ完全制覇の四章の`read_slogan.c`での質問です。

buf[slogan_len - 1] = '\0';

したあと、

slogan[i] = malloc(sizeof(char) * (slogan_len + 1));

していますが、bufの大きさは、slogan_len byteで十分なので、mallocのときには、+1する必要はなくて、

slogan[i] = malloc(sizeof(char) * slogan_len);

でよいのではないでしょうか?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2197] Re:オブジェクト指向について
返信


投稿者:(ぱ)こと管理人
2019/10/17 01:47:29

Link:
>Javaのメソッド呼び出しの文法が、C++におけるオブジェクトの実体へのアクセスと
>同じであるため、混乱していました。

C++はオブジェクトの実体とポインタの両方を扱えるので

obj.hoge();



obj->hoge();

は別の意味ですが、

Javaはポインタしかないので、Javaにおける

obj.hoge();

は、C++における

obj->hoge();

と同値です。ポインタしかないJavaではわざわざ1文字多い「->」を使うより、
全部「.」を使う方が打鍵数が少なくてよいとは思いますが、紛らわしいのは
確かですね。

ただ、なんにせよ、オブジェクト指向においては「どのオブジェクトに仕事を
頼むのか」が重要なので、「ポインタ(参照)でオブジェクトを指す」のは
概念的にわかりやすく、C++のように実体を扱える言語より、なんでも参照
(ポインタ)の言語の方がとらえやすいかとは思います。どちらが実用的かとか、
そういう話は置いておくとして。

継承を考えればなおのこと、です。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2196] Re:オブジェクト指向について
返信


投稿者:C××
2019/10/14 18:40:43

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

Javaのメソッド呼び出しの文法が、C++におけるオブジェクトの実体へのアクセスと同じであるため、混乱していました。

C++からJavaを学ぶ場合(あるいはその逆)
文法が似ているから楽だと書いているサイトをよく見ますが、
かえって紛らわしいなと感じました。

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



[2195] Re:オブジェクト指向について
返信


投稿者:(ぱ)こと管理人
2019/10/13 01:47:58

Link:
はじめまして。

> ここの記事やほかのサイトを読んでるうちに、結局のところ
>「オブジェクトというのはプログラム(ソフトウェア)を保持することができる変数」で
>「小規模なソフトウェアの組み合わせで1つのソフトウェアを作るのがオブジェクト指向」
>という結論にたどり着いたのですが、実際のところこの解釈はどうなのでしょうか。

まず、C++を除くたいていのオブジェクト指向言語では、オブジェクトを変数に
格納することはできません。変数に格納できるのはオブジェクトへの参照だけです。

そのうえで、オブジェクトという「小規模なソフトウェア」の組み合わせで
それなりの規模のプログラムを作る、というのはそれなりによさげな解釈かと
思います。単に「小規模なソフトウェアの組み合わせで1つのソフトウェアを作る」
だけだと、「モジュール化」と区別がつきませんし。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2194] オブジェクト指向について
返信


投稿者:C××
2019/10/10 00:25:10

Link:
 初投稿です

 オブジェクト指向についてわかったような気になったり、急にわからなくなったりという哲学じみた事を繰り返している内に、最近このサイトに行き着いた者です。


 ここの記事やほかのサイトを読んでるうちに、結局のところ
「オブジェクトというのはプログラム(ソフトウェア)を保持することができる変数」で
「小規模なソフトウェアの組み合わせで1つのソフトウェアを作るのがオブジェクト指向」という結論にたどり着いたのですが、実際のところこの解釈はどうなのでしょうか。

 犬猫や、レストランの例えよりは一番しっくり来た表現なのですが、厳密には違うような気がします。( operator=() などで定義しないと代入できない辺り)

 はっきりとしない質問で恐縮ですが、意見を聞かせてくだされば幸いです。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2193] Re:Webアプリケーション開発入門のP132について
返信


投稿者:(ぱ)こと管理人
2019/09/10 00:25:20

Link:
>◆C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com 
>
>にクラスパスを通してみようとしましたら、エラーが発生してしまいました。
>大変恐縮ですが、ご教授頂けましたら幸いです。よろしくお願い致します。

エラーを見ると、

>PostBBS.java:2: エラー: パッケージcom.kmaebashi.henacat.servlet.httpは存在しません

このように、Henacatで作成したサーブレット関連のパッケージやクラスが見えていない
ことがわかります。つまり、クラスパスが通っていません。

実行したコマンドラインは以下ですが、

>C:\Users\java\expand_downloads\src\p77\chap03\testbbs\WEB-INF\classes>javac -classpath C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com *.java

これを見ると、「C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com」に
クラスパスを通していますが、p.132冒頭の記載は、

| この修正を加えたうえで、Henacatのクラスファイルのルートであるcomディレクトリが
| 存在するディレクトリ(「com\kmaebashi\henacat\……」というディレクトリ階層の
| 根元)にclasspathを向けてコンパイルし、クラスファイルを作ります。

です。「comディレクトリが存在するディレクトリ」ですから、comディレクトリの
ひとつ上です。
この場合なら、以下のようにすれば通るかと思います。

> javac -classpath C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_ *.java
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2192] Webアプリケーション開発入門のP132について
返信


投稿者:javajava
2019/09/08 15:19:21

Link:
いつも大変お世話になっております。P132の文章を理解できていない為と思うのですが、私なりに、

 chap03\testbbs\WEB-INF\classes の3ファイルのP131に該当する部分を修正し、
◆C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com 

にクラスパスを通してみようとしましたら、エラーが発生してしまいました。大変恐縮ですが、ご教授頂けましたら幸いです。よろしくお願い致します。

【以下エラー文】
C:\Users\java\expand_downloads\src\chap03\Henacat_0_1\com\kmaebashi\henacat\webserver>cd C:\Users\java\expand_downloads\src\p77\chap03\testbbs\WEB-INF\classes

C:\Users\java\expand_downloads\src\p77\chap03\testbbs\WEB-INF\classes>javac -classpath C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com *.java
PostBBS.java:2: エラー: パッケージcom.kmaebashi.henacat.servlet.httpは存在しません
import com.kmaebashi.henacat.servlet.http.*;            //javax.servlet.http.*;
^
PostBBS.java:4: エラー: シンボルを見つけられません
public class PostBBS extends HttpServlet {
                             ^
  シンボル: クラス HttpServlet
PostBBS.java:6: エラー: シンボルを見つけられません
    public void doPost(HttpServletRequest request, HttpServletResponse response)
                       ^
  シンボル:   クラス HttpServletRequest
  場所: クラス PostBBS
PostBBS.java:6: エラー: シンボルを見つけられません
    public void doPost(HttpServletRequest request, HttpServletResponse response)
                                                   ^
  シンボル:   クラス HttpServletResponse
  場所: クラス PostBBS
ShowBBS.java:2: エラー: パッケージcom.kmaebashi.henacat.servlet.httpは存在しません
import com.kmaebashi.henacat.servlet.http.*;            //import javax.servlet.http.*;
^
ShowBBS.java:4: エラー: シンボルを見つけられません
public class ShowBBS extends HttpServlet {
                             ^
  シンボル: クラス HttpServlet
ShowBBS.java:13: エラー: シンボルを見つけられません
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                      ^
  シンボル:   クラス HttpServletRequest
  場所: クラス ShowBBS
ShowBBS.java:13: エラー: シンボルを見つけられません
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                                                  ^
  シンボル:   クラス HttpServletResponse
  場所: クラス ShowBBS
PostBBS.java:5: エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
    @Override
    ^
ShowBBS.java:12: エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
    @Override
    ^
エラー10個

C:\Users\java\expand_downloads\src\p77\chap03\testbbs\WEB-INF\classes>
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2191] Re:Webアプリケーション開発入門のP99について
返信


投稿者:javajava
2019/09/08 15:06:31

Link:
>>早速ですが、ご指摘にしたがってP.97のようにコンパイルしてみましたが、
>>下記のようなエラーが出ます。Message.javaはできたようです。
>>しかし、PostBBS.javaで躓きます。
>
>すみません、前回の例示は不正確でした。p.97のとおりにやるなら
>
>javac -classpath C:\Tomcat8\lib\servlet-api.jar *.java
>
>ですね。私の環境ではこれで通りました。
>
>-classpathでクラスパスの指定をすると、カレントディレクトリがクラスパスから
>抜けてしまうので、PostBBS.javaをコンパイルするときにMessage.classが参照できなくて
>エラーになっているわけです。以下のようにカレントディレクトリ「./」を
>-classpathに加えてもコンパイルできますが、この規模なら*.javaで十分でしょう。
>
>javac -classpath ./;C:\Tomcat8\lib\servlet-api.jar PostBBS.java

ご回答、ありがとうございます。ご指摘頂いたように「*.java」の方で実行したところ、うまくいきました!ありがとうございました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2190] Re:Webアプリケーション開発入門のP99について
返信


投稿者:javajava
2019/09/08 15:06:26

Link:
>>早速ですが、ご指摘にしたがってP.97のようにコンパイルしてみましたが、
>>下記のようなエラーが出ます。Message.javaはできたようです。
>>しかし、PostBBS.javaで躓きます。
>
>すみません、前回の例示は不正確でした。p.97のとおりにやるなら
>
>javac -classpath C:\Tomcat8\lib\servlet-api.jar *.java
>
>ですね。私の環境ではこれで通りました。
>
>-classpathでクラスパスの指定をすると、カレントディレクトリがクラスパスから
>抜けてしまうので、PostBBS.javaをコンパイルするときにMessage.classが参照できなくて
>エラーになっているわけです。以下のようにカレントディレクトリ「./」を
>-classpathに加えてもコンパイルできますが、この規模なら*.javaで十分でしょう。
>
>javac -classpath ./;C:\Tomcat8\lib\servlet-api.jar PostBBS.java

ご回答、ありがとうございます。ご指摘頂いたように「*.java」の方で実行したところ、うまくいきました!ありがとうございました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2189] Re:Webアプリケーション開発入門のP99について
返信


投稿者:(ぱ)こと管理人
2019/09/03 01:08:02

Link:
>早速ですが、ご指摘にしたがってP.97のようにコンパイルしてみましたが、
>下記のようなエラーが出ます。Message.javaはできたようです。
>しかし、PostBBS.javaで躓きます。

すみません、前回の例示は不正確でした。p.97のとおりにやるなら

javac -classpath C:\Tomcat8\lib\servlet-api.jar *.java

ですね。私の環境ではこれで通りました。

-classpathでクラスパスの指定をすると、カレントディレクトリがクラスパスから
抜けてしまうので、PostBBS.javaをコンパイルするときにMessage.classが参照できなくて
エラーになっているわけです。以下のようにカレントディレクトリ「./」を
-classpathに加えてもコンパイルできますが、この規模なら*.javaで十分でしょう。

javac -classpath ./;C:\Tomcat8\lib\servlet-api.jar PostBBS.java
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2188] Re:Webアプリケーション開発入門のP99について
返信


投稿者:javajava
2019/08/31 22:18:55

Link:
回答ありがとうございます!
メッセージの件、申し訳ありませんでした。以後、注意します。

早速ですが、ご指摘にしたがってP.97のようにコンパイルしてみましたが、下記のようなエラーが出ます。Message.javaはできたようです。しかし、PostBBS.javaで躓きます。

C:\Users\java\expand_downloads\src\p77\chap03\testbbs_jsp\WEB-INF\classes\bbs>javac -classpath C:\Tomcat8\lib\servlet-api.jar Message.java

C:\Users\java\expand_downloads\src\p77\chap03\testbbs_jsp\WEB-INF\classes\bbs>javac -classpath C:\Tomcat8\lib\servlet-api.jar PostBBS.java
PostBBS.java:10: エラー: シンボルを見つけられません
        Message newMessage = new Message(request.getParameter("title"),
        ^
  シンボル:   クラス Message
  場所: クラス PostBBS
PostBBS.java:10: エラー: シンボルを見つけられません
        Message newMessage = new Message(request.getParameter("title"),
                                 ^
  シンボル:   クラス Message
  場所: クラス PostBBS
PostBBS.java:13: エラー: パッケージMessageは存在しません
        Message.messageList.add(0, newMessage);
               ^
エラー3個

C:\Users\java\expand_downloads\src\p77\chap03\testbbs_jsp\WEB-INF\classes\bbs>

このようなエラーが出るのですが、何かお気づきの点等ございますでしょうか?
ご教授の程、よろしくお願いします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2187] Re:Webアプリケーション開発入門のP99について
返信


投稿者:(ぱ)こと管理人
2019/08/27 01:01:19

Link:
>ただ、今度はP102のPostBBS.javaをコンパイルしようとするとエラーが。

エラーが出たというのであれば、せめてエラーメッセージは書いてください。

>普通に  >javac PostBBS.java   としてるのですが・・・。

p.102にPostBBS.javaはないので、どこのソースのことかわかりませんが、
Tomcatで動かすサーブレットをコンパイルするのであれば、

> javac PostBBS.java

ではなくて、p.97にあるとおり、

>javac -classpath C:\Tomcat8\lib\servlet-api.jar PostBBS.java

のように、servlet-api.jarをクラスパスに入れてコンパイルする必要があります。
(Tomcatのバージョンや配置先が違うなら、適宜読み替えてください)
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2186] Re:Webアプリケーション開発入門のP99について
返信


投稿者:javajava
2019/08/25 19:14:00

Link:
ご回答ありがとうございます!素晴らしい書籍の執筆ありがとうございます!
時間がとれたので、早速回答に従ってやってみます・・・のような返信を入れたのですが、Upされてないのか、私が不慣れなのか・・・w

とにもかくにも、本日もう一度最初からやり直してみましたら、ちゃんと動きました。
ありがとうございました。

ただ、今度はP102のPostBBS.javaをコンパイルしようとするとエラーが。

普通に  >javac PostBBS.java   としてるのですが・・・。

ご教授いただければ幸いでございます。

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



[2185] Re:Webアプリケーション開発入門のP99について
返信


投稿者:(ぱ)こと管理人
2019/08/17 16:12:02

Link:
>いつもお世話になっております。初めて投稿します。

はじめまして。

>書籍「Webアプリケーション開発入門」のP99で、「http://localhost:8080/ShowBBS」を
>ブラウザで実行すると、書籍の中にあった、「ごめんねごめんねごめんねごめんねごめ
>んね・・・」と続くページが表示されてしまい、掲示板が表示されません。

書籍の通りの順番でp.99だとすると、「3.3.3.Tomcat で掲示板を作る」のところです。
章タイトルの通り、ここでは、へなちょこサーブレットコンテナHenacatを作る前に、
Tomcatで掲示板を作ろうとしています。

そして、「ごめんなさいごめんなさいごめんなさいごめんなさいごめんなさい
ごめんなさい…」と続くページは、p.74にあるWebサーバもどき「Modoki/0.2」の
404ページです。

Tomcatの設定をわざわざ変えたのでなければ、TomcatがModoki/0.2の404ページを
返すわけがないので、ここではTomcatではなくModoki/0.2を叩いているのでは
ないでしょうか。

ただし、Modoki/0.2のポート番号は8001で、Tomcatのポート番号は8080です。
Modoki/0.2のポート番号をわざわざ変えたのでなければ、

http://localhost:8080/ShowBBS

であればTomcatが動くはずです。

考えられる可能性としては、

)榲は「http://localhost:8001/ShowBBS」を叩いていた。
Modoki/0.2のポート番号を8080に変えて実行していて、
 Tomcatはポートが塞がっているので起動に失敗している。

のどちらかですかねえ。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2184] Webアプリケーション開発入門のP99について
返信


投稿者:javajava
2019/08/15 12:22:47

Link:
いつもお世話になっております。初めて投稿します。
書籍「Webアプリケーション開発入門」のP99で、「http://localhost:8080/ShowBBS」をブラウザで実行すると、書籍の中にあった、「ごめんねごめんねごめんねごめんねごめんね・・・」と続くページが表示されてしまい、掲示板が表示されません。
Tomcatも動いているようですし、書籍の通りやったつもりなのですが、どこが良くないのかがわかりません。同じようなところで躓いて、ピンときた方、いらっしゃいましたら、ご教授お願いします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2183] Re:汎整数拡張について
返信


投稿者:d_kuma
2019/08/12 21:46:36

Link:
お世話になっております。
細かい内容について答えていただき、ありがとうございます。

char,shortと、intでの処理速度やサイズの違いについて、よく分かりました。
現在の処理環境なら、あまり気にする必要は無いのかな、という気がしました。

スカラの変数ならintを使うということも理解できました。

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



[2182] Re:汎整数拡張について
返信


投稿者:(ぱ)こと管理人
2019/08/11 01:20:26

Link:
『CプログラミングFAQ』は、持ってたはずなのですが、どこを探しても見当たらない……

>“得或拡張により、char型やshort型は、値を取り出す時に32ビットに変換されるので、
>int型より処理時間がかかったり、int型より実行ファイルが増大したりするのでしょうか?

この手の性能問題は私は全然詳しくないのですが(アプリケーションプログラマですので…)、
今時のCPUを相手に、どちらが良いとか悪いとかそう一概に言えるものではないと思っています。
たとえば先のchar_test.sとint_test.sをそれぞれGAS(GNU assembler)にかけてみると、
movsblの命令長はmovlよりも確かに長いのですが、int int_var = 5; の「5」が
32ビット幅になるので、結局のところ実効形式のサイズとしてはint_test.sの方が
微増しているようです。

char_test.s
  17 0008 C645FF05              movb    $5, -1(%rbp)
  18 000c 0FBE45FF              movsbl  -1(%rbp), %eax
  19 0010 89C6                  movl    %eax, %esi

int_test.s
  17 0008 C745FC05              movl    $5, -4(%rbp)
  17      000000
  18 000f 8B45FC                movl    -4(%rbp), %eax
  19 0012 89C6                  movl    %eax, %esi

特に配列なら、主記憶は十分にあっても、今時キャッシュに乗らないと性能は出ないので、
小さな型を使った方が早いケースはあるかもしれません。
配列でないなら、どちらにしても、そう大差があるとは思えませんが。

>汎整数拡張があるので、char型やshort型を使わずに、int型を使った方が良いのでしょうか?

配列でないスカラの変数であれば、たとえば1バイト文字しか入らないとわかっていても、
私ならintを使います。「ポインタ完全制覇」にも書きましたが、getchar()の
戻り値やputchar()の引数も、実際intですし。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2181] Re:汎整数拡張について
返信


投稿者:d_kuma
2019/08/08 17:42:29

Link:
ご連絡遅くなりました。

アセンブラの解説をしていただき、ありがとうございます。
char型はアセンブラ上で変換が入るということで理解しました。
会社内で汎整数拡張について聞いてみたら、アセンブラ上で差異は無いと言われたので、間違って理解していました。
movsblというのが分からず、ネットで調べました。
movsはsign extension(符号拡張)によるコピー、blはfrom byte(8ビット) to long(32ビット)ということで理解しました。

これに付随して、さらに質問があります。
“得或拡張により、char型やshort型は、値を取り出す時に32ビットに変換されるので、int型より処理時間がかかったり、int型より実行ファイルが増大したりするのでしょうか?
汎整数拡張があるので、char型やshort型を使わずに、int型を使った方が良いのでしょうか?

,砲弔い討蓮char型やshort型を使うと、アセンブラ上で余計な変換が入って実行ファイルが増大してしまう、ということが書かれた技術書を読んだことがあります(『CプログラミングFAQ』だったと思います)。

△砲弔い討蓮C言語ではint型が基準なので、できるだけint型を使うべきなのかなと思っています。
巨大な配列を扱う時にメモリのサイズを減らしたいのでchar型やshort型を使うのはいいと思うのですが、
そうでないなら、できるだけint型を使うべきではと思っています。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2180] Re:汎整数拡張について
返信


投稿者:(ぱ)こと管理人
2019/08/07 01:01:42

Link:
こんにちは。

>汎整数拡張という機能は、char型やshort型は、アセンブラ上ではint型と同じように
>扱われる、ということかなと思うのですが、この認識で合っているでしょうか?
>Cのソースコードからアセンブラに変換されるときに、汎整数拡張によって何か
>変換処理が行われるわけではないと思っています。

汎整数拡張という機能は、charやshortの変数でも、式の中ではintに変換される、
という機能です。変数に格納された値を使う時にはintでも、変数のサイズは、
charやshortならintより小さいわけですから、メモリから値を取り出して
(intと同じビット幅の)レジスタに乗せるときには汎整数拡張による変換処理が
入りますし、逆に(int型の)式の値をcharとかshortの変数に格納するときには、
逆の変換が必要です。

試してみました。

char_test.c
#include <stdio.h>

int char_test(void)
{
    char char_var = 5;

    printf("%d", char_var);
}

int_test.c
#include <stdio.h>

int int_test(void)
{
    int int_var = 5;

    printf("%d", int_var);
}

アセンブラ上の差異は以下です(Linuxでgcc -S)。

char_test.s
movb        $5, -1(%rbp)  ← char_var = 5のところ
movsbl        -1(%rbp), %eax ← char_varの値をeaxレジスタに移動

int_test.s
movl        $5, -4(%rbp) ←int_var = 5のところ
movl        -4(%rbp), %eax ← int_varの値をeaxレジスタに移動

int_test.sでは、単に32ビットを移動するmovl命令が使われていますが、
char_test.sでは、5をchar_varに代入する際にはバイトでの移動命令movbが、
char_varの値を取り出すときにはバイトを32ビットに変換しつつ移動する
movsblが使われていることがわかります。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2179] 汎整数拡張について
返信


投稿者:d_kuma
2019/08/05 17:43:35

Link:
お世話になっております。

汎整数拡張(又は整数拡張)について質問があります。

汎整数拡張という機能は、char型やshort型は、アセンブラ上ではint型と同じように扱われる、ということかなと思うのですが、この認識で合っているでしょうか?
Cのソースコードからアセンブラに変換されるときに、汎整数拡張によって何か変換処理が行われるわけではないと思っています。

試しに、char型、short型、int型による演算を、アセンブラ上で比較してみたのですが、差異が出てしまいました。
全て同じような結果になると期待していたのですが、そうはならなかったです。
あまりアセンブラに詳しいわけではないので、自信を持って言えるわけではありませんが。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2177] Re:C言語ポインタ完全制覇
返信


投稿者:(ぱ)こと管理人
2019/05/19 00:56:23

Link:
はじめまして。

>180ページのTable3-3でint *hoge[10]のサイズが8×10になっていますが
>int型の配列へのポインタなので4×10ではないでしょうか?

int *hoge[10]は、そのページの説明にもあるとおり、
「int型へのポインタの配列(要素数10)」です。
ポインタのサイズは処理系依存ですが、その前のページでポインタは8バイトと
仮定しているので、8×10で80バイトです。

なお、「int型の配列へのポインタ」であれば、(指す先は何であれポインタなので)
8バイトになりますね。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2176] C言語ポインタ完全制覇
返信


投稿者:かずぼん
2019/05/18 08:55:14

Link:
最近貴書を購入しました。
一つ質問があります。
180ページのTable3-3でint *hoge[10]のサイズが8×10になっていますがint型の配列へのポインタなので4×10ではないでしょうか?
よろしくお願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2175] Re:Eclipseを使うとclassLoaderで例外が発生
返信


投稿者:Radec
2019/05/12 09:33:25

Link:
すみません、自己解決しました。
Eclipseがコンパイル時にデフォルトで使用するバージョンがJavaSE11になっていたので、CokkieTestもreleaseオプションで指定で同バージョンにすることで解決致しました。

(というかそもそもスタックトレース見ろレベルの質問でした、大変失礼致しました。)
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2174] Re:Eclipseを使うとclassLoaderで例外が発生
返信


投稿者:(ぱ)こと管理人
2019/05/08 23:34:30

Link:
はじめまして。
>URL(http://localhost:8001/testbbs/ShowBBS)を入力したところでclassLoaderが例外を発生させてしまいました。

具体的なスタックトレースがわからないので何ですが、
もし起きているのがClassNotFoundExceptionだったとすると、
ShowBBSのクラスが所定の場所にないのではないでしょうか。

Henacatの場合、Henacat自体のソースやクラスをどこに置くかに関係なく、
サーブレットのクラスは、WebApplication.javaの8行目、

private static String WEBAPPS_DIR = "C:\\Henacat_0_1\\webapps";

この場所に置いてあることを期待しています。

もっとも、ここに置いてないならEclipseでなくても動かないですし、

>ShowBBS等のクラスパス指定もElicpseのプロジェクト配下のクラスパスを
>指定してコンパイルしています。

というのは、「3.4.3 Henacat ver.0.1 で掲示板を動かす」の
| この修正を加えたうえで、Henacatのクラスファイルのルートである
| com ディレクトリが存在するディレクトリ(「com\ kmaebashi\henacat\……」と
| いうディレクトリ階層の根元)にclasspathを向けてコンパイルし、
| クラスファイルを作ります。

という記載に沿っていることを意味するのであれば、そのあたりも
当然分かったうえで実行されているように思います。

あとは、具体的な例外を見てみないと、ちょっとわかりません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2173] 無題
返信


投稿者:Radec
2019/05/07 21:33:35

Link:Eclipseを使うとclassLoaderで例外が発生
こんばんは、本質的なところと全く違うので恐縮ですが、
「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」の第3章にて実装したHenacat0_1の挙動について質問となります。 

Henacat0_1のソースコードをダウンロードし、
コマンドプロンプトにてコンパイルを通してMainを実行したところ、
特に問題なく掲示板が稼動しました。

ところが、同ソースコードをEclipseで作成したJavaプロジェクトにコピペしてMainを実行したところ、
URL(http://localhost:8001/testbbs/ShowBBS)を入力したところでclassLoaderが例外を発生させてしまいました。
(デバッグ実行させたところ、WebApplicationインスタンスやServletInfoインスタンスは値を渡せているように見えます)
Eclipseはデフォルト文字コードがUTF-8ですが、本プロジェクトについては個別設定でsjisを設定しているので文字コードは問題ないかと思うのですが。。。
また、binフォルダを見ても無名クラス含めてクラアスファイルはしっかり作成されていますし、ShowBBS等のクラスパス指定もElicpseのプロジェクト配下のクラスパスを指定してコンパイルしています。

文字コードとコンパイルミス以外に考えられる原因等はありますでしょうか?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2172] Re:c言語ポインタ完全制覇(改訂版)に関する質問
返信


投稿者:(ぱ)こと管理人
2019/04/02 01:25:35

Link:
返信が遅れて申し訳ありません。

>書籍の中の補足でNULLマクロは処理系によって定義のされ方が違うと書かれていましたが、
>(void*)0であっても0であってもNULLは真偽値で言えば偽が返る値ということですね。

その通りです。これについてはC FAQに記載がありました。

http://www.kouno.jp/home/c_faq/c5.html#3
| 5.3:
| ポインターがヌルポインターでないかどうかのテストの省略形 「if(p)」は有効なのか? 
| ヌルポインターの内部表現が0でない場合は どうなるのか。
| A:
| C言語が式のブール値を必要とする場合(if、while、forやdo文において、
| また&&、||、!、?:演算子と共に使う場合)、0と比較して等しい場合は偽の値が
| 産み出され、その他の場合は真が産み出される。すなわち
|
|    if(expr)
|
| と書いたらいつも、「expr」がどんな式かにかかわらずコンパイラは必ず
|
|    if((expr) != 0)
|
| と書かれたように基本的には動作する。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2171] Re:c言語ポインタ完全制覇(改訂版)に関する質問
返信


投稿者:f_ki
2019/03/28 14:41:19

Link:
書籍の中の補足でNULLマクロは処理系によって定義のされ方が違うと書かれていましたが、(void*)0であっても0であってもNULLは真偽値で言えば偽が返る値ということですね。

本日読了しました。初心者だったので4章以降の実践的な部分は難しく感じる部分もありましたが、何度も読み返していくことでかなりの部分を理解できたと思います。
入門書を読んだだけで理解が曖昧だったポインタや配列、変数の分類や構造体などのC言語の文法についても改めて整理できました。本書のテーマはC言語のポインタですが、結果的にはC言語の文法全体に触れるような構成になっているのはそれだけC言語とポインタが深く広く結びついているということですね。

長くなりましたが技術書ながらとても読みやすく勉強になる本でした。質問にも丁寧に答えていただきありがとうございました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より古い投稿]