assert書くとWarning C6011
void func (unsigned char *addr) { assert(addr != NULL); XXXXXXXXXXXXXXXXXXXXXXX }
こんな感じで、assertを書くと、
Visual Studioのの静的分析ツール(PreFast)の機能でワーニングになるようだ。
Warning C6011:NULLポインタ'addr'を逆参照しています。
以下のホームページによると
http://connect.microsoft.com/VisualStudio/feedback/details/388402/warning-c6011-assert-macros-and-private-pointers
#define STRONG_ASSERT(x) assert(x); __analysis_assume(x)
にすると、警告がでないみたいだ。
どちらもちゃんと動くみたいだ。
Winアプリの場合、アサートのダイアログが出ないで、
異常終了で終わる場合があった。
#include "stdafx.h" #include <assert.h> #define STRONG_ASSERT(x) assert(x); __analysis_assume(x) int func(unsigned char * addr); int _tmain(int argc, _TCHAR* argv[]) { unsigned char *addr = NULL; func (addr); return 0; } int func(unsigned char * addr) { unsigned char chkStr[] = {'T','E','S','T'}; STRONG_ASSERT(addr != NULL); // assert(addr != NULL); for (int i = 0; i < 4; i++) { if (addr[i] != chkStr[i]) { return -1; } } return 0; }