【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.20442

最後のカンマは付けるべきか。
投稿者---kogy(2005/03/21 18:12:43)


char a[2][10] = { "abcd", "efgh", };
char b[2][10] = { "abcd", "efgh" };

上記の最後にカンマを付けても付けなくても
どちらの定義でもコンパイラは通るのですが、
本来はどちらが正しい(どちらで定義すべき)なのでしょうか。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:最後のカンマは付けるべきか。 20443 chu- 2005/03/21 18:37:18


No.20443

Re:最後のカンマは付けるべきか。
投稿者---chu-(2005/03/21 18:37:18)


どちらも認められている正しいコードです。

最後にもカンマを付けるようにしておくとテーブルを追加削除するとき便利ですね。
私は以下の用に使い分けています。
/* 複数行のときは付ける */
char a[2][10] = {
    "abcd",
    "efgh",
};
/* 1行のときは付けない */
char b[2][10] = { "abcd", "efgh" };

ただし、enumは最後にカンマを付けてはダメなので注意。
enum tag {
    abcd,
    efgh,   /* エラー */
};
※BCBでテストしたところ通ったので、C99では許されているかもしれません。




この投稿にコメントする

削除パスワード

No.20444

Re:最後のカンマは付けるべきか。
投稿者---あかま(2005/03/21 18:45:35)


>ただし、enumは最後にカンマを付けてはダメなので注意。
>※BCBでテストしたところ通ったので、C99では許されているかもしれません。
イエス。
http://seclan.dll.jp/c99d/c99d07.htm#dt19991011




この投稿にコメントする

削除パスワード

No.20445

Re:最後のカンマは付けるべきか。
投稿者---kogy(2005/03/21 22:40:58)


なるほど!
ありがとうございます。


この投稿にコメントする

削除パスワード

No.20452

Re:最後のカンマは付けるべきか。
投稿者---まきじ(2005/03/22 21:02:05)


>ただし、enumは最後にカンマを付けてはダメなので注意。
>enum tag {
>    abcd,
>    efgh,   /* エラー */
>};
>※BCBでテストしたところ通ったので、C99では許されているかもしれませ>ん。

以下の様に、三つのコンパイラーでコンパイルしてみたのですが、
エラーになりませんでした。

[Visual C++ ToolKit 2003]
cl /W4 /GX hoge.c では、エラーがでませんでした。

[Borland C++ Compiler 5.5.1]
bcc32 hoge.c では、エラーがでませんでした。

bcc32 -A hoge.c では、
「エラー E2272 hoge.c 6: 識別子が必要」
とエラーがでます。

-A は 「ANSI 準拠の予約語のみ使用。」とあったので
指定してみました。

[MinGW-GCC 3.3.3]
gcc -o hoge hoge.c では、エラーがでませんでした。

VCTK と BCC は ANSI(C89) 準拠だから、エラーがでると
思ったのですが、でませんでした。

MinGW-GCC は C99 準拠??



この投稿にコメントする

削除パスワード

No.20453

Re:最後のカンマは付けるべきか。
投稿者---tetrapod(2005/03/23 11:05:30)


> MinGW-GCC は C99 準拠??
というか gcc を含め、ほとんど全てのコンパイラはデフォルトでは独自拡張許可になっています。
そして独自拡張が勝手に enum の最後の , を許しています。

gcc-3 は準拠規格書を -std= オプションで選ぶことが出来ます。

1.gcc -c hoge.c
2.gcc -c -pedantic hoge.c
3.gcc -c -std=c99 -pedantic hoge.c
をそれぞれ試してみましょう。
1 は gcc 独自拡張を有効+C89
2 は gcc 独自拡張を警告+C89
3 は gcc 独自拡張を警告+C99
となります。



この投稿にコメントする

削除パスワード

No.20454

Re:最後のカンマは付けるべきか。
投稿者---まきじ(2005/03/23 15:53:53)


>1.gcc -c hoge.c
>2.gcc -c -pedantic hoge.c
>3.gcc -c -std=c99 -pedantic hoge.c
>をそれぞれ試してみましょう。
>1 は gcc 独自拡張を有効+C89
>2 は gcc 独自拡張を警告+C89
>3 は gcc 独自拡張を警告+C99
>となります。

で、GCCは納得いきました。

VCTK2003 は、なぜエラーにならないんでしょうか?
これも拡張機能でしょうか?
/Za オプションを付けてコンパイルしてみましたが、
エラーや警告はでませんでした。

cl /W4 /GX /Za hoge.c




この投稿にコメントする

削除パスワード

No.20455

Re:最後のカンマは付けるべきか。
投稿者---tetrapod(2005/03/23 17:34:31)


vc++ toolkit 2003 は使っていませんので VC++6SP6 で試しましたが
cl -W4 -Za -c hoge.c でやはりエラー・警告ともに出ませんね。

単にコンパイラの (バグ|仕様) でしょう。
# それ以上の詳細は Microsoft に訊いてください。



この投稿にコメントする

削除パスワード

No.20456

Re:最後のカンマは付けるべきか。
投稿者---まきじ(2005/03/23 17:42:52)


>単にコンパイラの (バグ|仕様) でしょう。
># それ以上の詳細は Microsoft に訊いてください。

そうですか、ありがとうございました。





この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧