如何在使用GCC编译选项'-Werror'时忽略错误?

mcvgt66p  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(1262)

我有下面的测试代码,文件 test.c

#include <stdio.h>

int *func()
{
    int i = 123;
    return &i;
}

int main()
{
    printf("%d\n", *func());
}

如果我使用命令编译它,

gcc test.c -o test

它将包含以下警告信息:

warning: address of stack memory associated with local variable 'i'
  returned [-Wreturn-stack-address]
return &i;
        ^
1 warning generated.

但它可以输出这样的结果:123
如果我使用命令:

gcc -Werror test.c -o test

它将显示以下错误信息:

error: address of stack memory associated with local variable 'i'
  returned [-Werror,-Wreturn-stack-address]
return &i;
        ^
1 error generated.

现在我想使用 -Werror 选项,但我也想忽略与局部变量'i'* 相关的堆栈内存的 * 地址警告。我该怎么做?

vktxenjb

vktxenjb1#

大多数gcc警告都可以通过在警告名称前加上前缀no-来禁用,例如-Wno-return-stack-address
也就是说,这不是你想忽略的事情;返回指向堆栈变量的指针是一种未定义的行为,尽管它在大多数编译器上具有半可预测的结果,但它非常脆弱;任何函数调用,无论是隐式的还是显式的,都可能踩在指针所引用的值上。

相关问题