掲示板

掲示板を置いてみました。ご自由に書き込んで下さい。
ただし、私は根性なしなので、閑古鳥が鳴いたり、荒れてきたと
思ったらとっとと閉鎖する可能性があります。


より新しい記事へ ← 500 件の投稿中 250件目〜201件目を表示 → より前の記事へ
表示件数: 件/頁 


250 Re: デフォルトコンストラクタのアクセス制御について コメント数:  0件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/27 (木) 01:41
 http://member.nifty.ne.jp/maebashi/
> という記述があるので,このケースでは(クラスCircleはデフォルトア
> クセスなので),
>
> Circle(){}(コンパイラが生成するコードならCircle(){super();}かな?)
>
> が正しいんじゃないでしょうか。でも,実際問題,デフォルトアクセスの
> クラスは,どうせ他のパッケージから見えないので,同じような気がしますが...

ご指摘の通りです。
# なぜpublicを入れてしまったんだか...

正誤表に入れておきます。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


249 X-Draw コメント数:  1件
  かずま  | sakamoto@mc.catv.ne.jp 2001/12/26 (水) 15:35
あとまわしにしていた X-Draw のソースを読み始めました。

p.213
誤 iimport java.applet.Applet;
正 import java.applet.Applet;

こんなつまらない指摘だけでは申し訳ないので、同じページに
ついてもう少し書いてみます。

class XDrawApplet の内部クラス ClearButtonListner など
には private が付いているのに、
class XDrawFrame の内部クラス XDrawWindowAdapter には
private が付かないのはなぜでしょうか?

また、内部クラス ClearButtonListner で、shapeCollection を
参照するときに、XDrawApplet.this. を付けたのは、p.295 に
説明があるように、こんなふうにも書けることを示したかった
だけで、常にこう書きなさいということではありませんよね。
次の行の canvas には XDrawApplet.this. が付いていませんし、
他の 3つの Listner では、shapeCollection もそのまま書かれ
ていますから。
さらに、class XDrawFrame の内部クラス XDrawWindowAdapter
でも、applet に XDrawFrame.this. が付いていません。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


248 デフォルトコンストラクタのアクセス制御について コメント数:  1件
  みずしま  | kouta@pg.highway.ne.jp 2001/12/26 (水) 02:22
こんばんは。細かいことですが,
p54には,
「なお,コンストラクタを書かない場合,

public Circle(){}

というコンストラクタ(何もしないコンストラクタ)をコンパイラが自動的に
生成します.これをデフォルトコンストラクタと呼びます.」

という記述がありますが,JLSの8.6.7には(Web上にある古いバージョン
の日本語版ですが)

「クラスが public 宣言されていれば,デフォルトコンストラクタは,
暗黙にアクセス修飾子public(6.6)を与えられる。そうでなければ,デ
フォルトコンストラクタは,アクセス修飾子が示されないデフォルトア
クセスをもつ。」

という記述があるので,このケースでは(クラスCircleはデフォルトア
クセスなので),

Circle(){}(コンパイラが生成するコードならCircle(){super();}かな?)

が正しいんじゃないでしょうか。でも,実際問題,デフォルトアクセスの
クラスは,どうせ他のパッケージから見えないので,同じような気がしますが...

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


247 Re: Javaでのメソッドに対するfinal指定に関して:追加 コメント数:  0件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/26 (水) 01:33
 http://member.nifty.ne.jp/maebashi/
>  振る舞いが違うというのは,C++では,
> 無指定のメソッドをサブクラスで再定義した場合,
> 式の静的な型によって呼び出すメソッドが決定される
> という意味で言っています。

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

ううむ。一応それは知っていた筈ですが... 確かに「オーバー
ライドを禁止」はちとまずい気がします。普段あまり意識しない
(私はそんなことしないので)ため、不用意な表現を使ってしまった
ようです。正誤表に入れておきます。

C#も、virtualがなくても「隠蔽」できるようです(派生側で
overrideの指定が必要ですが)。ただ、いくら隠蔽したって、
派生クラスで書き足した分のソースでしか挙動が変わらないので
あれば「プログラム全体の整合性が危うくなる」心配は無いと
思いますが。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


246 Javaでのメソッドに対するfinal指定に関して:追加 コメント数:  1件
  みずしま  | kouta@pg.highway.ne.jp 2001/12/25 (火) 19:13
 下で書いた振る舞いが違うという言葉の意味について
少し追加します。

 振る舞いが違うというのは,C++では,
無指定のメソッドをサブクラスで再定義した場合,
式の静的な型によって呼び出すメソッドが決定される
という意味で言っています。当然,これではオーバーラ
イドとは言えないので,C++ではデフォルトでオーバー
ライドが禁止されているというのは間違いではないと
思いますが,前後の文脈から考えて,コンパイルエラー
になるという意味にとられるような気がしました。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


245 Javaでのメソッドに対するfinal指定に関して コメント数:  0件
  みずしま  | kouta@pg.highway.ne.jp 2001/12/25 (火) 14:20
 はじめまして。みずしまと申します。Java謎+落とし穴徹底解明
読ませていただきました。内容は大変面白く,特に言語の機能
について,他言語と比較して,どこが良いとかどこが悪いとか
書いてあるのは,大変参考になりました。

 さて,間違いとは言えないと思うのですが,不正確と思われる
箇所があったので,以下に書きます。私の方が間違っていたら,
ご指摘ください。

 p168のTable3.3の所にC++とJavaのメソッド修飾子の対応とい
うのがあり,それによれば,Javaのfinalに対応するものが,C++
の無指定に相当するように書かれていますが,

C++では,無指定のメソッドをオーバーライドしようとしても
コンパイルエラーにはならないのに対して
(ただし,その振る舞いが違う),

Javaでは,finalなメソッドをオーバーライドしようとすると
コンパイルエラーになる

という違いがあると思います。C#は知りませんが,どうなんで
しょうか。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


244 な、内容濃っ! コメント数:  0件
  レプラコーン  | sailis@annie.ne.jp 2001/12/24 (月) 18:34
 http://www.annie.ne.jp/~sailis/pvon/
まだ2/3しか読み終わってませんが、
内容が濃くて面白いです。めちゃくちゃタメになります。
#私のアタマではついて行くのもやっと・・・
#いや、それも怪しい、という感じですが。;-<

Javaはポインタ値を使った演算ができないだけで、
主要な機能はポインタをしっかり意識しないとダメなんですね。

この本を呼んでオブジェクト指向は面白そう(そして難しそう)だと思いました。
VBをもうちょっとキチンと習得してからC++を始めたいと思います。
#C++の本も期待してしまったりして(←甘えすぎですね)

値段がちょっと高め、ということですが、
内容からするとむしろ安いと思います。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


243 Re^5: 新刊 コメント数:  0件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/24 (月) 03:44
 http://member.nifty.ne.jp/maebashi/
> p.273 の class HogePackageException は、extends Exception
> か extends Throwable をつけないと throw できないのでは
> ありませんか?

ありがとうございます。正誤表に載せました。

> 私の Java に関する理解が不十分なせいか、ほとんど間違いを
> 見つけることができません。すごい本です。

私が言ってちゃいけませんが、他にもあると思いますので...

なにかあればできるだけ迅速にWebでフォローするようにします。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


242 Re^5: 新刊 コメント数:  1件
  レプラコーン  | sailis@annie.ne.jp 2001/12/23 (日) 16:19
 http://www.annie.ne.jp/~sailis/pvon/
私はJavaでプログラムは組めませんが、
オブジェクト指向について書かれているようなので買ってしまいました。
この本を読んでオブジェクト指向を勉強します。

これから読むので、感想などはまた後日にでも・・・。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


241 Re^4: 新刊 コメント数:  3件
  かずま  | sakamoto@mc.catv.ne.jp 2001/12/23 (日) 10:37
p.273 の class HogePackageException は、extends Exception
か extends Throwable をつけないと throw できないのでは
ありませんか?

私の Java に関する理解が不十分なせいか、ほとんど間違いを
見つけることができません。すごい本です。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


240 Re^3: 新刊 コメント数:  4件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/19 (水) 00:28
 http://member.nifty.ne.jp/maebashi/
> > 発売日までには、うちのサイトにもページを用意します。
>
> 12/18(火) 五反田のあおい書店で getしました。大崎広小路から

多少の先行発売はあると思っていましたが(1/12発売のポインタ完全
制覇も新宿の紀伊国屋では年内に買えたようですし)、まさかもう出て
いるとは思いませんでした。

このところずっと風邪気味なのでさっさと寝ようと思っていたのですが...
Webページもちょっとずつでも作らないといかんですね。

> を犯してしまいましたが、内容は雲泥の差ですね。間違いを見つけ
> たら報告しましょう。お楽しみに。

よろしくお願いします (_o_)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


239 Re^2: 新刊 コメント数:  5件
  かずま  | sakamoto@mc.catv.ne.jp 2001/12/19 (水) 00:06
> 発売日までには、うちのサイトにもページを用意します。

12/18(火) 五反田のあおい書店で getしました。大崎広小路から
東急池上線に乗って、気がついたら蓮沼で、あわてて降りて、
雪が谷大塚まで引き返しました。例のクソ本の時と同じような過ち
を犯してしまいましたが、内容は雲泥の差ですね。間違いを見つけ
たら報告しましょう。お楽しみに。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


238 わははー コメント数:  0件
  レプラコーン  | sailis@annie.ne.jp 2001/12/16 (日) 00:35
 http://www.annie.ne.jp/~sailis/pvon/
台湾版の翻訳で

> イキバタ精神→衝衝衝的精神

は思わず笑ってしまいました。
でもhogeはhogeのままなんですねー。
当て字を使っても良さそうなのに(っておい
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


237 Re: 新刊 コメント数:  6件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/15 (土) 13:43
 http://member.nifty.ne.jp/maebashi/
> 前橋さんの掲示板への書き込みが以前、減少していたのは
> Javaの新刊を執筆していたからなんですね。

どこでそれをっ!? とか思いましたが、技評さんのページに
載ったようですね。

http://www2.gihyo.co.jp/books/series.asp?ID=37

> 今回の本もまた読ましてもらう予定です。中身、期待しています。

よろしくお願いします (_o_)

発売日までには、うちのサイトにもページを用意します。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


236 新刊 コメント数:  7件
  ロミ 2001/12/14 (金) 17:11
前橋さんの掲示板への書き込みが以前、減少していたのはJavaの新刊を執筆
していたからなんですね。今回の本もまた読ましてもらう予定です。中身、
期待しています。

『Java謎+落とし穴 徹底解明』

それにしてもCの影響からか最近またJavaの本の出版が続出していますね。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


235 Re^3: それはそうと コメント数:  0件
  azvear 2001/12/14 (金) 11:29
はじめまして。

> http://pc.2ch.net/test/read.cgi/prog/1007769539/l50
> です。しかし、「かずま」の書き込みは、dat に入っていて、html
> 化されるのを待っているそうで、現在見ることはできません。

http://www.raiji.net/bbs/kaku.cgi
↑に行くと、dat化されたモノも読むことが出来ます。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


234 Re^3: それはそうと コメント数:  0件
  K.Nakagawa   | knakagawa@anet.ne.jp 2001/12/13 (木) 20:57
コメントありがとうございました。
とりあえずお礼だけ。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


233 Re^2: それはそうと コメント数:  2件
  かずま  | sakamoto@mc.catv.ne.jp 2001/12/13 (木) 13:09
> 某所って、どこなんですか?

http://pc.2ch.net/test/read.cgi/prog/990876626/
と同じ板の別スレ(同じ掲示板の別のスレッド)
http://pc.2ch.net/test/read.cgi/prog/1007769539/l50
です。しかし、「かずま」の書き込みは、dat に入っていて、html
化されるのを待っているそうで、現在見ることはできません。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


232 Re: それはそうと コメント数:  3件
  K.Nakagawa   | knakagawa@anet.ne.jp 2001/12/13 (木) 11:57
ずーっと多忙状態なので、かなりひさしぶりですけど、

>某所での間違い探し、お疲れ様です。(とか言ってみる)

某所って、どこなんですか?

ひょっとしてふれてはいけなかったのなら無視してくださって
結構です。(^^; なんかハードな内容が展開されてたりして。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


231 Re^3: それはそうと コメント数:  0件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/07 (金) 20:51
 http://member.nifty.ne.jp/maebashi/
最後まで書いていませんでした。

> 「ポインタ演算なんか使うのはやめてしまおう」という私の主張も
> 一方の極論ではありますが、

一方の極論ではありますが、いまどきK&R流の「トリッキーな」
コーディングをされてもなあ、と思います。

他人が読むときには障害になりますし、定石とは言え所詮Cでしか
使えない技だし。

まあ、これについては異論もあるかと思いますが。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


230 Re^2: それはそうと コメント数:  1件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/07 (金) 20:39
 http://member.nifty.ne.jp/maebashi/
> > かずまさん、某所での間違い探し、お疲れ様です。(とか言ってみる)
>
> 疲れたのでやめました。

私も間違い探しをしようかとも思いましたが、アレに印税が
行くかと思うと本を買う気にはなれませんし。

ミスについては人のことを言えませんが(すみません)
あのポインタ演算使いまくりのサンプルソースはどうも...

「ポインタ演算なんか使うのはやめてしまおう」という私の主張も
一方の極論ではありますが、

> そのかわり、こちらの間違いをお知らせしましょう。
...
> 「技術評論社」ですね。

ありがとうございます。さっそく直しました。
# この手のミスは以前にも直したような気がするのですが、
# まだ残っていたようです。

> もっとすごいのは、その案内ページで、「体当り」が「中級者向け」に
> なっていること。これじゃ、初心者は敬遠して誰も買いませんよ。

もっとすごいのは、「ポインタ完全制覇」が初心者向けになっていること...
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


229 Re: それはそうと コメント数:  2件
  かずま  | sakamoto@mc.catv.ne.jp 2001/12/07 (金) 18:52
> かずまさん、某所での間違い探し、お疲れ様です。(とか言ってみる)

疲れたのでやめました。そのかわり、こちらの間違いをお知らせしましょう。

http://member.nifty.ne.jp/maebashi/taiatari/index.html ですが、

  技術評論者さんによる案内ページはこちら。
  http://www2.gihyo.co.jp/books/bookinfo/4-7741-1200-3

「技術評論社」ですね。
もっとすごいのは、その案内ページで、「体当り」が「中級者向け」に
なっていること。これじゃ、初心者は敬遠して誰も買いませんよ。


【新規投稿】 【この投稿にリプライ】 【投稿者削除】


228 それはそうと コメント数:  7件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/02 (日) 02:17
 http://member.nifty.ne.jp/maebashi/
それはそうと…

かずまさん、某所での間違い探し、お疲れ様です。(とか言ってみる)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


227 Re: C言語ポインタ完全制覇:コールバック関数 コメント数:  0件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/01 (土) 22:05
 http://member.nifty.ne.jp/maebashi/
>「C言語ポインタ完全制覇」の195ページに出てくる
>「コールバック関数」とは何ですか?
>「呼び出し返される関数」らしいのですが…
>いまいち意味がわかりません。

その通りで、「呼び出し返される関数」のことです。
GUIで、「ボタンを押したときに呼び出される関数」を
関数へのポインタを使って登録するテクニックがありますが、
そのときの呼び出される関数を「コールバック関数」と
呼びます。

ちなみに、関数へのポインタについては、2-3-2にも説明があります。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


226 Re^12: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  0件
  (ぱ)   | PXU00211@nifty.ne.jp 2001/12/01 (土) 22:04
 http://member.nifty.ne.jp/maebashi/
修羅場から生還しました。

> > 「体当り」のほうに、extern int i; は宣言で、int i; は定義だ
> > という補足(コラム?)があったと思うんですが、厳密に言えば、
> > それは間違いです。定義だと複数書けませんから。
>
> 訂正します。
> これがあったのは、「体当り」ではなく「完全制覇」の p.191 でした。

ううむ。規格書の該当部分を読んでいなかったわけでは
ないのですが...

JISX3010には、
| オブジェクトの識別子の宣言がファイル有効範囲および
| 初期化子を持つ場合、その宣言を識別子の外部定義という。

とありますから、

初期化子がないと確かに「外部定義」にはならず
「仮定義(tentative definition)」ですね。

ただ、K&RとかエキスパートCプログラミングとかにも
同様の説明がありますのでまあこの説明でいいかと
逃げちゃったような気が...

一応正誤表に入れておきます。

# ウイルスがいっぱい来るので、会社に迷惑をかけないよう、
# Webページで公開するメイルアドレスを変更しました。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


225 C言語ポインタ完全制覇:コールバック関数 コメント数:  1件
  たっく 2001/11/29 (木) 09:25
始めまして、たっくと申します。いきなりですが、「C言語ポインタ完全制覇」の195ページに出てくる「コールバック関数」とは何ですか?「呼び出し返される関数」らしいのですが…いまいち意味がわかりません。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


224 Re^11: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  1件
  かずま  | sakamoto@mc.catv.ne.jp 2001/11/27 (火) 19:45
> 「体当り」のほうに、extern int i; は宣言で、int i; は定義だ
> という補足(コラム?)があったと思うんですが、厳密に言えば、
> それは間違いです。定義だと複数書けませんから。

訂正します。
これがあったのは、「体当り」ではなく「完全制覇」の p.191 でした。

extern int a; /* 宣言 */
int a;    /* 仮定義 */
int a = 0;  /* 定義 */
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


223 Re^10: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  0件
  REC   | tabe@mug.biglobe.ne.jp 2001/11/22 (木) 23:26
 http://rec.ncos.co.jp/
> ほっぽらかしておくのも、申し訳ないのでコメントを。
本多さん。
かずまさん。
解説&フォローありがとうございます。
私が言いたかったのは、
一点だけ。
  ★★[ヘッダファイルに、staticって書くな!!!!]★★
理由:
  「私は、スコープルールを全然理解してません。」
  とソースコードに
  書いてるのと、同じだから。
以上
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


222 Re^11: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  0件
  かずま  | sakamoto@mc.catv.ne.jp 2001/11/22 (木) 17:49
> 規格書の「6.7.2 外部オブジェクト定義」に、仮定義(tentative
> definition)として記述されています。ひとつのファイルに、
> int j; int j; int j; と書いてもエラーになりません。

補足します。これは、C の外部オブジェクト定義に限った話です。
関数内やブロック内では、記憶域が確保されるから、int j; は定義です。
また、C++ では、外部オブジェクトでも、int j; は定義です。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


221 Re^10: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  3件
  かずま  | sakamoto@mc.catv.ne.jp 2001/11/22 (木) 14:48
> > > ----h.h----
> > > int i = 1234; /* (1) */
> > > int j; /* (2) */
> > > extern k; /* (3) */

> (2)はコンパイル段階ではシンボル名の予約だけしかしないらしく
> リンク(複数ファイルの結合)段階で
> 実体を一つだけにまとめてくれるようです(例外あり?)。

規格書の「6.7.2 外部オブジェクト定義」に、仮定義(tentative
definition)として記述されています。ひとつのファイルに、
int j; int j; int j; と書いてもエラーになりません。
「体当り」のほうに、extern int i; は宣言で、int i; は定義だ
という補足(コラム?)があったと思うんですが、厳密に言えば、
それは間違いです。定義だと複数書けませんから。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


220 Re^10: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  0件
  かずま  | sakamoto@mc.catv.ne.jp 2001/11/22 (木) 14:45
> > > ----h.h----
> > > int i = 1234; /* (1) */
> > > int j; /* (2) */
> > > extern k; /* (3) */
> > > ちなみに(1)や(3)はエラーですが、
> (3)は別ファイルに定義されている(実体がある)という宣言だからエラー。

k を参照しなければエラーになりません。

また、別ファイルに定義されている必要はありません。
ひとつのファイルに extern int k; int k = 3; とあっても、
int k = 3; extern int k; とあってもエラーになりません。
static int k = 3; extern int k; というのも許されますから、
extern は外部結合を指定するとも言い切れません。規格書の
「6.1.2.2 識別子の結合」と「6.7.2 外部オブジェクト定義」
にあります。



【新規投稿】 【この投稿にリプライ】 【投稿者削除】


219 Re^9: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  0件
  本多  | manybook@msc.biglobe.ne.jp 2001/11/21 (水) 22:52
> static int m = 1234; /* (4)ヘッダファイル内で初期化 */は、
> 良いスタイルか、悪いスタイルか?
> どちらかを選択して、理由を述べよ。
ヘッダファイル内のstatic宣言は当然関数外にあるはずですね。
関数外のstaticな変数は他のファイルの関数から直接アクセスできない
ファイル内専用のグローバル変数になります。

対してヘッダファイルは
複数のファイルで共有する関数や変数の宣言を記述するためにあります。

と、いうことはヘッダファイルにあるstatic変数は複数のファイルに
共通の名称の相互にアクセス不可能な変数を配ることになります。

さらに、そのような変数をヘッダ内で初期化しているということは
各ファイルでは初期値まで自由にならないと言うことですね。

ところでstaticって変数に適用する場合、
関数内と関数外では意味がかなりちがいますよね。
C言語のひどい仕様(の一つ)だと思うんですけど。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


218 Re^9: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  6件
  本多  | manybook@msc.biglobe.ne.jp 2001/11/21 (水) 22:50
ほっぽらかしておくのも、申し訳ないのでコメントを。

> > ----h.h----
> > int i = 1234; /* (1) */
> > int j; /* (2) */
> > extern k; /* (3) */
> > ちなみに(1)や(3)はエラーですが、
(3)は別ファイルに定義されている(実体がある)という宣言だからエラー。
(1)は初期化している定義が複数あるためにエラー...はいいとして、
(2)はコンパイル段階ではシンボル名の予約だけしかしないらしく
リンク(複数ファイルの結合)段階で
実体を一つだけにまとめてくれるようです(例外あり?)。

実体が複数あったら初期化してようがしていまいが
エラーにしてくれれば、いいのでしょうが、
過去の資産を生かすための仕様なのでしょう。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


217 Re:体当り → ポインタ完全 制覇 コメント数:  0件
  costa 2001/11/20 (火) 12:37
> ポインタについてもっと勉強してみます。
ある程度進んだら、[ポインタ完全制覇]の方も読んでみる事
をお勧めします。難易度は高くなりますがとても参考になります。

ところで、もともと[ポインタ〜]の本が先に出版されてその後
[体当り〜]の本を出したようですが、[体当り〜]の方を後から
出版したというのは順番としてちょっと不思議な感じがしました。



【新規投稿】 【この投稿にリプライ】 【投稿者削除】


216 ありがとうございます。 コメント数:  1件
  yu 2001/11/20 (火) 01:53
本多さん、前橋さん、どうもありがとうございました。

もう少し読み進めて見るのと同時に、ポインタについてもっと勉強してみます。

実は、C言語は大学の講義で一通り(簡単に?)習ったのですが、あまりの進みの速さと、説明の曖昧さ(分かりにくさ)で、ほとんどといっていいくらい、ちゃんと分からないまま講義が終わってしまいました。
そこで、もう一度自分で初歩からやり直そうと思い、勉強中です。

C言語体当たり学習は、目からウロコなことばかりで、読み進めるたびに新しい発見があって大変面白く感じています。そして、どういう風にC言語が役立つのか、直感的に分かることでプログラミングの面白さが初めて分かった気がします(初心者なのに偉そうなこと言ってもうしわけありませんが、講義を受けている時は、正直おもしろさを感じられなかったので....)

また、分からないことがあったときは、よろしくお願いします。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


215 Re: C言語体当たり学習 3-4-5 コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/11/20 (火) 00:09
 http://member.nifty.ne.jp/maebashi/
続きです。

> あと、もう一つ疑問がありまして、charがデータ型の
> 一種だとすると、intで代用して、

つまり、「charとintは表現できる数値の範囲が違うだけだから、
範囲を超えない限り自由に交換できる」という認識があるわけ
ですよね?

ひとつの変数であればその認識は正しいです。必要に応じて
勝手に変換が入ります。

ただし、配列の場合はそうはいきません。intの配列を一気に
charの配列に変換することができるほど、「マナイタは広くない」
のです。その話はp.156の補足にあります。

なかなか突っ込みどころがよいですね (^^;
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


214 Re: C言語体当たり学習 3-4-5 コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/11/20 (火) 00:02
 http://member.nifty.ne.jp/maebashi/
> はじめまして。yuと申します。C言語体当たり学習の3−4−5で、
>文字列のことが書かれていますが、読んでいて疑問が生じました。

> char str[4];

> printf("str=%s\n",str);
>
> となっていますが、strが要素数4の配列だとすると、何故、
> printfの引数がstrだけでいいのでしょうか。

これは、3-4-5のあたりでは、あまり深く追求しないでいただきたかった
ですが... (^^;
# 入門書を書くというのは難しいですね。出版した後に言ってちゃ
# いけませんが。

配列を関数の引数として渡すことについては、5-2-4でもう一度
説明しています。そこまでひとまず保留ということでいかがで
しょうか。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


213 Re: C言語体当たり学習 3-4-5 コメント数:  0件
  本多  | manybook@msc.biglobe.ne.jp 2001/11/19 (月) 12:41
「charがデータ型の一種だとすると」とおっしゃっていることから推測するに
char型をご存知ないようですがポインタ型はご存知ですか?
ポインタを少しでも知らないと、以降の説明はわかりにくいかもしれません。

"[]"をつけずに配列名(この場合はstr)は配列の先頭を指すポインタになります。

また、printf()関数は%sに対応する引数をchar型のポインタとして解釈し、
引数の指す位置から'\0'が現れるまでの
連続する位置に格納されている文字を表示します。
ですから、printf("%s\n",str)は配列strの先頭から"abc"と表示します。

printfは%sに対応するポインタはchar型として解釈します。
多くの場合、int型はchar型より大きいためint str[]とすると、
char型として解釈したときに、'a','\0','\0','\0','b','\0'...というように
'\0'が含まれることになり、表示が途中で終了します。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


212 C言語体当たり学習 3-4-5 コメント数:  5件
  yu 2001/11/19 (月) 00:38
はじめまして。yuと申します。C言語体当たり学習の3−4−5で、文字列のことが書かれていますが、読んでいて疑問が生じました。

char str[4];

str[0]='a';
str[1]='b';
str[2]='c';
str[3]='\0';

printf("str=%s\n",str);

となっていますが、strが要素数4の配列だとすると、何故、printfの引数がstrだけでいいのでしょうか。
配列なのに、例えば、printf("str=%s\n",str[1])のように書かなくていい(書いてはならない?)理由が分かりません(str[]には文字コードの値が入っていると思うので、%sでは確かにうまくいかないと思いますが...)

あと、もう一つ疑問がありまして、charがデータ型の一種だとすると、intで代用して、

int str[4];

str[0]='a';
str[1]='b';
str[2]='c';
str[3]='\0';

printf("str=%s\n",str);

としても、うまく行くのではないかと思ったのですが、実際には「a」しか出力されません。これは何故なのでしょうか。

以上の質問にお答えいただけないでしょうか。
よろしくお願いします。(C言語は習い始めたところです)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


211 Re^8: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  8件
  REC   | tabe@mug.biglobe.ne.jp 2001/11/15 (木) 22:30
 http://rec.ncos.co.jp/
ぽてさんへ。
> > 同じ変数の宣言を(externの宣言をせずに)複数ファイルでしていると
> > エラーになることは、試行錯誤の結果わかりました。
=>65点をあげます。外れではありません。

> ----h.h----
> int i = 1234; /* (1) */
> int j; /* (2) */
> extern k; /* (3) */
> ----a.c----
> #include "h.h"
> ----b.c----
> #include "h.h"
> -----------
> % cc a.c b.c
> -----------
> ちなみに(1)や(3)はエラーですが、

これに答えられたら100点あげます。
問い1:
static int m = 1234; /* (4)ヘッダファイル内で初期化 */は、
良いスタイルか、悪いスタイルか?
どちらかを選択して、理由を述べよ。
問い2:
UNIX(Linux含む)環境下で、
%cd 〜今開発中のディレクトリ
%grep static *.h
と打ち、その結果を考察せよ。
(grepが何も言わない時はこの問題は無視して良い)


【新規投稿】 【この投稿にリプライ】 【投稿者削除】


210 Re^7: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  9件
  本多  | manybook@msc.biglobe.ne.jp 2001/11/15 (木) 19:25
> 同じ変数の宣言を(externの宣言をせずに)複数ファイルでしていると
> エラーになることは、試行錯誤の結果わかりました。
----h.h----
int i = 1234; /* (1) */
int j; /* (2) */
extern k; /* (3) */
----a.c----
#include "h.h"
----b.c----
#include "h.h"
-----------
% cc a.c b.c
-----------
ちなみに(1)や(3)はエラーですが、
(2)は(規格では)エラーにならないはずですが?
もっとも、コンパイラによっては独自拡張(親切心?)で(2)をエラーにする
かもしれませんね。bccは(2)もエラーにするのかしら?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


209 Re^6: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  10件
  ぽて 2001/11/15 (木) 02:42
> h.hファイルで
> int i = 1234 ;
> と書いて、
> a.cとb.cで
> #include "h.h"
> と書いて、(a.cとb.cのどっちかにmain(){}がある事)
> cc a.c b.c
> としたら、コンパイルエラー(リンクエラー)となった。
> なぜか?
同じ変数の宣言を(externの宣言をせずに)複数ファイルでしているとエラーになることは、試行錯誤の結果わかりました。この場合もincludeしているのでそれと同じ状況になるという理解でいいのでしょうか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


208 Re^5: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  11件
  REC   | tabe@mug.biglobe.ne.jp 2001/11/14 (水) 23:24
 http://rec.ncos.co.jp/
> get_word.cのmain関数を削除したところ、正常にコンパイルできました。p.249に、「これをそっくり流用する」とあったので、字義通り、そのまま書いていました。ソースを分割する場合、全体でmainが1つでなければいけないのですね。
>
> ありがとうございました。
じゃあ、練習問題
h.hファイルで
int i = 1234 ;
と書いて、
a.cとb.cで
#include "h.h"
と書いて、(a.cとb.cのどっちかにmain(){}がある事)
cc a.c b.c
としたら、コンパイルエラー(リンクエラー)となった。
なぜか?


【新規投稿】 【この投稿にリプライ】 【投稿者削除】


207 Re^4: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  12件
  ぽて 2001/11/14 (水) 12:37
get_word.cのmain関数を削除したところ、正常にコンパイルできました。p.249に、「これをそっくり流用する」とあったので、字義通り、そのまま書いていました。ソースを分割する場合、全体でmainが1つでなければいけないのですね。

ありがとうございました。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


206 Re^3: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  13件
  (ぱ)   | maebashi@cse.co.jp 2001/11/14 (水) 02:52
 http://member.nifty.ne.jp/maebashi/
> ただ、以下のような警告が出て、実行ファイルらしきものは作成できたのですが、実行しても何も起こりません。
> -------
> Warning: パブリックシンボル _main がモジュール C:\...\GET_WORD.OBJ と C:\...\MAIN.OBJ の両方に定義されている

それは、メッセージの通り、main関数がget_word.cとmain.cの
両方に登場しているからでは?

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


205 Re^2: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  14件
  ぽて 2001/11/14 (水) 00:25
さっそくのご返答ありがとうございました。

> とりあえずなら、makeにこだわらなくても
>
> bcc32 -ehogehoge hoge.c piyo.c
>
> とすれば良いのでは?
それでできました。当面はバッチファイルでも作って実行することにします。
ただ、以下のような警告が出て、実行ファイルらしきものは作成できたのですが、実行しても何も起こりません。
-------
Warning: パブリックシンボル _main がモジュール C:\...\GET_WORD.OBJ と C:\...\MAIN.OBJ の両方に定義されている
-------
原因の想像がつくようでしたら、ご教示願います。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


204 Re: ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  15件
  (ぱ)   | maebashi@cse.co.jp 2001/11/13 (火) 23:41
 http://member.nifty.ne.jp/maebashi/
> 単語の出現頻度プログラムを作って、いざコンパイルしようと思った
>のですが、今までは単一のプログラムしかコンパイルしたことがないので、
>複数ファイルからなるプログラムのコンパイル方法が分かりません。

とりあえずなら、makeにこだわらなくても

bcc32 -ehogehoge hoge.c piyo.c

とすれば良いのでは?

これで、hoge.cとpiyo.cをコンパイル/リンクしてhogehoge.exeが
作られます。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


203 ポインタ完全制覇:単語の出現頻度プログラムのコンパイル コメント数:  16件
  ぽて 2001/11/13 (火) 22:11
はじめまして。
「C言語ポインタ完全制覇」を購入しました。
単語の出現頻度プログラムを作って、いざコンパイルしようと思ったのですが、今までは単一のプログラムしかコンパイルしたことがないので、複数ファイルからなるプログラムのコンパイル方法が分かりません。
makefileを作ればmakeでできるということのようですが、makefileの作り方が分かりません。ログを当たったところgccではmakefileを作成できるようですが、当方はborlandのフリーコンパイラを使っています。
このケーススタディに関してmakefileを用意していただくことはできないでしょうか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


202 Re^2: エディタやCUI(Dos窓、UNIX)を使うべき? コメント数:  0件
  ひろあき  | feytan@infoseek.jp 2001/11/09 (金) 21:56
Matsu様、のぐー様
貴重なアドバイスありがとうございます。とりあえず現在C言語体当たり入門のBMIを計ってみようまで終わってソートプログラムに入った時点でまだ問題がないのでとりあえず様子をみつつやってみます。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


201 Re: エディタやCUI(Dos窓、UNIX)を使うべき? コメント数:  0件
  D.Matsu   | dmatsu@gld.mmtr.or.jp 2001/11/08 (木) 20:41
大抵のものはMac+CodeWarriorでも問題ありませんが、Macではコマンドコンソールが標準で提供されていない(MacOS Xは除きます)ので、コマンドに直接パラメータを渡してやるようなプログラムだけはそのままでは作成・実行出来ません。
それだけ留意しておけば、あとは使いやすい環境で作ればいいでしょうね。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】

Copyright(C) 1999 NIFTY Corporation
All Rights Reserved.