Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

セミコロンとカンマ

240 views
Skip to first unread message

Neznaika

unread,
Jan 15, 1999, 3:00:00 AM1/15/99
to
printf("%d",a) ではカンマなのに for(i=1;i<10;i++)では
どうしてセミコロンなのでしょう?最後のi++にはどうして
セミコロンがいらないのでしょう?つけなくても区別できる
からなら{}の中でも最後なら省略出来そうなものですが。
                   

Masato Iwase

unread,
Jan 15, 1999, 3:00:00 AM1/15/99
to

カンマは区切り、セミコロンは文の終りに使います。

次の使用例で、納得されると思います。

for (i=0, j=0, flag=false; i<10 && !flag; ++i, ++j) {
<snip>
}

とか

int array[10];
for (i=0; i<10; array[i++]=0);

--
(株)MMCコンピュータリサーチ 岩瀬雅人

Yuki Shiino

unread,
Jan 16, 1999, 3:00:00 AM1/16/99
to
 椎野です。

Neznaikaさんの<kodomo-1501...@ppp319.kek.jp>から


>printf("%d",a) ではカンマなのに for(i=1;i<10;i++)では
>どうしてセミコロンなのでしょう?

 for (i=1; i<10; i++) でセミコロンを使うのは、岩瀬さんも
指摘している通り「カンマ演算子を使うため」でしょう。
 では何故 printf("%d", a) ではセミコロンではなく、カンマ
なのかというと、ほとんど理由はありません。(英語の影響によ
り)幾つかのものを並べる時にはカンマを使う方が自然なので
しょう。

 因みに「引数区切りのカンマ」と「カンマ演算子」とは異なり
ますし、「forのセパレータとしてのセミコロン」と「文末記号
としてのセミコロン」も異なるものです。

引数区切りとしてのカンマ:
printf("%d", a);
~
カンマ演算子としてのカンマ:


for (i=0, j=0, flag=false; i<10 && !flag; ++i, ++j)

~ ~ ~
forのセパレータとしてのセミコロン:
for (i=1; i<10; i++)
~ ~
文末記号としてのセミコロン:
printf("%d", a);
~

 たまたま、C言語を設計した人は、
引数区切りの記号   を カンマ(,) で
カンマ演算子の記号  を カンマ(,) で
for のセパレータ記号 を セミコロン(;) で
文末記号       を セミコロン(;) で
表わすことにしただけです。実際、引数区切りの記号がパーセン
ト記号(%)で、forのセパレータ記号がコロン(:)であったとしても
問題なかったのです。

>for(i=1;i<10;i++)では
(中略)


>最後のi++にはどうして
>セミコロンがいらないのでしょう?つけなくても区別できる
>からなら{}の中でも最後なら省略出来そうなものですが。

 セパレータ(区切り)記号とターミネータ(末尾)記号の違い
のせいです。
セパレータ記号としてのパーセント記号(%):
A % B % C /* A, B, C それぞれの間に記号が必要 */
ターミネータ記号としてのパーセント記号(%):
A% B% C% /* A, B, C それぞれの終端に記号が必要 */

 forはセパレータ式なのに文はターミネータ式なのも、C言語の
設計者のセンスで、必然性は全くありません。Pascalだと文はセ
パレータ方式なので、{}の中の最後の文はセミコロンを省略でき
ます。(正確には、ちょっと違いますけど。)

 椎野 裕樹   yu...@cds.ne.jp


Neznaika

unread,
Jan 17, 1999, 3:00:00 AM1/17/99
to
In article <77npga$lpo$1...@news.cds.ne.jp>, Yuki Shiino <yu...@cds.ne.jp> wrote:
> 引数区切りの記号   を カンマ(,) で
> カンマ演算子の記号  を カンマ(,) で
> for のセパレータ記号 を セミコロン(;) で
> 文末記号       を セミコロン(;) で
> 表わすことにしただけです。

なるほど。ありがとうございます。セミコロン(;)は文末
カンマ(,)はセパレータは単純すぎる決めつけだったわけですか。
岩瀬さんの示して下さった例のようにカンマ演算子を使う場合
のためにこういった使い分けが必要になるのですね。

0 new messages