如何在g++中设置警告,以警告返回指向局部变量的指针

How to set warning in g++ for warning of returning pointer to local variable?

本文关键字:警告 返回 局部变量 指针 g++ 设置      更新时间:2023-10-16

我认为这两个函数都有问题,因为它们返回指向堆栈中分配的局部变量的引用/指针:

int &func1() {
   int a = 3; 
   return a;
}
int *func2() {
    int a = 3;
    int *p = &a;
    return p;
}

但是当我使用编译命令g++ -Wall时,为什么它只给func1警告而不给func2警告?是因为func2可以被有意地用于某些目的,还是可以通过添加其他参数来设置警告?我的g++版本是4.6.3,在Ubuntu 12.04上。

编译器无法知道你在func2中返回的指针要做什么。

你也可以返回一个数组的实例,例如:

int *func2() {
    int a = 3;
    int *p = &a;
    /*some useful stuff*/
    if (some_criteria)
        p = new int[10];
    return p;
}

因为编译器没有能力计算返回的指针的语义

对于上面的@kebs gcc.gnu.org/onlinedocs/gcc/Warning-Options.html,有一个选项(-Wno-return-local-addr)可以做到这一点,默认情况下使用-Wall(我检查过了)。

然而,我有像

这样的东西
    char * foo(string bar) {
      return bar.c_str();
    }

没有警告。但是bar是一个本地值的副本,尽管-Wall,它仍会静默返回。

应该有额外的&

    char * foo(string &bar) {
      return bar.c_str();
    }

浪费时间在一个大程序中跟踪这个几乎总是正确的