K.Maebashi's BBS

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

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


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


[2304] Re:offsetofの定義について
返信


投稿者:(ぱ)こと管理人
2022/06/29 23:32:51

Link:
>https://www.wdic.org/w/TECH/offsetof
>上記リンク先のページにあるように、Cのoffsetofマクロを
>#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
>という形式で実装している処理系は多いかと思います。そして、TYPE構造体の先頭部分の
>アドレスを0番地とすれば、MEMBERへのオフセットが取得出来ることも理解できます。
>しかし、『ポインタ完全制覇』でも触れられていた通り、0という定数は、ポインタ型とし
>て扱われる文脈ではNULLになるはずです。このマクロはNULL参照を行ったとしてクラッシュ
>を引き起こさないのでしょうか?

ご質問は、ヌルポインタから->MEMBERの形で指す先を参照した時点で落ちるのでは、
ということですよね。
これについてはJIS X 3010:2003であれば「6.6 定数式」のところに、「アドレス定数」として
以下の記述があります。

| アドレス定数(address constant)は,空ポインタ,静的記憶域期間のオブジェクトを
| 指し示す左辺値を指すポインタ又は関数指示子を指すポインタとする。
| アドレス定数は,単項&演算子若しくは整数定数のポインタ型へのキャストによって
| 明示的に生成されるか,又は配列型若しくは関数型の式の使用によって
| 暗黙に生成されたものでなければならない。配列添字演算子[],メンバアクセス演算子.
| 及び->,アドレス単項演算子&,間接単項演算子*,並びにポインタへのキャストは,
| アドレス定数の生成に使用してもよいが,これらの演算子を使用することによって
| オブジェクトの値をアクセスしてはならない。

空ポインタから->とか&で「アドレス定数」を生成するのはよいが、その先を参照しては
いけない、と書いてあるように読めます。
このoffsetofの定義は、これに合致しているのではないでしょうか。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2303] 無題
返信


投稿者:mhash
2022/06/29 21:11:14

Link:
連投申し訳ありません。Cの標準ライブラリのoffsetofマクロについて質問させてください。

https://www.wdic.org/w/TECH/offsetof
上記リンク先のページにあるように、Cのoffsetofマクロを
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
という形式で実装している処理系は多いかと思います。そして、TYPE構造体の先頭部分のアドレスを0番地とすれば、MEMBERへのオフセットが取得出来ることも理解できます。
しかし、『ポインタ完全制覇』でも触れられていた通り、0という定数は、ポインタ型として扱われる文脈ではNULLになるはずです。このマクロはNULL参照を行ったとしてクラッシュを引き起こさないのでしょうか?
それとも、offsetofをこのように実装している処理系では何らかの特別な処理を入れているのでしょうか。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2302] Re:無題
返信


投稿者:mhash
2022/06/29 11:34:51

Link:
>>すみません、以前から気になっていたのですが、
>>トップページの「Contents」のサブコンテンツの「プログラマなページ」の項目一覧に
>>「プログラミング言語samplan」が記載されていません。
>
>うーん、ここには「プログラマなページ」以下にあるものすべてを載せている
>わけではないので、
>
>http://kmaebashi.com/programmer/index.html
>
>samplanのようなちょろっと書いたようなプログラムは記載しなくていいんじゃないかな、
>という判断でこうしています。
>

ご回答ありがとうございます。
確かに「プログラマなページ」以下の項目すべてを目次に載せているわけではなかったですね。失礼いたしました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2301] Re:C言語とRustの関係について
返信


投稿者:(ぱ)こと管理人
2022/06/28 23:48:08

Link:
>今後はRustを勉強していくべきだと思いますか?

WebAssemblyはともかくとして、今後のシステム記述言語がRustに置き換わっていくというのは
十分ありそうな話だと思います。さすがにC/C++は危ないので。
なので私もRustを勉強しようと思いつつ、ほぼ手が出せていない状態です……
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2300] C言語とRustの関係について
返信


投稿者:rike1019
2022/06/27 17:20:33

Link:
リーナスはLinuxカーネルの3000万行あるCコードを
Rustで書き直す気はないと言っていますが
第2言語としてRustを採用するらしいです。
今後はRustを勉強していくべきだと思いますか?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2299] Re:無題
返信


投稿者:(ぱ)こと管理人
2022/06/19 13:08:39

Link:
>すみません、以前から気になっていたのですが、
>トップページの「Contents」のサブコンテンツの「プログラマなページ」の項目一覧に
>「プログラミング言語samplan」が記載されていません。

うーん、ここには「プログラマなページ」以下にあるものすべてを載せている
わけではないので、

http://kmaebashi.com/programmer/index.html

samplanのようなちょろっと書いたようなプログラムは記載しなくていいんじゃないかな、
という判断でこうしています。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2298] 無題
返信


投稿者:mhash
2022/06/18 21:36:30

Link:
すみません、以前から気になっていたのですが、
トップページの「Contents」のサブコンテンツの「プログラマなページ」の項目一覧に「プログラミング言語samplan」が記載されていません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2297] Re:「関数へのポインタにおける混乱」の「intを返す」という記述について
返信


投稿者:(ぱ)こと管理人
2022/06/15 00:37:54

Link:
こんにちは。

>> しかし,C の宣言をここまでに述べた規則に基づいて解釈すれば,たとえばint func();という宣言において,
>>funcは「intを返す関数」であり,funcだけを取り出して「intを返す関数へのポインタ」になるのは変です.
>>関数へのポインタが必要なら,&を付けて,&funcとしなければならないはずです.

>上記文章では「intを返す関数」と、『intを返す』が「」の中に入って強調されていますが、
>実はここではintを返す事自体は重要ではありません。

intを返す事自体は重要ではない、というのはその通りです。

ただ、この本の3章でかなり強調して説明しているのは、Cの宣言の読み方です。
「識別子を起点に優先順位に基づいて英語順に読む」という読み方を前半で説明しているので、
「C の宣言を『ここまでに述べた規則に基づいて』解釈すれば,」と書いているわけです。

3章前半で説明した規則に基づいてint func();を解釈すれば、やはり「intを返す関数」です。
「intを返す」は確かにそう重要ではないですが、だからってここでだけそこをはしょってしまったら、
混乱する読者もいるのではないでしょうか。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2296] 「関数へのポインタにおける混乱」の「intを返す」という記述について
返信


投稿者:jcv
2022/06/13 17:38:41

Link:http://kmaebashi.com/seiha/seigo.html
3-5-4 関数へのポインタにおける混乱(C言語 ポインタ完全制覇(旧版))
3-5-5 関数へのポインタにおける混乱(C言語 ポインタ完全制覇(第2版))
の、以下の記載に関してです。

> しかし,C の宣言をここまでに述べた規則に基づいて解釈すれば,たとえばint func();という宣言において,funcは「intを返す関数」であり,funcだけを取り出して「intを返す関数へのポインタ」になるのは変です.関数へのポインタが必要なら,&を付けて,&funcとしなければならないはずです.

この文章ですが、何度か読んでいるのですが、実は今迄理解出来ていませんでしたが、読み飛してしまっていました。今回、改めて読み直してやっと理解する事が出来ました。わかってしまえば、大した事ではないのですが、他の方が同じ疑問を持たれている可能性もありますので、お知らせしておきます。

上記文章では「intを返す関数」と、『intを返す』が「」の中に入って強調されていますが、実はここではintを返す事自体は重要ではありません。
これがわかりにくくしていると思います。仮に「intを返す」を抜いてみると、

> しかし,C の宣言をここまでに述べた規則に基づいて解釈すれば,たとえばint func();という宣言において,funcは「関数」であり,funcだけを取り出して「関数へのポインタ」になるのは変です.関数へのポインタが必要なら,&を付けて,&funcとしなければならないはずです.

となります。この方がずっと理解しやすくなると思います。もし、「intを返す」を入れるのであれば、以下の様に括弧に入れた方が良いと思います。

> しかし,C の宣言をここまでに述べた規則に基づいて解釈すれば,たとえばint func();という宣言において,funcは(intを返す)「関数」であり,funcだけを取り出して(intを返す)「関数へのポインタ」になるのは変です.関数へのポインタが必要なら,&を付けて,&funcとしなければならないはずです.

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



[2295] Re:『Webサーバを作りながら学ぶ〜』の内容は今後も有効か?
返信


投稿者:(ぱ)こと管理人
2022/06/10 01:19:51

Link:
こんにちは。タイトル変えました。

>「HTTP/3」が発表されたようですが、
>Webアプリケーションの仕組みはそんなに変わらないと思いますか?
>言い換えると前橋さんの著書の
>『Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門』
>の内容は今後も有効でしょうか?

これは、ふたつの面から考えられると思います。

ひとつは、HTTP/2であってもHTTP/3であっても、変わったところは高速化のために
伝送方式を変えたことであって、ヘッダ圧縮とかコネクションの並列化はやっているに
しても、その上を流れるデータはHTTP/1と変わりはないということです。
なので、送受信されるデータ(HTTPリクエスト/レスポンスヘッダとか、ステータス
コードとか)の説明については、今後も有効です。

もうひとつは、HTTP/2や3で変わった、伝送方式についてです。
『Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門』では、
TCPを受けるサーバを自作で立てて、それを本物のWebブラウザで叩いてみたり、
自作のTCPクライアントから本物のWebサーバを叩くようなこともしています。
これはまさに伝送方式に関わる部分で、HTTP/2や3で変わったところです。
HTTP/2や3対応のWebサーバを自作しようと思ったら、あの本の知識では無理です。
なのでたとえばEdgeやChromeやFirefoxが、明日からHTTP/2以上しか対応しません、
となれば、自作のHenacatを、普段使いのブラウザで叩くことはできなくなります。
それでは「Webサーバを作りながら学ぶ」という本の趣旨はだいなしですが、
そんな日は、当分来ないのではないかと思っています。

本が古くなる心配といえば、2016年出版の時点でさえ、わざわざブラウザに
IEを選ぶことはなかったのではないか、とは自分でも思いますが、
これはそれなりに意図をもって選びました。キラキラWebエンジニアだけでなく、
企業内とかの泥臭いシステムを作っているプログラマにも届けたかったためです。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2294] 無題
返信


投稿者:rike1019
2022/06/09 18:40:59

Link:
「HTTP/3」が発表されたようですが、
Webアプリケーションの仕組みはそんなに変わらないと思いますか?
言い換えると前橋さんの著書の
『Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門』
の内容は今後も有効でしょうか?

IPV6が発表されてからもIPV4がすごく長く使われてることから
既存の技術からの移行ってあまり進まないイメージがあります。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2293] Re:無題
返信


投稿者:mhash
2022/05/23 08:50:29

Link:
>>現在某所で話題になってるゆっくり動画問題ってどう思われますか?
>
>本件そんなちゃんと追ってないですが。
>私は「ゆっくり」の動画はそりゃ知ってますけれども、「ゆっくり茶番劇」なる言葉は
>知りませんでした(そういう人は多いようです)。でも、検索したら万単位でひっかかってくる
>言葉を、縁もゆかりもない人が商標取って、使用料払えってそりゃいくらなんでも
>めちゃくちゃでしょう。
>
やっぱりそうですよね…自分も「ゆっくり茶番劇」なる名称は知りませんでしたが、「ゆっくり解説」とかの動画はよく見てたので、そういうコミュニティの中で普通に使われてる言葉を独占しようとするのはそりゃおかしいよなと思いました。

>>過去ののまネコ問題との類似性も指摘されているようですが(私はのまネコの方は
>>当時中学生くらいだったので詳しくないのですが…)
>
>のまネコ問題は、
>・本来だったら著作権的に真っ黒なFLASH動画について、本来だったら怒ってもいいavexが
> それを面白がって、作者の同意のもとCDに付けたりして、
>・流行ったのでぬいぐるみとかを出すにあたって、モナーやらとはわざわざ形や名前を
> 変えたネコをデザインし、そちらで商標を取った。
>
>というものです。まったく類似していません。
>
あー…そういう感じのものだったんですね。知りませんでした。
確かにあのころの2chって、大手企業には敵意剥き出しな癖に、自分達の権利侵害には無頓着な雰囲気がありましたね。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2292] Re:無題
返信


投稿者:(ぱ)こと管理人
2022/05/20 22:22:59

Link:
>現在某所で話題になってるゆっくり動画問題ってどう思われますか?

本件そんなちゃんと追ってないですが。
私は「ゆっくり」の動画はそりゃ知ってますけれども、「ゆっくり茶番劇」なる言葉は
知りませんでした(そういう人は多いようです)。でも、検索したら万単位でひっかかってくる
言葉を、縁もゆかりもない人が商標取って、使用料払えってそりゃいくらなんでも
めちゃくちゃでしょう。

>過去ののまネコ問題との類似性も指摘されているようですが(私はのまネコの方は
>当時中学生くらいだったので詳しくないのですが…)

のまネコ問題は、
・本来だったら著作権的に真っ黒なFLASH動画について、本来だったら怒ってもいいavexが
 それを面白がって、作者の同意のもとCDに付けたりして、
・流行ったのでぬいぐるみとかを出すにあたって、モナーやらとはわざわざ形や名前を
 変えたネコをデザインし、そちらで商標を取った。

というものです。まったく類似していません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2291] 無題
返信


投稿者:mhash
2022/05/20 00:53:19

Link:
現在某所で話題になってるゆっくり動画問題ってどう思われますか?
過去ののまネコ問題との類似性も指摘されているようですが(私はのまネコの方は当時中学生くらいだったので詳しくないのですが…)
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2290] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
返信


投稿者:(ぱ)こと管理人
2022/05/12 01:08:24

Link:
>ちなみに、手元のK&Rの第2版日本語訳(共立出版、1992年10月10日初版121刷、
>年齢がバレる?前橋さんより4年年上のようです)を開いてみたら、p.35(1.8 引数)の上部に、
>『配列の名前が引数として使われるときは、関数に渡される値は、実際には配列の先頭番地
>すなわちアドレスである。配列の要素のコピーは行われない。』

これはまったくその通りなのですが、『配列の名前が引数として使われるときは』という
限定は本当は不要なんですよね。もちろんここでそれを書く必要もないので、この説明が
悪いというわけではないのですが。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2288] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
返信


投稿者:かずちゃん
2022/05/10 05:16:53

Link:
>>Kenneth A. Reek の"Pointers on C"とかではどう表現されているのか読み直してみようかしらん…
>
>これは私は読んでいないので、何か面白いことが書いてあったら教えてください。

ちなみに、手元のK&Rの第2版日本語訳(共立出版、1992年10月10日初版121刷、年齢がバレる?前橋さんより4年年上のようです)を開いてみたら、p.35(1.8 引数)の上部に、
『配列の名前が引数として使われるときは、関数に渡される値は、実際には配列の先頭番地すなわちアドレスである。配列の要素のコピーは行われない。』
と、「C言語ポインタ完全制覇」を読んだあとである今読むと素直にピピッと理解でき曖昧さも少ない表現がされていました…

その他、英語で書かれたCの本で、(英語での)Cの変数の宣言の読み解き方が、「C言語ポインタ完全制覇」同様にわかりやすく書かれた本があったと記憶していた(それが上記Reekの本だと思っていた)のですが、「ポインタ」含め、いまいち、"あぁ、これだこれだ"という箇所がなく… Reek氏の本は、もう一度ひっくり返してみます。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2287] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
返信


投稿者:(ぱ)こと管理人
2022/05/09 23:10:42

Link:
>どう書いたら自然な言い回しと(お感じに)なりますかね? 僕は、今回新板を初めから
>読み直して、あらためて、この『単に「ポインタ」と呼んでしまう』中身をキチンと
>区別することが正確な理解に繋がるように思えたのですが。(例えば、新板のp.43に
>『混同しないように…』と記した直後のp.46の中程では(この場合の「ポインタ」は
>「ポインタ型の変数」のことですね)と書いて下さっています)

初版執筆当時、『どう書いても自然な>いい回しにならないので断念』して、
当時の編集さんにも「それは残念ですね」というようなことを言われた記憶があるのですが、
確かにp.71の「…式の中では、配列はその先頭要素へのポインタに読み替えられるのです。」は
「…式の中では、配列はその先頭要素へのポインタ(ポインタ値)に読み替えられるのです。」と
書いてもそんなには違和感はなかったように思いますね。

当時主に気にしていたのは、「ポインタ型」と、「ポインタ型の変数または値」の
区別だったように思いますが……

>Kenneth A. Reek の"Pointers on C"とかではどう表現されているのか読み直してみようかしらん…

これは私は読んでいないので、何か面白いことが書いてあったら教えてください。

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



[2286] Re:C言語ポインタ完全制覇、"「式」に対するsizeof"のキモは?
返信


投稿者:かずちゃん
2022/05/08 11:18:49

Link:
>はじめまして。

遅まきながら、はじめまして。
私めがどういう人間であるかということは、別の投稿の方の末尾に記しました(_o_)

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

>>「2種類の使い方」"sizeof(型名)"と"sizeof 式"のキモ(使い方・形式は何が違うと言っているのか)は、
>>・括弧の有無、
>>・型名に対してsizeofを使うか、式に対して使うか、
>>のいずれなのでしょうか?
>
>後者です。

ありがとうございます。


>>ページのほぼ中央部で"「sizeof 式」形式にメリットがあるのは…"
>>と書かれており、形式、と言われると、式に対して使うのかそれとも型名に対してか、
>>というよりは、括弧の有無のことか?とも迷ってしまいまして…
>
>言葉がまずかったですかね。括弧の有無のことを言いたかったわけではなくて、
>あくまで「式に対して使うのかそれとも型名に対してか」のつもりでした。

「形式」、とあったので、迷ってしまいました。「対象とできるものが2種類あって、一つは型名、もう一つは式である」と書かれていれば、迷う可能性も低くなったのかもしれませんが…

ご著書のような種類の本にすがるのは、僕のようなトーシロ、つまり、理解があやふやなヤツが正しく理解したいがために、なので、なるべく「読むことによって迷ってしまう」表現が少ないと有り難いです。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2285] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
返信


投稿者:かずちゃん
2022/05/08 11:10:24

Link:
ご返信ありがとうございます。

>>と言っているところの、「ポインタ型の値」のことですよね?
>>だから「左辺値ではありません」のですよね?
>
>その通りです。

ありがとうございます。スッキリしました。
今後も、コード・フラグメントと睨めっこしながら、「3つのうちのどれだ?」と考えるようにします。


>>せめて、『単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください』と
>>注意を喚起しているこの本では、随所の「ポインタ」という記述を、混同しにくいように〈クドく〉
>>書き下して書いておいて頂けると有り難かったです。(文字数が増えるのを防ぐなら、「アドレス」とか?)
>
>『混同しないように気をつけてください』のところについては、実は本書の、
>「新・標準プログラマーズライブラリ」になる前の旧版では、注に
>「※せめて本書の中では、区別して表記しようかと思ったのですが、どう書いても自然な
>いい回しにならないので断念しました…… すみません」と書いてありました。
>(あれ? 新版では削ったんだっけ?)
>というわけで、ここは著者としても忸怩たるところではあります。

をを、確かに、旧版のp.032に(2016年9月15日初版第18刷発行)、その旨書かれていますね。
(旧版、途中でなにか他のことに興味が移ったのか、3-4辺りで読むのが止まってしまっていたようですが…)

どう書いたら自然な言い回しと(お感じに)なりますかね? 僕は、今回新板を初めから読み直して、あらためて、この『単に「ポインタ」と呼んでしまう』中身をキチンと区別することが正確な理解に繋がるように思えたのですが。(例えば、新板のp.43に『混同しないように…』と記した直後のp.46の中程では(この場合の「ポインタ」は「ポインタ型の変数」のことですね)と書いて下さっています)

「ポインタ型」、「ポインタ型の変数」等と明示して頂けると、かなり理解のスピードが早まると思います。

Kenneth A. Reek の"Pointers on C"とかではどう表現されているのか読み直してみようかしらん…
(実は、暫く触っていなかったC++の勉強を(Lippmanの本で)し直しているうちに、constがまたまたわからなくなって、ご著書を読み返しておりまして… 基礎がしっかりできていないと、結局基礎的なところに戻って理解し直す、ということの繰り返しです… あ、ワタシは、定年もそう遠くないジジイの自称物理屋で、シミュレーション用のツール・キットを使うためにこういう言語を学んでおります。今頃このレベルってのがナニですが…)
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2284] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
返信


投稿者:(ぱ)こと管理人
2022/05/08 00:43:54

Link:
ご意見ありがとうございます。

>p.71には「…式の中では、配列はその要素へのポインタに読み替えられるのです。」と
>あります。これって、"ポインタ"とは書かれていますが(そして上のp.193の記述でも
>「ポインタに読み替えられ」とありますが)これらって、全て、p.43に『…厄介なことに、
>世間では「ポインタ型」も「ポインタ型の変数」も「ポインタ型の値」も、単に
>「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください。』
>と言っているところの、「ポインタ型の値」のことですよね?
>だから「左辺値ではありません」のですよね?

その通りです。

>せめて、『単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください』と
>注意を喚起しているこの本では、随所の「ポインタ」という記述を、混同しにくいように〈クドく〉
>書き下して書いておいて頂けると有り難かったです。(文字数が増えるのを防ぐなら、「アドレス」とか?)

『混同しないように気をつけてください』のところについては、実は本書の、
「新・標準プログラマーズライブラリ」になる前の旧版では、注に
「※せめて本書の中では、区別して表記しようかと思ったのですが、どう書いても自然な
いい回しにならないので断念しました…… すみません」と書いてありました。
(あれ? 新版では削ったんだっけ?)
というわけで、ここは著者としても忸怩たるところではあります。

>これまでの僕の間違った理解では「strと書くことによって、str[0]の(1文字分を記録できる)アドレスが
>渡り、そこにリテラルで3文字も(ヌルを入れると4文字)押し込もうとしているから駄目なんだよな?」と
>思っていたのですが、その理解は完全に間違っていて…

この「間違った理解」は、strを「ポインタ型の変数」と間違って解釈した、ということであれば、
クドく書き下すべきだったんですかねえ。
ただ、strが「ポインタ型の変数」と解釈したとするとそれは「str[0]の(1文字分を記録できる)アドレス」
とも違うのでは、とは思いますが。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2283] Re:C言語ポインタ完全制覇、"「式」に対するsizeof"のキモは?
返信


投稿者:(ぱ)こと管理人
2022/05/08 00:15:24

Link:
はじめまして。

>「2種類の使い方」"sizeof(型名)"と"sizeof 式"のキモ(使い方・形式は何が違うと言っているのか)は、
>・括弧の有無、
>・型名に対してsizeofを使うか、式に対して使うか、
>のいずれなのでしょうか?

後者です。

型名に対するsizeof … sizeof(型名)
式に対するsizeof … sizeof 式

です。

>このページの下の方の例で"sizeof(hoge)"と、型名でないhogeに対してsizeof()と
>括弧ありの用法をしているので、式に対して使う場合は括弧が必要である、という
>可能性は無いとは思いますが…

式に対して使う場合は括弧が必要である、ということはなく、逆に、
型名に対して使う場合は括弧が必須です。上の例、および本の中の例で
「sizeof(型名)」となっている通りです。

もちろん、式を括弧で囲んだものも式ですから、sizeof(式)という書き方は可能です。
優先順位の低い演算子を含む式なら、括弧が必須になるでしょう。「sizeof 3 + 5」は
sizeof(int) + 5でintが4バイトなら9になるでしょうが、「sizeof(3 + 5)」は
sizeof(8)なので4です。
その意味では、sizeof(hoge)の場合は括弧は必須ではありませんが、
私はこういう場合たいてい括弧を付けるので書いてしまっています。

>ページのほぼ中央部で"「sizeof 式」形式にメリットがあるのは…"
>と書かれており、形式、と言われると、式に対して使うのかそれとも型名に対してか、
>というよりは、括弧の有無のことか?とも迷ってしまいまして…

言葉がまずかったですかね。括弧の有無のことを言いたかったわけではなくて、
あくまで「式に対して使うのかそれとも型名に対してか」のつもりでした。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2282] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
返信


投稿者:かずちゃん
2022/05/07 21:56:13

Link:
あ、勿論、「四季」→「式」です。

>新・標準プログラマーズライブラリ「C言語ポインタ完全制覇」(2017年12月21日初版第1刷発行)について、少々愚痴をば…
>
>「3-3-3配列→ポインタの読み替え」のp.192の下部には「そして、配列がポインタに読み替えられたとき、そのポインタは左辺値ではありません。」と記述されていて、次のページに続いて
>
>char str[10];
>str = "abc";
>
>に対して、「代入の左辺のstrはもともと配列であり、四季の中ではポインタに読み替えられますが、左辺値ではありませんから、…」と記されています。
>
>これって、これまでの僕の間違った理解では「strと書くことによって、str[0]の(1文字分を記録できる)アドレスが渡り、そこにリテラルで3文字も(ヌルを入れると4文字)押し込もうとしているから駄目なんだよな?」と思っていたのですが、その理解は完全に間違っていて…
>
>p.71には「…式の中では、配列はその要素へのポインタに読み替えられるのです。」とあります。これって、"ポインタ"とは書かれていますが(そして上のp.193の記述でも「ポインタに読み替えられ」とありますが)これらって、全て、p.43に『…厄介なことに、世間では「ポインタ型」も「ポインタ型の変数」も「ポインタ型の値」も、単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください。』と言っているところの、「ポインタ型の値」のことですよね?
>だから「左辺値ではありません」のですよね?
>
>せめて、『単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください』と注意を喚起しているこの本では、随所の「ポインタ」という記述を、混同しにくいように〈クドく〉書き下して書いておいて頂けると有り難かったです。(文字数が増えるのを防ぐなら、「アドレス」とか?)
>
>という愚痴(雑談)でした…
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2281] C言語ポインタ完全制覇、記述に関する愚痴(^^;
返信


投稿者:かずちゃん
2022/05/07 17:58:42

Link:
新・標準プログラマーズライブラリ「C言語ポインタ完全制覇」(2017年12月21日初版第1刷発行)について、少々愚痴をば…

「3-3-3配列→ポインタの読み替え」のp.192の下部には「そして、配列がポインタに読み替えられたとき、そのポインタは左辺値ではありません。」と記述されていて、次のページに続いて

char str[10];
str = "abc";

に対して、「代入の左辺のstrはもともと配列であり、四季の中ではポインタに読み替えられますが、左辺値ではありませんから、…」と記されています。

これって、これまでの僕の間違った理解では「strと書くことによって、str[0]の(1文字分を記録できる)アドレスが渡り、そこにリテラルで3文字も(ヌルを入れると4文字)押し込もうとしているから駄目なんだよな?」と思っていたのですが、その理解は完全に間違っていて…

p.71には「…式の中では、配列はその要素へのポインタに読み替えられるのです。」とあります。これって、"ポインタ"とは書かれていますが(そして上のp.193の記述でも「ポインタに読み替えられ」とありますが)これらって、全て、p.43に『…厄介なことに、世間では「ポインタ型」も「ポインタ型の変数」も「ポインタ型の値」も、単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください。』と言っているところの、「ポインタ型の値」のことですよね?
だから「左辺値ではありません」のですよね?

せめて、『単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください』と注意を喚起しているこの本では、随所の「ポインタ」という記述を、混同しにくいように〈クドく〉書き下して書いておいて頂けると有り難かったです。(文字数が増えるのを防ぐなら、「アドレス」とか?)

という愚痴(雑談)でした…
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2280] C言語ポインタ完全制覇、"「式」に対するsizeof"のキモは?
返信


投稿者:かずちゃん
2022/05/07 14:45:09

Link:
くだらない質問で申し訳ありませんが、新・標準プログラマーズライブラリ「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

Link:
追記ですが、
とりあえず、第3刷ではmember.nifty.ne.jpになっていて、
第11刷ではkmaebashi.comになっていることは確認しました……
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2278] Re:「C言語 ポインタ完全制覇」正誤表に「配列とポインタの完全制覇」URLの変更の記載
返信


投稿者:(ぱ)こと管理人
2022/04/28 20:06:43

Link:
ご指摘ありがとうございます。

>C言語 ポインタ完全制覇 の、初版と第2版を比較していた時に気がついた事です。

確認ですが、比較されたのは、2001年の旧版と、2017年の
「新・標準プログラマーズライブラリ」版のものですよね(旧版の1刷と2刷の比較ではなく)。
私の手元にも旧版のすべての刷が整理されて揃っているわけではないので、
どの時点で直したのかはもはや不明ですが、それも含め、正誤表に記載いたしました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2277] 「C言語 ポインタ完全制覇」正誤表に「配列とポインタの完全制覇」URLの変更の記載
返信


投稿者:jcv
2022/04/27 18:18:19

Link:http://kmaebashi.com/seiha/seigo.html
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

Link:
遅くなりましてすみません。

>以下のコマンドを実行する。
>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

Link:

コンパイルでエラーが発生します。
解決方法につきご教示いただけますと幸いです。


■事象
以下をファイルをコンパイルするため
・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

Link:
ご返信ありがとうございます。
比較演算子==の比較結果はint型の値なんですね。知りませんでした。
ご丁寧に教えて頂きありがとうございました。

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



[ より古い投稿]