0

レベル 4 の警告でLightZPngをコンパイルしようとしています。この警告に値しないことが明らかな行で、多くの C4127 が表示されます。例:

#define MAX_BITS 15
int values_per_bitlen[ MAX_BITS + 1 ];
for ( int i = 0; i <= MAX_BITS; ++i )    // C4127 is here
    values_per_bitlen[ i ] = 0;

#pragma 以外の警告を回避するには、このコードをどのように変更できますか?

4

4 に答える 4

1

はい、それは奇妙です。ループの変更以来、それは本当に定数式ではありません。iしたがって、これは VS2005 の問題のようです。価値のあることとして、VS2008 はまったく同じことを行います。

奇妙なことに、これだけのプロジェクトは文句を言わないので、Microsoft の警告生成コードの奇妙なエッジ ケースの問題である可能性があります。

#define MAX_BITS 15
int values_per_bitlen[ MAX_BITS + 1 ];
int main(int argc, char* argv[]) {
    for ( int i = 0; i <= MAX_BITS; ++i )
        values_per_bitlen[ i ] = 0;
    return 0;
}

ただし、実際には質問していません。あなたが知りたいこと、または私たちにやりたいことは何ですか?

アップデート:

実際の原因については、「Windows プログラマー」の回答を参照してください"#define for if (false) {} else for"。問題の原因となっている LightZ.cpp の上部にあります。

于 2009-06-12T02:51:28.480 に答える