K.Maebashi's BBS

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

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

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

[2280] C言語ポインタ完全制覇、"「式」に対するsizeof"のキモは?
投稿者:かずちゃん
2022/05/07 14:45:09

くだらない質問で申し訳ありませんが、新・標準プログラマーズライブラリ「C言語ポインタ完全制覇」(2017年12月21日初版第1刷発行)のp.188, "「式」に対するsizeof"の記述に対して質問させて下さいませ。 「2種類の使い方」"sizeof(型名)"と"sizeof 式"のキモ(使い方・形式は何が違うと言っているのか)は、 ・括弧の有無、 ・型名に対してsizeofを使うか、式に対して使うか、 のいずれなのでしょうか? このページの下の方の例で"sizeof(hoge)"と、型名でないhogeに対してsizeof()と括弧ありの用法をしているので、式に対して使う場合は括弧が必要である、という可能性は無いとは思いますが… ページのほぼ中央部で"「sizeof 式」形式にメリットがあるのは…"と書かれており、形式、と言われると、式に対して使うのかそれとも型名に対してか、というよりは、括弧の有無のことか?とも迷ってしまいまして…
[この投稿を含むスレッドを表示] [この投稿を削除]
[2279] Re:「C言語 ポインタ完全制覇」正誤表に「配列とポインタの完全制覇」URLの変更の記載
投稿者:(ぱ)こと管理人
2022/04/28 20:20:21

追記ですが、 とりあえず、第3刷ではmember.nifty.ne.jpになっていて、 第11刷ではkmaebashi.comになっていることは確認しました……
[この投稿を含むスレッドを表示] [この投稿を削除]
[2278] Re:「C言語 ポインタ完全制覇」正誤表に「配列とポインタの完全制覇」URLの変更の記載
投稿者:(ぱ)こと管理人
2022/04/28 20:06:43

ご指摘ありがとうございます。 >C言語 ポインタ完全制覇 の、初版と第2版を比較していた時に気がついた事です。 確認ですが、比較されたのは、2001年の旧版と、2017年の 「新・標準プログラマーズライブラリ」版のものですよね(旧版の1刷と2刷の比較ではなく)。 私の手元にも旧版のすべての刷が整理されて揃っているわけではないので、 どの時点で直したのかはもはや不明ですが、それも含め、正誤表に記載いたしました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2277] 「C言語 ポインタ完全制覇」正誤表に「配列とポインタの完全制覇」URLの変更の記載
投稿者:jcv
2022/04/27 18:18:19

C言語 ポインタ完全制覇 の、初版と第2版を比較していた時に気がついた事です。 第2版の「はじめに」には、元になった初版からの追加/修正内容が記載されていますが、 旧版の「はじめに」には、その前のベースになった「配列とポインタの完全制覇」の話が出ています。 しかし、ここに記載されているURL http://member.nifty.ne.jp/maebashi/programmer/pointer.html はリンク切れになっています。 URLを置き換えて、 「配列とポインタの完全制覇」(1999/6/29 updated) http://kmaebashi.com/programmer/pointer.html にたどりつきました。 この件、「C言語 ポインタ完全制覇」正誤表 http://kmaebashi.com/seiha/seigo.html に、URLの修正があるかもしれないと思い確認しましたが、ありませんでした。 同じページには、「ほげを考えるページ」のURLについて、修正された事が記載されていますので、 「配列とポインタの完全制覇」のページのURLについても、同様に修正しておくべきと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2276] Re:Webアプリケーション開発入門のP97 コンパイルについて
投稿者:(ぱ)こと管理人
2022/03/24 23:12:25

遅くなりましてすみません。 >以下のコマンドを実行する。 >cd C:\maebashi\doc\webserver\src\chap03\testbbs\WEB-INF\classes >C:\maebashi\doc\webserver\src\chap03\testbbs\WEB-INF\classes 「以下のコマンド」の記載がないので、何が悪いのかわかりませんが、 >以下のコマンドでも同様のエラーとなります。 >javac -classpath ./;C:\Tomcat\lib\servlet-api.jar PostBBS.java ここから推測すると、*.javaではなく、PostBBS.javaを指定したのでしょうか? そうだとすると、私の環境でも、以下のエラーが起きました。 C:\maebashi\temp\src_20181021\src\chap03\testbbs\WEB-INF\classes>javac -classpath C:\Tomcat8\lib\servlet-api.jar PostBBS.java PostBBS.java:9: エラー: シンボルを見つけられません Message newMessage = new Message(request.getParameter("title"), ^ シンボル: クラス Message 場所: クラス PostBBS PostBBS.java:9: エラー: シンボルを見つけられません Message newMessage = new Message(request.getParameter("title"), ^ シンボル: クラス Message 場所: クラス PostBBS PostBBS.java:12: エラー: パッケージMessageは存在しません Message.messageList.add(0, newMessage); ^ エラー3個 PostBBS.javaを単独でコンパイルしようとしても、Message.classがまだないためです。 本にあるとおり、*.javaならコンパイルできます。 C:\maebashi\temp\src_20181021\src\chap03\testbbs\WEB-INF\classes>del *.class C:\maebashi\temp\src_20181021\src\chap03\testbbs\WEB-INF\classes>javac -classpath C:\Tomcat8\lib\servlet-api.jar *.java C:\maebashi\temp\src_20181021\src\chap03\testbbs\WEB-INF\classes>dir ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は BAC7-DF60 です C:\maebashi\temp\src_20181021\src\chap03\testbbs\WEB-INF\classes のディレクトリ 2022/03/24 23:10 <DIR> . 2022/03/24 23:10 <DIR> .. 2022/03/24 23:10 666 Message.class 2016/06/19 15:47 409 Message.java 2022/03/24 23:10 1,008 PostBBS.class 2016/06/19 15:47 638 PostBBS.java 2022/03/24 23:10 2,720 ShowBBS.class 2016/06/19 15:47 1,883 ShowBBS.java 6 個のファイル 7,324 バイト 2 個のディレクトリ 114,802,692,096 バイトの空き領域
[この投稿を含むスレッドを表示] [この投稿を削除]
[2274] Webアプリケーション開発入門のP97 コンパイルについて
投稿者:mone
2022/03/20 19:44:11

コンパイルでエラーが発生します。 解決方法につきご教示いただけますと幸いです。 ■事象 以下をファイルをコンパイルするため ・ShowBBS.java ・PostBBS.java ・Message.java 以下のコマンドを実行する。 cd C:\maebashi\doc\webserver\src\chap03\testbbs\WEB-INF\classes C:\maebashi\doc\webserver\src\chap03\testbbs\WEB-INF\classes 下記のエラーとなる。(Message.class参照不可のエラー) === PostBBS.java:4: エラー: シンボルを見つけられません public class PostBBS extends HttpServlet { &#8942; === 以下のコマンドでも同様のエラーとなります。 javac -classpath ./;C:\Tomcat\lib\servlet-api.jar PostBBS.java
[この投稿を含むスレッドを表示] [この投稿を削除]
[2273] Re:比較演算子を使った式の変数への代入について
投稿者:mhash
2022/02/15 01:47:50

ご返信ありがとうございます。 比較演算子==の比較結果はint型の値なんですね。知りませんでした。 ご丁寧に教えて頂きありがとうございました。 >>はじめまして、mhashと申します。 > >はじめまして。 > >>bool = ( a == b ) >>(※bool,a,bは整数型の変数) >>のように比較演算子==での比較結果を直接変数に代入している箇所があったのですが、 >>この書き方は規格上保証されているものなのでしょうか? > >==(等価演算子)については、JIS X 3010:2003なら「6.5.9 等価演算子」に記載があって、 >「各演算子は指定された関係が真の場合は1 を,偽の場合は0 を返す。その結果は, > 型int をもつ。」 >とあるので、この結果をint型の変数に代入するのは完全に合法です。 > >>また、保証されている場合はどのバージョンからでしょうか? > >Cができた当初から、だと思います。いわゆる普通のif文で、 > >if (a == b) > >と書いたとしても、これは等価演算子の結果をもとに条件分岐しているにすぎません。 >
[この投稿を含むスレッドを表示] [この投稿を削除]
[2272] Re:比較演算子を使った式の変数への代入について
投稿者:(ぱ)こと管理人
2022/02/13 23:04:05

>はじめまして、mhashと申します。 はじめまして。 >bool = ( a == b ) >(※bool,a,bは整数型の変数) >のように比較演算子==での比較結果を直接変数に代入している箇所があったのですが、 >この書き方は規格上保証されているものなのでしょうか? ==(等価演算子)については、JIS X 3010:2003なら「6.5.9 等価演算子」に記載があって、 「各演算子は指定された関係が真の場合は1 を,偽の場合は0 を返す。その結果は,  型int をもつ。」 とあるので、この結果をint型の変数に代入するのは完全に合法です。 >また、保証されている場合はどのバージョンからでしょうか? Cができた当初から、だと思います。いわゆる普通のif文で、 if (a == b) と書いたとしても、これは等価演算子の結果をもとに条件分岐しているにすぎません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2271] 比較演算子を使った式の変数への代入について
投稿者:mhash
2022/02/13 13:01:05

はじめまして、mhashと申します。 以前kmaebashi様の著書(『プログラミング言語を作る』だったかと思います)で、Cのソースで bool = ( a == b ) (※bool,a,bは整数型の変数) のように比較演算子==での比較結果を直接変数に代入している箇所があったのですが、この書き方は規格上保証されているものなのでしょうか? また、保証されている場合はどのバージョンからでしょうか? 一般的な処理系ではコンパイルできるのだろうとは想像できるのですが、自分はあまりみたことがない書き方なので、気になって質問させていただきました。 初歩的ですみませんがよろしくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2270] Re:【ご質問】1.3.4 TCPクライアントでWebサーバーを叩
投稿者:mone
2022/01/31 17:25:20

>moneさん >>■事象 >>TcpCliet.javaを実行→client_rect.txtに408ステータスが出力される。(期待結果:200ステータス) > >これは以前にも同じ現象の問い合わせがありました。 >client_send.txt末尾の空行が入っていないと、この現象が発生します。 > >エディタによっては、最後の空行を勝手に消してしまうものもあるようです。 > >http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&thread=2132 >http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&thread=1960 > > ご回答ありがとうございます。 空行を追加したところ200ステータスが返却されました。 ヘッダの終わりを示す空行が必要のこと理解しました。 お手数おかけしました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2269] Re:韓国からの読者です。
投稿者:(ぱ)こと管理人
2022/01/31 01:41:22

ドゥボーさん すみません、韓国語が化けてしまっていますよね。 この掲示板は大昔に作ったもので、文字コードとしてEUC-JPという日本独自の 文字コードを使っています。そのため韓国語は表示できません。 UTF-8にしたものをここに置きました(どのみち私には読めませんが……)。 http://kmaebashi.com/seiha/20220130_bbs.html >韓国語の語順も日本語の語順と一緒で、同じ説明ができます。 ありがとうございます。安心しました。 (実は「C言語 ポインタ完全制覇」は中国語にも翻訳されているのですが、 中国語は語順はむしろ英語に近いのに、直訳されたのでちょっと残念なことに なっているのです) >日本語版の文脈は「日本語(や韓国語)の語順は英語の語順とは違う」のを指摘して >説明をする文脈ですが、翻訳はいきなり「プログラマー」を仮定して文を書いていますね。 >プログラマーと言えば、韓国人だけではなくアメリカ人やイギリス人もありますから、 >これは理屈が立てない変な文章ですよね。(たとえ韓国人だけ読める韓国語版だとしても、 >やはり「プログラマー」を言うのは変です。) これはやっぱり変ですよね。教えていただきありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2268] Re:韓国からの読者です。
投稿者:ドゥボー
2022/01/30 22:34:55

>ドゥボーさん > >はじめまして。著者の前橋です。韓国からの投稿ありがとうございます。 >私の本を読んでいただき光栄です。 迅速なご回答有難うございます! > >ところで、私は韓国語がまったく分かりませんので、以下の2点について、 >よければ教えていただけないでしょうか。 > >①「普通の日本人には~」について >韓国語版: >http://kmaebashi.com/seiha/korean1.png > >日本語版(旧版): >http://kmaebashi.com/seiha/japanese1.png > >日本語版で「普通の日本人には~」となっている部分は、韓国語だとどのような >意味になっているのでしょうか? ざっとGoogle翻訳で見てみますと、 >「普通のプログラマには~」(?)となっているように見えますが、 >そんなニュアンスでよいのでしょうか? そうですよね。確かに変な翻訳ですね。 私は日本語の原板を読みませんでしたので、この問題を事前には分からなかったんです。 『そして、それは置いておくとしても、この文章を素直に読むと、普通の日本人には「逆じゃないか?」と思えるのではないでしょうか?』 の部分は韓国語にはこういう風に翻訳されるべきだと思われるんですね。 『&#44536;&#47532;&#44256; &#44536;&#44163;&#51008; &#52264;&#52824;&#54616;&#45908;&#46972;&#46020;, &#51068;&#48152;&#51201;&#51064; &#54620;&#44397;&#51064;&#51060;&#46972;&#47732; &#51060; &#47928;&#51109;&#51012; &#44536;&#45824;&#47196; &#51069;&#51008; &#54980; ‘&#48152;&#45824;&#51064; &#44163; &#44057;&#45796;’&#45716; &#45712;&#45196;&#51060; &#46308;&#51648; &#50506;&#49845;&#45768;&#44620;?』 (直訳:そして、それはさて置いても、一般的な韓国人ならこの文章をそのまま読んだ後、「逆だそうだ」と感じませんですか?) 韓国語では、「普通の~」という表現が「一般的な~」よりあまりよく使われませんので、こう翻訳しましたんです。 自分たちのことをあまり「韓国人なら」とかよく言わない韓国語の言語習慣を考えると、 『&#44536;&#47532;&#44256; &#44536;&#44163;&#51008; &#52264;&#52824;&#54616;&#45908;&#46972;&#46020;, &#51068;&#48152;&#51201;&#51004;&#47196; &#51060; &#47928;&#51109;&#51012; &#44536;&#45824;&#47196; &#51069;&#51008; &#54980; ‘&#48152;&#45824;&#51064; &#44163; &#44057;&#45796;’&#45716; &#45712;&#45196;&#51060; &#46308;&#51648; &#50506;&#49845;&#45768;&#44620;?』 (直訳:そして、それはさて置いても、一般的にはこの文章をそのまま読んだ後、「逆だそうだ」と感じませんですか?) の方がもっとよいかも知れませんね。 しかし、韓国語版の翻訳はとても変な翻訳です。 『&#45817;&#49888;&#51060; &#54217;&#48276;&#54620; &#54532;&#47196;&#44536;&#47000;&#47672;&#46972;&#47732; &#51060; &#47928;&#51109;&#51012; &#51069;&#50612;&#48376; &#54980; 「&#48152;&#45824;&#51064; &#44163; &#44057;&#45796;」&#45716; &#45712;&#45196;&#51060; &#46308;&#51648; &#50506;&#49845;&#45768;&#44620;?』 この文章は日本語にすると、こうなります。 『もしあなたが平凡なプログラマーだったら、この文章を読んだ後、「逆だそうだ」と感じませんですか?』 日本語版の文脈は「日本語(や韓国語)の語順は英語の語順とは違う」のを指摘して説明をする文脈ですが、翻訳はいきなり「プログラマー」を仮定して文を書いていますね。プログラマーと言えば、韓国人だけではなくアメリカ人やイギリス人もありますから、これは理屈が立てない変な文章ですよね。(たとえ韓国人だけ読める韓国語版だとしても、やはり「プログラマー」を言うのは変です。) > >「pfはintを返す関数へのポインタ」というような文章では、日本語と英語は、 >語順が逆になります。なので日本語でCの宣言を読もうとすると逆に見えるし、 >正しく読むなら英語で読めばよい、というのがここで書いていることです。 >これは日本語の語順の話ですので、韓国語だとどうなのだろう、というのが >気になっています。 > 韓国語の語順も日本語の語順と一緒で、同じ説明ができます。 (この理由で、世間では「外人のうちに韓国人が日本語を一番易く学ぶ」という話もありますが、漢字のことを除けていえば殆ど事実だと思います。語順が同じで、文法も殆ど同じ、漢語や表現も日本語の影響を多く受けたので、そうだと思われます。) しかし訳者が文脈のことを誤解したようですね。 >②Table3.1について >韓国語版: >http://kmaebashi.com/seiha/korean2.png > >日本語版(旧版): >http://kmaebashi.com/seiha/japanese2.png > >この部分の⑤のところは日本語版では「日本語に訳すと……」になっていますが、 >ここを見ると、韓国語でも、語順は日本語と同じのように見えます。 はい。その通りです。 >韓国の方にとっても、「英語で読め」というアドバイスは、的外れにはなっていない、 >と思ってよいでしょうか。 はい。少なくとも幼い私にはいいアドバイスになりました。 >韓国語版のTable3.1には、日本語版にはある「英語的表現」の列が >なくなっているようで、そこもちょっと不思議です。 その部分は確かに不思議ですね。事情はよく分からないんですけれども、もしかして紙面の都合のためかも知れませんね。 >あいさつの投稿に面倒くさい質問で返してしまって申し訳ありませんが、 >よろしければ教えてください。 いいえ、幼い頃に多く助かった本の著者さんとこうして直接話し合ったり、微力な力でも助けることが出来たり、するのは私にとっては光栄です。こんな機会を下さってとても嬉しいです。 >最近あまり投稿のない掲示板ですみませんが、お待ちしております。 > >よろしくお願いいたします。 改めてご回答有難うございます。 これからもよろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2267] Re:【ご質問】1.3.4 TCPクライアントでWebサーバーを叩
投稿者:(ぱ)こと管理人
2022/01/30 20:55:07

moneさん >■事象 >TcpCliet.javaを実行→client_rect.txtに408ステータスが出力される。(期待結果:200ステータス) これは以前にも同じ現象の問い合わせがありました。 client_send.txt末尾の空行が入っていないと、この現象が発生します。 エディタによっては、最後の空行を勝手に消してしまうものもあるようです。 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&thread=2132 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&thread=1960
[この投稿を含むスレッドを表示] [この投稿を削除]
[2266] 【ご質問】1.3.4 TCPクライアントでWebサーバーを叩
投稿者:mone
2022/01/30 20:32:42

管理人様 基礎からのWebアプリケーション開発入門を勉強させていただいているものです。 初歩的な質問で恐縮ですが、ご確認いただけますと幸いです。 ■テキスト 1.3.4 TCPクライアントでWebサーバーを叩く(P25) ■事象 TcpCliet.javaを実行→client_rect.txtに408ステータスが出力される。(期待結果:200ステータス) Apatchは起動しており、http://localhost/index.htmlで「Itr works!」と表示されている。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2265] Re:韓国からの読者です。
投稿者:(ぱ)こと管理人
2022/01/30 17:30:35

ドゥボーさん はじめまして。著者の前橋です。韓国からの投稿ありがとうございます。 私の本を読んでいただき光栄です。 ところで、私は韓国語がまったく分かりませんので、以下の2点について、 よければ教えていただけないでしょうか。 ①「普通の日本人には~」について 韓国語版: http://kmaebashi.com/seiha/korean1.png 日本語版(旧版): http://kmaebashi.com/seiha/japanese1.png 日本語版で「普通の日本人には~」となっている部分は、韓国語だとどのような 意味になっているのでしょうか? ざっとGoogle翻訳で見てみますと、 「普通のプログラマには~」(?)となっているように見えますが、 そんなニュアンスでよいのでしょうか? 「pfはintを返す関数へのポインタ」というような文章では、日本語と英語は、 語順が逆になります。なので日本語でCの宣言を読もうとすると逆に見えるし、 正しく読むなら英語で読めばよい、というのがここで書いていることです。 これは日本語の語順の話ですので、韓国語だとどうなのだろう、というのが 気になっています。 ②Table3.1について 韓国語版: http://kmaebashi.com/seiha/korean2.png 日本語版(旧版): http://kmaebashi.com/seiha/japanese2.png この部分の⑤のところは日本語版では「日本語に訳すと……」になっていますが、 ここを見ると、韓国語でも、語順は日本語と同じのように見えます。 韓国の方にとっても、「英語で読め」というアドバイスは、的外れにはなっていない、 と思ってよいでしょうか。 韓国語版のTable3.1には、日本語版にはある「英語的表現」の列が なくなっているようで、そこもちょっと不思議です。 あいさつの投稿に面倒くさい質問で返してしまって申し訳ありませんが、 よろしければ教えてください。 >度々この場所にお訪れします。 最近あまり投稿のない掲示板ですみませんが、お待ちしております。 よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2264] 韓国からの読者です。
投稿者:ドゥボー
2022/01/30 05:03:53

初めまして。韓国からの読者です。 中学生の頃、前橋さんの本である「C言語ポインタ完全制覇」の韓国語版を読んで、C言語を深く理解することができた記憶があります。そのおかげで20代後半になった今もAI研究者としてコンピューターの仕事を続けています。本当に有難うございます! 当時は日本語が分からなかったので、お礼を言うことができませんでしたが、最近、この本についての情報を調べてこの本の改訂版が出たのを遅く分かりました。おめでとうございます!最新のC言語の標準であるC99やC11についてもアップデートされたようで、また買って読むつもりです!今度は日本語の原書で読みます。この間、僕はJLPT N1の試験に合格しましたので日本語の練習もすることも兼ねて。 お礼を言うことが遅れてしまってすみません。そして、改めて有難うございます! 度々この場所にお訪れします。 是非お元気で。 韓国からの読者 ドゥボーより
[この投稿を含むスレッドを表示] [この投稿を削除]
[2263] Re:ブログの誤字について
投稿者:(ぱ)こと管理人
2022/01/27 01:31:18

>はてなブログ「K.Maebashi's はてなブログ」の方のコメントしたのですが、 >通知などが飛ばなくて気づかない可能性があるのでこちらにも投稿します。 ありがとうございます。修正しました。 通知は来るのですが、こんな夜中しか時間が取れなくて……
[この投稿を含むスレッドを表示] [この投稿を削除]
[2262] ブログの誤字について
投稿者:rike1019
2022/01/26 19:22:00

はてなブログ「K.Maebashi's はてなブログ」の方のコメントしたのですが、通知などが飛ばなくて気づかない可能性があるのでこちらにも投稿します。 誤字を見つけました。 xコード下記 oコード書き > 俺もまだこんな風にコード下記に熱中できるんだなあ、という感慨はありますが、それが、何度も書いたことがあり過去コードを貼り合わせたような言語処理系、というのはちょっと残念ですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2261] Re:レビューのお願い
投稿者:(ぱ)こと管理人
2021/12/14 08:28:28

>何か感想や意見を聞かせてください。 >ちなみにポインタはまだ理解してないので、全部値渡しにしています。 >宜しくお願い致します。 すみません、Cはともかく数学的にこれは私の能力を超えるので、 どなたかわかる方に見ていただくのがよいかと。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2259] Re:完全初心者のためのプログラミング入門 lesson04_4
投稿者:Hiroyuki Naito
2021/11/23 23:23:51

ご回答ありがとうございました。 varからletに変わってスコープが有効になるというのは知識としてはあったのですが、関数のスコープしか頭に入っていませんでした。while文やfor文のブロックスコープも有効になるということをご教授いただき、自分の知識も一段深まった気がいたします。 >>しかし、下記の2つのfor文でxについて2回宣言しているように思うのですが、 >>エラーにならないのは何故でしょうか。 > >これは、letで宣言された変数は、ブロックスコープを持つからです。 >for文の第1式で宣言された変数は、for文のブロックの中だけのスコープを持ちます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2258] Re:完全初心者のためのプログラミング入門 lesson04_4
投稿者:(ぱ)こと管理人
2021/11/23 20:02:16

>しかし、下記の2つのfor文でxについて2回宣言しているように思うのですが、 >エラーにならないのは何故でしょうか。 これは、letで宣言された変数は、ブロックスコープを持つからです。 for文の第1式で宣言された変数は、for文のブロックの中だけのスコープを持ちます。 よって、以下のプログラムは、 for (let i = 0; i < 10; i++) { console.log("i.." + i); } console.log("i.." + i); 「i..0」から「i..9」までは表示しますが、最後の、for文の後のconsole.log()の ところで、以下のエラーを出します。 Uncaught ReferenceError: i is not defined https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/let | let 文はブロックスコープのローカル変数を宣言します。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for | let で宣言された変数は文内のローカル変数になります。 このあたりは、JavaとかC++とかC#とかC99とかと同じで、JavaScriptもletが導入されて ようやく「普通の言語になった」感があります。 昔のJavaScriptではvarしか使えませんでしたが、varによる変数宣言は関数スコープで、 クロージャという仕組みと相俟って、初心者には訳の分からない結果を出すことが ありました…… 例) https://teratail.com/questions/205789
[この投稿を含むスレッドを表示] [この投稿を削除]
[2257] 完全初心者のためのプログラミング入門 lesson04_4
投稿者:Hiroyuki Naito
2021/11/22 21:20:38

お世話になります。 首記のプログラムで1つ質問をさせていただきますので、よろしくお願いいたします。 JavaScriptでは同じ変数と2度宣言すると、 Uncaught SyntaxError: Identifier 'x' has already been declared というエラーが発生します。 しかし、下記の2つのfor文でxについて2回宣言しているように思うのですが、 エラーにならないのは何故でしょうか。 19: for (;;) { 20: for (let x = 0; x <= 720; x += 10) { 21: context.drawImage(ufoImage, x, 10); 22: } 23: for (let x = 720; x >= 0; x -= 10) { 24: context.drawImage(ufoImage, x, 10); 25: } 26: }
[この投稿を含むスレッドを表示] [この投稿を削除]
[2256] Re:C言語体当り学習 filter.cプログラム
投稿者:Hiroyuki Naito
2021/06/27 09:08:27

ご回答ありがとうございました。 今まで^Zによって、キーボードからはEOF(-1)が出力されると思い込んでいました。 「getchar()が行頭の^Z(=26)をファイルの末尾と判断して、EOFを戻り値として 出力する」というご説明ですっきりしました。 >つまり、コマンドプロンプト上で^Zを入力すると、それが行頭である場合に限り >getchar()はEOFを返すが、そうでなければ^Zをそのまま返す、ただし、行内で >^Zより後ろの文字は返さない、ということになります。 >これは、コマンドプロンプトの端末ドライバの仕様ということになると思います。 ----- 中略 ----- >ファイルの末尾に来たらEOFを返す、というだけで、そのEOFはどこからも読み込まれる >わけではありません。Hiroyuki Naitoさんも試されたとおり、^Zは26であって >-1ではありません。 >
[この投稿を含むスレッドを表示] [この投稿を削除]
[2255] Re:C言語体当り学習 filter.cプログラム
投稿者:(ぱ)こと管理人
2021/06/27 00:32:44

>123 >123 >^Z > >のように、 >123<enter>^Zと入力するとEOFを検知してプログラムが終了しますが、 >123^Z<enter>のように入力するとプログラムが終了しません。 本当ですね。正直なところ、この挙動は私は認識していませんでした。 ちなみに123^Z456<enter>と入力すると、プログラムは終了しませんが、 456は読み込まれません。 >if文の前にprintf(" %d ", ch);を挿入して文字コードを表示させると、 >前者の^Zは-1、後者の^Zは26と表示されます。^Zはよくひとつ前の状態に戻る >動作のショートカットキーに使われていたりするのが原因でしょうか。 後者の^Zの26は、ASCIIの制御文字におけるSUBで、これをキーボードから入力する 手段が^Zです。以下Wikipediaを参照してください。 https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E6%96%87%E5%AD%97 つまり、コマンドプロンプト上で^Zを入力すると、それが行頭である場合に限り getchar()はEOFを返すが、そうでなければ^Zをそのまま返す、ただし、行内で ^Zより後ろの文字は返さない、ということになります。 これは、コマンドプロンプトの端末ドライバの仕様ということになると思います。 すっきりしない回答で申し訳ありません。 >また、getchar()は「標準入力から1文字読み込む」とありますが、EOF(FFFFFFFF) >という4バイトのコードに対してはどのような動作で読み込んでいるのでしょうか。 「C言語 体当たり学習徹底入門」では、getchar()について 『getchar()は、標準入力から1文字読み込み、その文字コードを返します。  ファイルの末尾に来たら、EOFを返します。』 と書きました。これはgetchar()(を含むCの標準ライブラリ)の仕様です。 ファイルの末尾に来たらEOFを返す、というだけで、そのEOFはどこからも読み込まれる わけではありません。Hiroyuki Naitoさんも試されたとおり、^Zは26であって -1ではありません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2254] C言語体当り学習 filter.cプログラム
投稿者:Hiroyuki Naito
2021/06/25 23:45:12

首記のプログラムをダウンロードして、gcc+VSCode(ターミナルはcommnad prompt)で 実行してみました。 123 123 ^Z のように、 123<enter>^Zと入力するとEOFを検知してプログラムが終了しますが、 123^Z<enter>のように入力するとプログラムが終了しません。 if文の前にprintf(" %d ", ch);を挿入して文字コードを表示させると、 前者の^Zは-1、後者の^Zは26と表示されます。^Zはよくひとつ前の状態に戻る 動作のショートカットキーに使われていたりするのが原因でしょうか。 また、getchar()は「標準入力から1文字読み込む」とありますが、EOF(FFFFFFFF) という4バイトのコードに対してはどのような動作で読み込んでいるのでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2253] Re:ポインタ完全制覇(第2版) p75 *pのループ中の計算
投稿者:Hiroyuki Naito
2021/06/13 23:52:20

ご回答ありがとうございました。 ポインタ演算*(p + i)が、array[i]の計算の「最適化の手を抜くために付けられた機能」という意味が理解できました。 今後はarray[i]の記法を活用していきたいと思います。 >はじめまして。読んでいただきありがとうございます。 > >>array[i]は、ループ中に出現するたびごとに「array + (i * 1要素のサイズ)」に相当する >>アドレス計算を行うというのは理解できますが、*pでも「p + (p++ごとに1要素のサイズ)」 >>に相当するアドレス計算を行っているように思えます。「掛け算と足し算はループの終わり >>の1回だけ」という意味をご教示いただけるとありがたいです。 > >「ループの終わりの1回だけ」というのは、たとえばループが100回回ったとして、 >各繰り返しの最後に1回、という意味です。つまり、100回ループが回れば、 >「p + 1要素のサイズ」という計算は100回は行います。 >ただし、ループの中に、array[i]が5回出てくるとすれば、最適化をろくにやらない >コンパイラなら、100回ループが回った時に「array + (i * 1要素のサイズ)」という計算は >500回行われます。それが100回で済むなら、*pの方が高速になるでしょう。 >コメントで「array[i]は、何度も登場する」と書いてあるのはそういう意図です。 > >これで回答になっていますでしょうか? > >
[この投稿を含むスレッドを表示] [この投稿を削除]
[2252] Re:ポインタ完全制覇(第2版) p75 *pのループ中の計算
投稿者:(ぱ)こと管理人
2021/06/12 20:36:48

はじめまして。読んでいただきありがとうございます。 >array[i]は、ループ中に出現するたびごとに「array + (i * 1要素のサイズ)」に相当する >アドレス計算を行うというのは理解できますが、*pでも「p + (p++ごとに1要素のサイズ)」 >に相当するアドレス計算を行っているように思えます。「掛け算と足し算はループの終わり >の1回だけ」という意味をご教示いただけるとありがたいです。 「ループの終わりの1回だけ」というのは、たとえばループが100回回ったとして、 各繰り返しの最後に1回、という意味です。つまり、100回ループが回れば、 「p + 1要素のサイズ」という計算は100回は行います。 ただし、ループの中に、array[i]が5回出てくるとすれば、最適化をろくにやらない コンパイラなら、100回ループが回った時に「array + (i * 1要素のサイズ)」という計算は 500回行われます。それが100回で済むなら、*pの方が高速になるでしょう。 コメントで「array[i]は、何度も登場する」と書いてあるのはそういう意図です。 これで回答になっていますでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[2251] ポインタ完全制覇(第2版) p75 *pのループ中の計算
投稿者:Hiroyuki Naito
2021/06/12 17:25:08

本文p75の「*pがループの中に何度出現しても掛け算と足し算はループの終わりの1回だけで済む」で、引っかかっています。 array[i]は、ループ中に出現するたびごとに「array + (i * 1要素のサイズ)」に相当するアドレス計算を行うというのは理解できますが、*pでも「p + (p++ごとに1要素のサイズ)」に相当するアドレス計算を行っているように思えます。「掛け算と足し算はループの終わりの1回だけ」という意味をご教示いただけるとありがたいです。 よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2250] Re:テトリス風ゲームについて
投稿者:(ぱ)こと管理人
2021/05/10 23:03:04

はじめまして。反応が遅れましてすみません。 >http://kmaebashi.com/programmer/tetris/index.html >こちらのプログラムは、改造して配布しても良い物でしょうか? そういえばライセンス表記をしていなかったですが、以下のページの説明に 準じるということにします。ご自由にコピーしてください。 (なにしろテトリスなので、「名前を変える」必要もないと思います) http://kmaebashi.com/programmer/devlang/license.html よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2249] テトリス風ゲームについて
投稿者:SINch
2021/05/07 22:08:21

はじめまして http://kmaebashi.com/programmer/tetris/index.html こちらのプログラムは、改造して配布しても良い物でしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]