gpt4 book ai didi

c - 如何避免由于调用 exit() 的中止函数而导致的无效警告 C6011

转载 作者:行者123 更新时间:2023-12-04 11:17:31 24 4
gpt4 key购买 nike

我试图避免 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 选项或注释来避免修改代码吗?

最佳答案

在 MSVC 中,为 __declspec(noreturn) 定义 abort_function 应该这样做。
对于 gcc, __attribute__ ((noreturn)) 也是如此。

关于c - 如何避免由于调用 exit() 的中止函数而导致的无效警告 C6011,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com