为什么在返回时没有复制此值?

时间:2016-03-24 22:50:41

标签: c variables stack return-value

我有一个C函数(在我的Objective-C库中,在Xcode中构建),如下所示:

static uint32_t somelen() {
    char out[4];
    bzero(out, 4);
    // ... Work out contents of bytes 0-3.
    return *(uint32_t *)out
}

在调试模式下工作正常,但是在为发布而构建时,返回值有时完全不稳定。我现在,我意识到在堆栈上创建了out,因此在函数退出时会被清除。但我确实认为,在return语句中,我正在对值进行derefencing并返回字节的副本。但显然不是。我可以通过使函数成为静态变量来使函数正常运行:

    static char out[4];

但这看起来很傻。我只需要在此函数的持续时间和调用它的函数中使用该数据。返回一个值,调用函数可以存储在任何地方,这对我来说很有意义。我如何做到这一点?

0 个答案:

没有答案