我试图避免 C6011 警告,因为中止函数正在调用 exit()。我怎样才能做到这一点?
这是一个例子:
#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 选项或注释来避免修改代码吗?