我在GCC编译器中使用代码块。在下面的代码中,编译器在返回本地引用时发出警告,但在返回本地指针时没有发出警告,尽管两者是同一回事。为什么?
我知道这些变量是局部的,一旦控制从函数返回,它们就会被销毁。取消引用这些将导致未定义的行为。

int *check(int j)
{
    int *q;

    q= &j;
    return q; // No warning
    //return &j; // Warning
}

最佳答案

首先,因为警告是可选的。
第二,这个代码

int *q
...
return q;

不直接返回局部变量的地址。您编写了显式代码,使指针指向函数返回时变为无效的地址。不能指望任何编译器能把你从中解救出来。

关于c - 编译器不会在返回本地指针时发出警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38357775/

10-11 22:51
查看更多