掲示板
Powered by OTD
この記事は、K.Maebashi's BBSの過去ログです。
書き込む場合は、新しい掲示板へお願いします。
[日付順表示] | [日付順インデックス] | [スレッド順インデックス]


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


[30] Re:やられたぁ・・・
返信


投稿者: レプラコーン
2003/05/15 21:08

Mail:   Link:
 「ナンということだ。」(クワトロ・バジーナ)
「ナンばしょっとか〜。」(武田鉄也)

・・・と、このネタだけで引っ張ると
他の方にも「ナンだろな〜、ナンだろな〜」と思われてしまうな。:-p


> 本当にこれはナンなのか。
ナンとはナンなのか。これはなかなか難しい問題かも知れませんね。
インドカレー屋なんかで出てくるナンが本場ものだとすると、
パンのようでいてパンじゃないような、
でも味はパンと似た食べ物でパイ生地のようでもあるもの、でしょうかね。
ナンと形容していいものか。(←まだ言うか)


[29] Re:やられたぁ・・・
返信


投稿者: (ぱ)
2003/05/12 20:52

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > 雑記のネタ、NANと信じて疑いませんでした(汗)

NANというとNot a NumberのあのNaNですか?
いやあ、それは思いもよらなかったです。

> 「ナンだバカ野郎」(志村けん)
>
> # 「ナンだチミは?」で返さないように。:-p

「ナンてこった」(タシロ提督)
「ナンて情けない子だろう」(アムロの母ちゃん)
「ATフィールドは中和しているはずなのに、ナンでやられないのよっ!!」(アスカ)

...いかん、どうも偏りが。

ちょっとGoogleしてみたら、インドの無発酵パンというとチャパティで、
ナンは発酵させてるようですね。でもあまり生地は膨れてなかったような...

問題は、ナンなんてそう頻繁に食べるものではないので、今回作ったナンが
どの程度ちゃんとしたナンなのか私にはわからない、ということです。
本当にこれはナンなのか。


[28] やられたぁ・・・
返信


投稿者: レプラコーン@バカ野郎
2003/05/12 19:43

Mail:   Link:
 雑記のネタ、NANと信じて疑いませんでした(汗)

勝手にNANと間違えたほうがバカ野郎ですが、
悔しいのでダジャレ捨て台詞を残していきます。

「ナンだバカ野郎」(志村けん)

# 「ナンだチミは?」で返さないように。:-p


[27] Re:Cからの質問
返信


投稿者: mono
2003/05/10 19:10

Mail:   Link:
 > >   よく考えて書き込むようにします。
>
> 質問の仕方については、(ML用ですが)以下のページが参考になるかと。
> http://java-house.jp/ml/topics/topics.html#ml-howto
>
> >  質問に答えていただきありがとうございました。
>
> あんまり問題が解決したようには思えないので、もう少し推測してみます。
>
> 最初の質問がこれ。
>
> >(XXX*)
> >と書いた場合のXXXと
> >(*XXX)
> >のXXXの違いは何なんでしょうか?
>
> そして「これは何?」と聞き返されると、
>
> >これの(*func)(void*)と書いてある部分の意味を聞こうと思ってました。
>
> とのことなので、この(void*)が(XXX*)に相当、(*func)が(*XXX)に相当する、
> ということなのでしょう。
>
> ところで、「関数へのポインタ」の宣言の仕方は理解していますか?
>
> int型の引数を取るvoid型の関数としてfuncを宣言するならこう書きます。
>
> void func(int a); ←(a)
>
> そして、int型の引数を取るvoid型の関数へのポインタ型変数としてfuncを
> 宣言するならこう書きます。
>
> void (*func)(int a); ←(b)
>
> この宣言の意味がわかるかどうか、あるいはそもそも「関数へのポインタ」って
> 何に使うものかがわかっているかどうか、は置いといて、
> (a)から(b)に、どこが変わったのかをまず把握してください。
>
> そしてもし、このfuncの引数がintではなくint*だったとしたら、
>
> void (*func)(int *a); ←(c)
>
> となるでしょう。
>
> そして、一番最初の質問にあったように void func(int a); も void func(int); も
> 同じです。つまり引数名は省略できるので、上記宣言は
>
> void (*func)(int*); ←(d)
>
> とも書けます。(c)と(d)の違いは、省略可能なaを抜いただけです。
> 本田さんが指摘しておられるように、この(int*)はキャストではなく、引数並びなのです。
>

 わかりました。


[26] Re:Cからの質問
返信


投稿者: (ぱ)
2003/05/09 22:54

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 >   よく考えて書き込むようにします。

質問の仕方については、(ML用ですが)以下のページが参考になるかと。
http://java-house.jp/ml/topics/topics.html#ml-howto

>  質問に答えていただきありがとうございました。

あんまり問題が解決したようには思えないので、もう少し推測してみます。

最初の質問がこれ。

>(XXX*)
>と書いた場合のXXXと
>(*XXX)
>のXXXの違いは何なんでしょうか?

そして「これは何?」と聞き返されると、

>これの(*func)(void*)と書いてある部分の意味を聞こうと思ってました。

とのことなので、この(void*)が(XXX*)に相当、(*func)が(*XXX)に相当する、
ということなのでしょう。

ところで、「関数へのポインタ」の宣言の仕方は理解していますか?

int型の引数を取るvoid型の関数としてfuncを宣言するならこう書きます。

void func(int a); ←(a)

そして、int型の引数を取るvoid型の関数へのポインタ型変数としてfuncを
宣言するならこう書きます。

void (*func)(int a); ←(b)

この宣言の意味がわかるかどうか、あるいはそもそも「関数へのポインタ」って
何に使うものかがわかっているかどうか、は置いといて、
(a)から(b)に、どこが変わったのかをまず把握してください。

そしてもし、このfuncの引数がintではなくint*だったとしたら、

void (*func)(int *a); ←(c)

となるでしょう。

そして、一番最初の質問にあったように void func(int a); も void func(int); も
同じです。つまり引数名は省略できるので、上記宣言は

void (*func)(int*); ←(d)

とも書けます。(c)と(d)の違いは、省略可能なaを抜いただけです。
本田さんが指摘しておられるように、この(int*)はキャストではなく、引数並びなのです。


[25] Re:Cからの質問
返信


投稿者: mono
2003/05/09 21:39

Mail:   Link:
 > > > > ではれぷ@職場さんが言っていた
> > > > 「int *a;」と「int* a;」に違いはないということになるんですか?
>
> 本田さんとれぷさんが、それぞれ「monoさんは何がわからないのか」を
> 推測しているわけですが…
> 私も一案出してみます。(「れぷ」さんとほぼ同意見のように思います)
>
>  monoさんは、「ポインタ型」というものを理解しておられないのではないでしょうか?
>
> int *a;
>
> は、「intへのポインタ」という型の、aという変数を宣言します。
>
> int a;
>
> のような簡単な変数宣言は、
>
> 型 変数名;
>
> のように書くわけで、それを考えると、「intへのポインタ」という型のaという変数を
> 宣言するのであれば、
>
> int* a;
>
> のように書くと意味がはっきりします。こう書くと「型 変数名;」の形式になるからです。
> だから、こう書くべきだと勧めている入門書もあります。
> もっとも、この記法は配列が入ると破綻しますし、一度に複数の変数を宣言すると
> ドツボにはまるので私はお勧めしませんけれど。

> しかし、やはり本人が「何がわからないのか」わからない状態では、
> 理解に至ることはないのではないかと。
>

 よく考えて書き込むようにします。

 質問に答えていただきありがとうございました。
 また何かあったら投稿させていただきたいと思いますが。
 そのときはよろしくお願いします。
 色々ご迷惑をおかけしてしまいましたが。
 本当に感謝いたします。


[24] Re:Cからの質問
返信


投稿者: (ぱ)
2003/05/09 20:10

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > > > ではれぷ@職場さんが言っていた
> > > 「int *a;」と「int* a;」に違いはないということになるんですか?

本田さんとれぷさんが、それぞれ「monoさんは何がわからないのか」を
推測しているわけですが…
私も一案出してみます。(「れぷ」さんとほぼ同意見のように思います)

 monoさんは、「ポインタ型」というものを理解しておられないのではないでしょうか?

int *a;

は、「intへのポインタ」という型の、aという変数を宣言します。

int a;

のような簡単な変数宣言は、

型 変数名;

のように書くわけで、それを考えると、「intへのポインタ」という型のaという変数を
宣言するのであれば、

int* a;

のように書くと意味がはっきりします。こう書くと「型 変数名;」の形式になるからです。
だから、こう書くべきだと勧めている入門書もあります。
もっとも、この記法は配列が入ると破綻しますし、一度に複数の変数を宣言すると
ドツボにはまるので私はお勧めしませんけれど。

int *a; が、『「intへのポインタ」という型の、aという変数を宣言する』ということが
よく理解できない人は多いようで、C-FAQにも載っています。

http://www.catnet.ne.jp/kouno/c_faq/c4.html#0
| 君が宣言したポインターはpであって*pではない。ポインターに
| どこかを指させるにはポインターの名前を使うだけでいい。

ついでに言うとCでは配列型や関数型もあります。
int a[10]; は「intの配列(要素数10)」という型の変数aを宣言しています。
変数宣言が「型 変数名;」という形式であるなら、これは

int[10] a;

と書くことになるはずですが、残念ながらCはこうなっていません。
さきほど「この記法は配列が入ると破綻しますし」と書いたのはこのためです。
でも、Javaだと int[] a; と書けます(Javaでは配列の要素数は実行時に決まるので、
[]の中の数字は書かない)。

この辺のことは、「C言語ポインタ完全制覇」の冒頭付近に書いてあります。

monoさんがこの点ではまっているのかどうかはわかりませんが、初心者が
はまりやすいことだと思うので書いてみました。

しかし、やはり本人が「何がわからないのか」わからない状態では、
理解に至ることはないのではないかと。


[23] Re:Cからの質問
返信


投稿者: mono
2003/05/07 19:43

Mail:   Link:
 > > ではれぷ@職場さんが言っていた
> > 「int *a;」と「int* a;」に違いはないということになるんですか?
>
> Cでは、空白と改行はたいていのところに好き勝手に入れてよいわけで、
>
> int *a;
>
> でも、
>
> int* a;
>
> でも、
>
> int* a;
>
> でも、
>
> int * a;
>
> でも、
>
> int
> *
> a
> ;
>
> でも同じ意味である、というのは自明ではないですか?
>
> それとも、「Cでは、空白と改行はたいていのところに好き勝手に入れてよい」と
> いうことをご存知なかったですか?

 空白は好きに入れていいということは知っていましたが。
 型名のすぐ隣に「*」をつけてもいいとは知らなかったです。


[22] Re:Cからの質問
返信


投稿者: (ぱ)
2003/05/07 18:38

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > ではれぷ@職場さんが言っていた
> 「int *a;」と「int* a;」に違いはないということになるんですか?

Cでは、空白と改行はたいていのところに好き勝手に入れてよいわけで、

int *a;

でも、

int* a;

でも、

int* a;

でも、

int * a;

でも、

int
*
a
;

でも同じ意味である、というのは自明ではないですか?

それとも、「Cでは、空白と改行はたいていのところに好き勝手に入れてよい」と
いうことをご存知なかったですか?


[21] Re:Cからの質問
返信


投稿者: mono
2003/05/07 18:12

Mail:   Link:
 > もしかして、monoさんにとって、
> void abc(int *def, void (*ghi)(jkl*));
> の、(jkl*)の部分が、
> (jkl*)型へのキャストの様に見えているのではないですか?
>
> void (*ghi)(jlk*)で、1つの引数になっていることを
> 認識できていらっしゃらないのでは?
>
> ghiは、void (*ghi)(jkl *)という型の関数ポインタ。
> abc()は、int *型の引数defと、ghiという関数ポインタを引数にとる関数。
> と、理解できてますか?

  int *型という風に見ればいいわけですね。
  いままでint*というかたまりにこだわりすぎていました。

ではれぷ@職場さんが言っていた
  「int *a;」と「int* a;」に違いはないということになるんですか?


[20] Re:Cからの質問
返信


投稿者: mono
2003/05/07 18:02

Mail:   Link:
 > 「int *a」と「int* a」を違うものと認識している可能性もありますね・・・。
>

  すいませんが、その通りです。


[19] Re:Cからの質問
返信


投稿者: れぷ@職場
2003/05/07 16:37

Mail:   Link:
 「int *a」と「int* a」を違うものと認識している可能性もありますね・・・。


[18] Re:広告
返信


投稿者: れぷ@職場
2003/05/07 16:29

Mail:   Link:
 広告と言えば、WindowsのGUI画像をそのまま使ったヤツは
なにかと紛らわしいので止めて欲しいですねぇ(^^;

掲示板に書き込まれるタイプのものは掲載料金をいただきたいです(ぉ


[17] Re:Cからの質問
返信


投稿者: 本多
2003/05/07 11:49

Mail:manybook@msc.biglobe.ne.jp   Link:
 > >int *a;というのはもちろん使ったことがあります。
> void func(int a);
> void func(int *a);
> このふたつのプロトタイプ宣言の意味の違いはわかりますか? (Y/N)
> void (*func)(int*)におけるint*のいったいどこが疑問なのかが私にはわかりません。
> 教えていただけますか?

>> (int)は、そのオペランド(右側にある式)をint型に変換します。
>> (int*)は、そのオペランド(右側にある式)をint*型(intへのポインタ型)に変換します。
>   わかりました。

もしかして、monoさんにとって、
void abc(int *def, void (*ghi)(jkl*));
の、(jkl*)の部分が、
(jkl*)型へのキャストの様に見えているのではないですか?

void (*ghi)(jlk*)で、1つの引数になっていることを
認識できていらっしゃらないのでは?

ghiは、void (*ghi)(jkl *)という型の関数ポインタ。
abc()は、int *型の引数defと、ghiという関数ポインタを引数にとる関数。
と、理解できてますか?


[16] 広告
返信


投稿者: (ぱ)
2003/05/07 02:39

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 そういえば、しばらく付いてなかった広告が復活しましたね。

もともとこの掲示板は、掲示板作成後一週間は広告が付かないので、
それと同じ処理にのせて復活させたのでしょう。

ちぇっ... とか言ってみる。(^^;


[15] Re:Cからの質問
返信


投稿者: (ぱ)
2003/05/07 02:29

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 >int *a;というのはもちろん使ったことがあります。

では私からも質問させてください。
繰り返しになりますが、

void func(int a);
void func(int *a);

このふたつのプロトタイプ宣言の意味の違いはわかりますか? (Y/N)

わかるとするなら、そして、void func(int a)とvoid func(int)の間に
意味的な違いがないこともわかっているのなら、
void (*func)(int*)におけるint*のいったいどこが疑問なのかが私にはわかりません。
教えていただけますか?

>また追加の質問になってしまうんですがなんですが
>jkl*で指定された型名と違うものが渡されてしまった場合は
>(たとえばint*と書いてあるのにdoubleを渡してしまうなど)
>どのようなことが起こるのですか?

これまた質問させてください。

monoさんは、関数のプロトタイプ宣言というものは、いったい何のために
必要なのだと思いますか?


[14] Re:Cからの質問
返信


投稿者: mono
2003/05/06 19:01

Mail:   Link:
 > >   だんだん理解できて来ました。
> >  それでは、もしjklがintだとしたらvoid (*func)(int*)ということになりますよね。
> > では、その(int*)は普通のintとは異なるんですか?
> >  それでなければどのような意味を持つ「*」なんですか?
>
> うーん。
>
> int a;
>
> のように変数を宣言して使ったことはありますよね?
>
> では、
>
> int *a;
>
> のような変数宣言を書いたことはありますか?
>
> あるのだとすれば、これと同じ意味です。int* は「intへのポインタ」を意味します。
>
> void func(int a);
> void func(int *a);
>
> このふたつのプロトタイプ宣言の意味の違いはわかりますか?
>
> 「int *a;」を書いたことがないのだとすれば... こんな宣言を書いたことのない人が、> > void abc(int *def, void (*ghi)(jkl*));
> なんていうマニアックな宣言を読むことになった経緯が知りたいと言うか...

   int *a;というのはもちろん使ったことがあります。
  また追加の質問になってしまうんですがなんですが
  jkl*で指定された型名と違うものが渡されてしまった場合は
  (たとえばint*と書いてあるのにdoubleを渡してしまうなど)
  どのようなことが起こるのですか?

> >  それでは質問を整理して言いたいと思います。
> >  聞きたいのは「(int)」と「(int*)」の両方のキャストでの違いです。
> >  「(int)」の方のキャストは使ったことがありますが
> >  「(int*)」の方はよくわからないので、その働きの違いを知りたいです
>
> (int)は、そのオペランド(右側にある式)をint型に変換します。
> (int*)は、そのオペランド(右側にある式)をint*型(intへのポインタ型)に変換します。

   わかりました。


[13] Re:Cからの質問
返信


投稿者: (ぱ)
2003/05/05 23:29

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 >   だんだん理解できて来ました。
>  それでは、もしjklがintだとしたらvoid (*func)(int*)ということになりますよね。
> では、その(int*)は普通のintとは異なるんですか?
>  それでなければどのような意味を持つ「*」なんですか?

うーん。

int a;

のように変数を宣言して使ったことはありますよね?

では、

int *a;

のような変数宣言を書いたことはありますか?

あるのだとすれば、これと同じ意味です。int* は「intへのポインタ」を意味します。

void func(int a);
void func(int *a);

このふたつのプロトタイプ宣言の意味の違いはわかりますか?

「int *a;」を書いたことがないのだとすれば... こんな宣言を書いたことのない人が、
> void abc(int *def, void (*ghi)(jkl*));
なんていうマニアックな宣言を読むことになった経緯が知りたいと言うか...

>  それでは質問を整理して言いたいと思います。
>  聞きたいのは「(int)」と「(int*)」の両方のキャストでの違いです。
>  「(int)」の方のキャストは使ったことがありますが
>  「(int*)」の方はよくわからないので、その働きの違いを知りたいです

(int)は、そのオペランド(右側にある式)をint型に変換します。
(int*)は、そのオペランド(右側にある式)をint*型(intへのポインタ型)に変換します。

まあ、intなどの基本型のキャストは実際に何らかの値の変換を伴うのに対し、
ポインタのキャストは、コンパイラを黙らせるだけで実質何もしないことが多い、
という差はありますが、今回の話ではそれはあまり本質的でないように思います。


[12] Re:Cからの質問
返信


投稿者: mono
2003/05/05 22:36

Mail:   Link:
 > > これは関数のプロトタイプ宣言のときに見つけたものなんですが。
> >
> > void abc(int *def, void (*ghi)(jkl*));
> >
> > これの(*func)(void*)と書いてある部分の意味を聞こうと思ってました。
>
> 「void (*ghi)(jkl*)」と書いてある部分のことですね?
> これは、
>
>  ghiは、「jkl*型の引数をひとつ取るvoid型の関数」へのポインタである。
>
> ということを意味します。ghiはabcという関数の引数名、jklは型名ということになります。

だんだん理解できて来ました。
 それでは、もしjklがintだとしたらvoid (*func)(int*)ということになりますよね。
では、その(int*)は普通のintとは異なるんですか?
 それでなければどのような意味を持つ「*」なんですか?


> > 質問がおかしくてすいませんでした。
>
> 質問をされること自体は歓迎しますが、「何がわからないのか」をもっと
> 具体的に示さないと有効な回答は得られないでしょう。
> 「ここまでは理解しているが、ここでわからなくなってしまった」
> ということがわかるようにしないと。

 すいませんでした。気をつけて書くようにします。

> > それと質問の追加になってしまいますが、
> > (XXX*)のキャストとはどのようなものなのでしょうか?
>
> 「(int*)」のようなキャストを使ったことはありませんか?
> 使ったことがないのなら、「(int)」というキャストはどうですか?
> 「何がわからないのか」を明確に示していただかないと、やっぱり誰も
> 答えられないのではないかと。

 それでは質問を整理して言いたいと思います。
 聞きたいのは「(int)」と「(int*)」の両方のキャストでの違いです。
 「(int)」の方のキャストは使ったことがありますが
 「(int*)」の方はよくわからないので、その働きの違いを知りたいです


[11] Re:Cからの質問
返信


投稿者: (ぱ)
2003/05/05 18:44

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > これは関数のプロトタイプ宣言のときに見つけたものなんですが。
>
> void abc(int *def, void (*ghi)(jkl*));
>
> これの(*func)(void*)と書いてある部分の意味を聞こうと思ってました。

「void (*ghi)(jkl*)」と書いてある部分のことですね?
これは、

 ghiは、「jkl*型の引数をひとつ取るvoid型の関数」へのポインタである。

ということを意味します。ghiはabcという関数の引数名、jklは型名ということになります。
どうしたらこう読めるかは、
「配列とポインタの完全制覇」
http://member.nifty.ne.jp/maebashi/prorammer/pointer.html
を参照してください。

もうひとつの質問にあったように引数名は省略できますから、
関数abcの引数名であるghiは省略できます。つまり

 void(*)(jkl*)

と書いても良いです。

また、逆に省略されている引数名を復活させて
 
 void(*ghi)(jkl* mno)

と書いてもよいです。意味は同じです。

以下の宣言は、全てコンパイルが通ります。

typedef int jkl;

void abc(int *def, void (*ghi)(jkl*));
void abc2(int *def, void (*)(jkl*));
void abc3(int *def, void (*ghi)(jkl* mno));
void abc4(int *def, void (*)(jkl* mno));

> 質問がおかしくてすいませんでした。

質問をされること自体は歓迎しますが、「何がわからないのか」をもっと
具体的に示さないと有効な回答は得られないでしょう。
「ここまでは理解しているが、ここでわからなくなってしまった」
ということがわかるようにしないと。

> それと質問の追加になってしまいますが、
> (XXX*)のキャストとはどのようなものなのでしょうか?

「(int*)」のようなキャストを使ったことはありませんか?
使ったことがないのなら、「(int)」というキャストはどうですか?
「何がわからないのか」を明確に示していただかないと、やっぱり誰も
答えられないのではないかと。


[10] Re:Cからの質問
返信


投稿者: mono
2003/05/05 12:10

Mail:   Link:
 > > それと
> > (XXX*)
> > と書いた場合のXXXと
> > (*XXX)
> > のXXXの違いは何なんでしょうか?教えてくださいお願いします。
>
> そもそもこれは何を書こうとしているんですか?
> > (XXX*)
> これはキャスト? XXXは型名?
> > (*XXX)
> これは間接演算子でポインタの指す先を取り出そうとしている? XXXは変数名?

これは関数のプロトタイプ宣言のときに見つけたものなんですが。

void abc(int *def, void (*ghi)(jkl*));

これの(*func)(void*)と書いてある部分の意味を聞こうと思ってました。
質問がおかしくてすいませんでした。

それと質問の追加になってしまいますが、
(XXX*)のキャストとはどのようなものなのでしょうか?


[9] Re:Cからの質問
返信


投稿者: (ぱ)
2003/05/04 23:42

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > プロトタイプ宣言を 
> int abc(int);
> とするのと
> int abc(int def);
> とするのでは、違いはあるんですか?

ありません。
コメントとしての効果はあるかもしれませんが、定義側と違うことを書いていても
通常エラーになりません(それではまった経験あり)。

> それと
> (XXX*)
> と書いた場合のXXXと
> (*XXX)
> のXXXの違いは何なんでしょうか?教えてくださいお願いします。

そもそもこれは何を書こうとしているんですか?
> (XXX*)
これはキャスト? XXXは型名?
> (*XXX)
これは間接演算子でポインタの指す先を取り出そうとしている? XXXは変数名?


[8] Cからの質問
返信


投稿者: mono
2003/05/04 15:46

Mail:   Link:
 いきなり質問なんですが 
C言語で
プロトタイプ宣言を
int abc(int);
とするのと
int abc(int def);
とするのでは、違いはあるんですか?

それと
(XXX*)
と書いた場合のXXXと
(*XXX)
のXXXの違いは何なんでしょうか?教えてくださいお願いします。


[7] Re:コードについて
返信


投稿者: かずま
2003/05/01 20:56

Mail:tomohiko@da2.so-net.ne.jp   Link:
 > こういう認識でよいですか? > かずまさん

変数の説明をします。

c: 入力文字(character)。各関数のローカル変数のほうがよかったけど、
行数を減らすために、グローバル変数にしました。
n: 行数。'\n' の数といいたいところですが、EOFの直前に '\n' 以外の
文字があれば、それも行と数えます。
m: コメント行の行数。
i: 入力文字(input)があったかどうかのフラグ。'\n'も入力文字とする。
k: コメントがあったかどうかのフラグ。
t: コメント以外の文字(token)があったかどうかのフラグ。

i、k、t は行頭ではゼロです。フラグですから、i = 1 や k = 1 でよかった
けど、短く見せるために、すべて i++、k++ にしました。


[6] Re:コードについて
返信


投稿者: (ぱ)
2003/04/30 20:32

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 かずまさんじゃないですが、掲示板復活で浮かれているのでreplyします。

> 1.mはコメント行を格納するわけですが、その式がm += (!t && k);となっています。
>  これはmに何を入れているのでしょうか?
>  tとkの初期値がはっきりしてないので処理の仕方が分かりません。

ざっとソースを見てみたところ、tはコメントの外の文字数、kはコメント内の
文字数を意味しているようです。
# /**/でもkはゼロにはならないから、ちょっと雑な表現ですが。

コメント行というのは、「コメント内の文字があり、かつコメント以外の文字が1文字もない」
行のことを指します。
Cでは、0は偽、0以外は真として扱われますから、コメント行のとき
「(!t && k)」は真になります。
Cでは真の条件式は1になりますから、これにより、mをひとつカウントアップ
できるわけです。

>  つまり、void eol(void)の処理がいまいち理解できていないので、教えて
> いただけますか?

eol()はend of lineの略でしょう。行の最後に来たときに呼び出される関数です。
行の最後に来たときに、「この行はコメント行かそうでないか」を判定しているわけです。

こういう認識でよいですか? > かずまさん


[5] コードについて
返信


投稿者: ゴールドマウンテン
2003/04/30 10:09

Mail:   Link:
 たくさんのアドバイスを頂戴し感謝しております。
現在分からないところとして、
1.mはコメント行を格納するわけですが、その式がm += (!t && k);となっています。
 これはmに何を入れているのでしょうか?
 tとkの初期値がはっきりしてないので処理の仕方が分かりません。
 つまり、void eol(void)の処理がいまいち理解できていないので、教えていただけますか?


[4] Re:長い行を書き込むと...
返信


投稿者: (ぱ)
2003/04/30 02:32

Mail:   Link:
 > NN4.7でのテストを兼ねて、長い行を書き込んだ場合のケース。

NNだとtableの幅指定を無視して全部表示しようとするようだ、ということがわかった。

> >ぽんぽこぴーのぽんぽこぱー

ぽんぽこぱーって何だよ... ぽんぽこなーじゃん。


[3] 長い行を書き込むと...
返信


投稿者: (ぱ)
2003/04/30 02:29

Mail:   Link:
 NN4.7でのテストを兼ねて、長い行を書き込んだ場合のケース。
じゅげむじゅげむごこうのすりきれかいざりすいぎょのすいぎょうまつうんらいまつふうらいまつくうねるところにすむところやぶらこうじぶらこうじぱいぽぱいぽぱいぽのしゅーりんがんしゅーりんがんのぐーりんだいぐーりんだいのぽんぽこぴーのぽんぽこぱーのちょうきゅうめいのちょうすけ
互いにシュワルツシルド半径を共有する複数のブラックホールは、その公転角運動の制御により特異点がむき出しになりエルゴ領域をその外側に移すことができる。


[2] Re:掲示板を移転します
返信


投稿者: (ぱ)
2003/04/29 23:51

Mail:   Link:
 ちなみにReplyするとこんな感じです。

行が長いと右端が切れてしまうのはちょっと痛いかなあ…
# 「返信」をクリックすれば、読むことはできるのですが。

いっそ発言内容をテーブルに入れるのをやめるべきでしょうかね。
そしたら横スクロールバーが出るでしょうから。

また、無料掲示板なので広告が入ってしまいます。ご了承ください。
こっちの掲示板が軌道に乗ったら、広告なしコースへの移行を考えます。
まあ、たいした費用じゃないですし。

> 長い間、Niftyに備え付けの掲示板を使用してきましたが、
> 文字数制限がきついなどの制限があるため、OTDに新掲示板を設置しました。
> こちらの掲示板については、以下の注意点があります。
>
> ・文書には適当な場所で改行を入れてください。改行なしで書き込むと、
>  IEでは右端がカットされるようです(この掲示板にはソースが貼られることが
>  多いため、インデントが崩れないよう、発言内容を<PRE>で囲んでいるためです)。
> ・発言の冒頭部分は、1文字分インデントされます。どうもサーバ側でメッセージを
>  展開するときに半角スペースが入るようです。<PRE>で囲むことは想定して
>  いなかったのでしょう。
> ・削除キーを入れることで発言を削除できますが、削除キーは半角数字4桁限定です。
>  削除キーを入れずに投稿すると、削除できません。また、英字などを混ぜると、
>  削除キーを入れなかったものとみなされるようです。
>
> なにかご意見等ありましたら、掲示板に書き込んでください。


[1] 掲示板を移転します
返信


投稿者: (ぱ)
2003/04/29 21:51

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 長い間、Niftyに備え付けの掲示板を使用してきましたが、
文字数制限がきついなどの制限があるため、OTDに新掲示板を設置しました。
こちらの掲示板については、以下の注意点があります。

・文書には適当な場所で改行を入れてください。改行なしで書き込むと、
 IEでは右端がカットされるようです(この掲示板にはソースが貼られることが
 多いため、インデントが崩れないよう、発言内容を<PRE>で囲んでいるためです)。
・発言の冒頭部分は、1文字分インデントされます。どうもサーバ側でメッセージを
 展開するときに半角スペースが入るようです。<PRE>で囲むことは想定して
 いなかったのでしょう。
・削除キーを入れることで発言を削除できますが、削除キーは半角数字4桁限定です。
 削除キーを入れずに投稿すると、削除できません。また、英字などを混ぜると、
 削除キーを入れなかったものとみなされるようです。

なにかご意見等ありましたら、掲示板に書き込んでください。


目次へ | ひとつ後の過去ログ