2009-08-18 35 views

答えて

36

はい - C標準ISO/IEC 9899:1999別称、C99(およびC++)の規格は、これがそうでなければならないと言います。正確なテキストについては、6.7.8項(「初期化」)の項目10をWG14 N1256にしてください。いくつかのコンパイラは常に(ゼロに失敗した任意のコンパイラを静的変数を初期化しない場合がありますので、

static int idx = 0; 

これを行う理由はない。他の人が指摘したように

、常に静的変数を初期化することをお勧めしますそのような初期化を行うには、最終的には壊れてしまい、CまたはC++コンパイラであると主張することはできませんでした)、それはあなたが意味するものを言います - プログラミングの最も基本的なルールかもしれません。

+1

もう一度...明示的に静的変数をゼロ初期化することの引数は、実行可能ファイルのサイズを拡張します。これは、もはや.bssには存在しないからです。 – ephemient

+4

私はそれがなぜそうであるべきかわからない。コンパイラは、明示的なゼロの初期化を簡単に無視できます。 –

+3

実装の詳細。 GCC 4.2とMSVC 7.1は 'static int a;'と 'static int a = 0;'を同等に扱っているようです。私は覚えていないコンパイラを覚えていますが、十分に古いものは手元にないようです。 – ephemient

3

標準では「はい」と表示されていますが...良い方法では、は常にの初期変数を指定する必要があります。コンパイラを変更したときや、別のマシンでコンパイルしなければならないときは、予期せぬ動作の可能性を最小限に抑える必要があります。

+5

また、将来の開発者には、値をゼロにする必要があることを明確にしています。 – Edd

+0

@Edd、そうです。 – AAA

+5

double somethingImportant() { static double arr [1024 * 1024]; ... } すべてのメンバーの明示的な初期化は少し難しいかもしれません。標準コンパイラを使用している場合は、定義によって初期化されます。コンパイラで作業しているような基本的なものに頼ることができない場合は、別のコンパイラを入手してください。 –

関連する問題