SO で範囲外のエラーが発生している投稿されたコードを見て、不思議に思いました。コンパイラがこのコードに対して(少なくとも最高レベルで)警告を生成することを期待します
#pragma warning(push,4)
int main(){
int x[2];
x[2]=0;
return 0;
}
#pragma warning(pop)
しかし、そうではありません。
EDGコンパイラはうまく言っています:
"sourceFile.cpp", line 3: warning:
subscript out of range
x[2]=0;
^
実際、EDGはもう少し多くのことを言っています(すべて予想されます)
"sourceFile.cpp", line 1: warning:
unrecognized #pragma
#pragma warning(push,4)
^
"sourceFile.cpp", line 4: warning:
subscript out of range
x[2]=0;
^
"sourceFile.cpp", line 3: warning:
variable "x" was set but never used
int x[2];
^
"sourceFile.cpp", line 7: warning:
unrecognized #pragma
#pragma warning(pop)
しかし、それは私の質問ではありません。
私は、この失敗が VC9 での省略の深刻なエラーを警告していると考えています (auto 変数以来、なおさらです!!!!)。考えを変える重大な理由を教えてくれる人はいますか?