アカウント名:
パスワード:
gccであることをいいことに、Cでも//でコメントアウトしてます。ごめんなさい(懺悔)
C99で//はコメント開始と規定されていますので問題なし!
# でも真面目な話、2011年現在で//から始まるコメントはCでないと言っちゃうのは勉強不足かと・・・# コンパイラの実装とは別にCもC++も規格は変化(進化とも退化ともいわん)していってますので。
けど、いくらC99なら使えるっていっても、Cでmalloc/calloc使わずに可変長配列使えると言われると違和感あるけどなぁ。
Cでmalloc/calloc使わずに可変長配列使えると言われると違和感あるけどなぁ。
試しに領域を確保して開放するだけの関数と、可変長配列を確保するだけの関数を作って一千万回まわすと
可変長配列: 0.210000(秒)malloc: 76.670000(秒)
速度が要求されるんで最近は可変長配列ばっかり使ってるけどwindowsでは使えないらしい。実際はmalloc一千万回する人なんて居ないか。でもpowを数百万回まわす人は居たな。テーブルに置き換えたら恐ろしく早くなった。
#変数宣言の場所がめちゃくちゃになってきたらもう終わりだとおもう。orz
どちらかというと、可変長配列はallocaの代替ですから、なんでもかんでもmalloc/callocの代わりに可変長配列できるとは限りません。ある程度大きな領域の確保には依然としてmalloc/callocその他が必要です。
あと一応、Windowsで可変長配列が使えないのではなく、MSVCやBCCがC99対応していないだけなので、GCCならWindowsだろうがなんだろうが可変長配列使えます(Intelのはどうだったかな?)。
> MSVCやBCCがC99対応していないBCCの場合、デフォルトオフですけどC99に対応 [embarcadero.com]してますよ。以下、C++ Builder 2009 のコマンドラインヘルプ。
% bcc32 -h -ACodeGear C++ 6.10 for Win32 Copyright (c) 1993-2008 CodeGear使用できるオプション (* はデフォルトの設定。xxx はサブオプションで、-h -X などで表示) : (メモ: -X- または -w-XXX は、通常、-X による設定または設定解除を取り消します)(略) -An C99 準拠のキーワードと拡張を使用します -Ax C++-0x 準拠のキーワードと拡張を使用します
なお、C+ Builder 6(2002) では非対応でした。C++ Builder 2007 は未確認。
デフォルトでオフになってるのは、既存のコード(大半がC89レベル)との互換性の問題からでしょうか。
そういえば、かつてVisualC++のC++も、長らく変数のスコープが非標準(「for(int i = 0; i < n; i++){}」といった変数宣言がループ後も有効なまま)という問題があり [noppi.jp]、MFCなどのライブラリが非準拠な仕様に依存してるからこっちがデフォルトなままだという噂でしたけど、今では(2005=VC8以降)ちゃんと標準準拠 [microsoft.com]になってますね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
にわかな奴ほど語りたがる -- あるハッカー
どこまでが笑い話・都市伝説なのか… (スコア:1, 興味深い)
究極的には 「// でコメントアウトできる C」みたいな…
Re: (スコア:0)
gccであることをいいことに、Cでも//でコメントアウトしてます。ごめんなさい(懺悔)
Re: (スコア:0, 既出)
C99で//はコメント開始と規定されていますので問題なし!
# でも真面目な話、2011年現在で//から始まるコメントはCでないと言っちゃうのは勉強不足かと・・・
# コンパイラの実装とは別にCもC++も規格は変化(進化とも退化ともいわん)していってますので。
Re: (スコア:1)
けど、いくらC99なら使えるっていっても、Cでmalloc/calloc使わずに可変長配列使えると言われると違和感あるけどなぁ。
1を聞いて0を知れ!
Re: (スコア:3, 興味深い)
Cでmalloc/calloc使わずに可変長配列使えると言われると違和感あるけどなぁ。
試しに領域を確保して開放するだけの関数と、可変長配列を確保するだけの関数を作って一千万回まわすと
可変長配列: 0.210000(秒)
malloc: 76.670000(秒)
速度が要求されるんで最近は可変長配列ばっかり使ってるけどwindowsでは使えないらしい。
実際はmalloc一千万回する人なんて居ないか。
でもpowを数百万回まわす人は居たな。テーブルに置き換えたら恐ろしく早くなった。
#変数宣言の場所がめちゃくちゃになってきたらもう終わりだとおもう。orz
Re:どこまでが笑い話・都市伝説なのか… (スコア:1)
どちらかというと、可変長配列はallocaの代替ですから、なんでもかんでもmalloc/callocの代わりに可変長配列できるとは限りません。ある程度大きな領域の確保には依然としてmalloc/callocその他が必要です。
あと一応、Windowsで可変長配列が使えないのではなく、MSVCやBCCがC99対応していないだけなので、GCCならWindowsだろうがなんだろうが可変長配列使えます(Intelのはどうだったかな?)。
Re:どこまでが笑い話・都市伝説なのか… (スコア:1)
> MSVCやBCCがC99対応していない
BCCの場合、デフォルトオフですけどC99に対応 [embarcadero.com]してますよ。以下、C++ Builder 2009 のコマンドラインヘルプ。
なお、C+ Builder 6(2002) では非対応でした。C++ Builder 2007 は未確認。
デフォルトでオフになってるのは、既存のコード(大半がC89レベル)との互換性の問題からでしょうか。
そういえば、かつてVisualC++のC++も、長らく変数のスコープが非標準(「for(int i = 0; i < n; i++){}」といった変数宣言がループ後も有効なまま)という問題があり [noppi.jp]、MFCなどのライブラリが非準拠な仕様に依存してるからこっちがデフォルトなままだという噂でしたけど、今では(2005=VC8以降)ちゃんと標準準拠 [microsoft.com]になってますね。