中止関数が exit() を呼び出しているため、C6011 警告を回避しようとしています。どうやってやるの?
次に例を示します。
#include <stdlib.h>
void abort_function();
void func( int *p );
int main()
{
int x;
func( &x );
return 0;
}
void func( int *p )
{
if (NULL == p)
abort_function();
*p = 5;
}
void abort_function()
{
exit(0);
}
したがって、これは PREFast からの次の警告につながります。
warning C6011: Dereferencing NULL pointer 'p': Lines: 17, 18, 20
に置き換えるだけで、この警告abort_function()
がexit(0)
なくなります。
しかし、私は実際には大規模なコードベースで作業しており、すべての呼び出しを置き換えたくありませんでしたabort_function()
。そのため、次のように、関数を可変個引数マクロにし、関数定義を一時的に取り出すことで、これらの警告の多くを排除することができました。
#include <stdlib.h>
#define abort_function( ... ) exit(0);
/*void abort_function();*/
void func( int *p );
int main()
{
int x;
func( &x );
return 0;
}
void func( int *p )
{
if (NULL == p)
abort_function();
*p = 5;
}
#if 0
void abort_function()
{
exit(0);
}
#endif
これにより警告も解消されましたが、コードを変更する必要がないように使用できる PREFast オプションまたは注釈はありますか?