このコード片 (コメント行に注意してください):
#include <malloc.h>
#pragma warning(error: 4701)
int main(){
char buffer[1024];
//buffer[0] = 0;
void *p;
int size = 1;
if (size < 2)
p = malloc(size);
free(p); // C4701
return 0;
}
次の警告が表示されます (予想どおり)。
f:\d\warning.cpp(13) : error C4701: potentially uninitialized local variable 'p' used
ただし、で割り当てのコメントを外すmain()
と、警告は表示されなくなります。実行時エラー チェック/RTC1
を有効にするコマンド ライン オプションを使用してコンパイルしています。
cl.exe /RTC1 warning.cpp
Visual C++ 2013 および 2015 の最新の 64 ビット バージョンのコンパイラを試しました。どちらも同じ動作をしています。
質問: これはコンパイラのバグですか、それとも説明がありますか? Microsoft のドキュメントには、C4701 が指定された場所で /RTC1 が実行時エラーを発生させる可能性があると記載されていますが、警告が抑制されることについては何も記載されていません。
編集:buffer[0] = 0;
不可解な部分は、コメントにない場合にのみ警告が消えることです。